go-微服务的设计概括

一、微服务到底是什么?

初学者很容易把微服务和分布式混为一谈,但其实二者之间存在非常大的差异,我个人认为主要有以下几点:

  1. 分布式主要是一种技术手段,用来保证多个相同的进程能够共同工作而不出错。采用各种复杂的技术手段(比如选举机制、数据同步机制、传输机制、心跳机制等等很多手段)来保证数据一致性、可靠性、分区容错性(CAP理论)。使得它们能够共同工作,使得存储、吞吐量等各项性能乘倍提升
  2. 微服务更多的是一种设计,通过业务职能将一个项目划分为多个服务,每个服务专注于自己的职能即可。有一个理论叫小即是美,微服务的划分将一个大模块划分为多个小模块,每个团队负责一个小模块会更加精细,并且更加灵活,所谓的灵活我们接下来会讲解。
  3. 在实际业务场景中,微服务和分布式又是密不可分的。如果公司选择了微服务架构说明公司的业务体量已经达到了一定规模,那么考虑到性能和高可用性一般同一个服务会有多个实例,同时存储组件也会有采用分布式的组件来存储。

二、微服务到底有什么好的?

并不是所有项目一定要使用微服务,只有当业务的复杂性和体量到达一定程度后,微服务才能发挥它的作用

我们想象自己是一名大厂架构师,公司正在经历从单体到微服务的转型。面对如此庞大、复杂的业务系统,我们会面临什么问题?

  1. 访问量暴增,一个单体服务即使它的物理机非常牛逼,仍然可能支撑不住导致宕机
  2. 数据量暴增,目前我们所有的数据都在一个数据库中,如何进行扩容
  3. 由于迭代太快,可能一些团队写了一些错误代码,导致整个程序不可用
  4. 每次新写几个功能都要部署整套单体系统才能够进行测试

针对问题一、二,简单粗暴的办法就是复制。复制几个相同的单体服务和数据库放在不同的物理机上,来提高性能。这种办法确实是短期最有效的,用来应急没有问题。但是长期来看这存在严重的浪费问题。有以下几点:

  • 大部分时候流量暴增都是针对几个热点模块,并不是所有的模块访问量都大,也并不是所有模块的数据表都需要扩容。粗暴的复制会浪费很多设备
  • 如果采用微服务的方式,只对热点模块和对应的数据库进行复制能够更加精准解决性能问题,且能够大大减小资源浪费

针对问题三、四,单体架构几乎无解,可微服务则能够很好的避免。
微服务中哪怕出现严重bug也只会影响自己的服务,并且上线都是逐步上线,没问题了才全部替换,能够大大提高整体的可用性。
测试的时候只需要部署该服务以及依赖的服务即可,不需要全部部署

三、微服务需要注意哪些问题?

微服务并不是银弹能够解决所有问题。它会增大系统的复杂性并严重依赖于基础设施。

  1. 设计微服务需要考虑服务的划分以及协同工作,最重要的是服务之间涉及到网络传输,需要考虑非常多的异常情况
  2. 微服务需要有配套的基础设施,比如链路跟踪、分布式日志、性能指标采集、动态扩缩容等等
  3. 需要考虑服务之间的通信问题,比如通信协议、api设计规范(非常重要)、打造一个统一的标准
  4. 需要考虑服务注册、发现
  5. 需要考虑分布式带来的问题
    等等很多

所以在业务还不复杂的时候,使用微服务是非常不明智的选择

四、微服务设计原则

去中心化原则:
微服务设计里面尽量不要有流量中心和数据中心。
比如我们通常会有一个BFF层用来并行调用多个微服务拿到数据进行组合,那么我们应该根据业务将BFF层拆分成多个BFF组件,否则所有接口的流量都走一个BFF容易导致宕机,也很容易因为一个地方的失误导致整个BFF不可用。
第二个就是数据中心,应该为每个服务设计一个数据库,这样当需要进行扩容伸缩时不需要对全部数据库进行扩容,更有针对性。

4.1 微服务架构

在这里插入图片描述

Gateway:提供认证授权、流量控制、负载均衡等通用支持。常见的手段是将认证得到的用户信息放到header中传输给BFF层
BFF: 并行访问微服务接口组装数据返回给用户,注意的是BFF应该提供粒度较大、较通用、并且风格统一的接口,用来减小前端人员调用的复杂度

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/48257.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Ubuntu2310搭建openstack高可用集群B版

openstack-ha 环境初始化安装haproxy安装keepalived数据库集群高可用rabbitmq集群高可用memcache集群配置 keystone高可用glance高可用placement高可用nova高可用neutron高可用horizon高可用 本实验使用两台节点master和node配置haproxy高可用,keepliaved配置主备抢…

IntelliJ IDEA 直接在软件中更新为最新版

当我们的 IDEA 工具许久没有更新,已经拖了好几个版本,想跨大版本更新,比如从2020.2.1 -> 2023.x.x 此时,我们菜单栏点击 Help -> Check for Updates… ,右下角会有提示更新,如下图: 点…

go 实现websocket以及详细设计流程过程,确保通俗易懂

websocket简介: WebSocket 是一种网络传输协议,可在单个 TCP 连接上进行全双工通信,位于 OSI 模型的应用层。WebSocket 协议在 2011 年由 IETF 标准化为 RFC 6455,后由 RFC 7936 补充规范。 WebSocket 使得客户端和服务器之间的数…

Python PDF Magic:合并和拆分随心所欲

大家好!小编今天要为大家带来一篇关于Python操作PDF的秘籍——无论是要将PDF合并成一份整体,还是将一个庞大的PDF文件拆分成多个小伙伴,都轻松hold住!你准备好了吗?让我们开始这场奇妙的PDF操作之旅吧! 准…

机械学习—零基础学习日志(高数06——函数特性)

零基础为了学人工智能,真的开始复习高数 函数的性质,开始新的学习! 有界性: 解法放这里: 证明有界,其实内部的包含知识点很多。第一,如果有界,你需要证明函数在一定区间内&#xff…

《Techporters架构搭建》-Day02 集成Mybatis-plus

集成Mybatis-plus Mybatis-plus集成Mybatis-plus步骤小结 Mybatis-plus Mybatis-plus官网 MyBatisPlus(简称MP)是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。它引入了一些新的特性&…

【探索Linux】P.40(传输层 —— TCP滑动窗口 | 快重传 | 流量控制 )

阅读导航 引言一、TCP滑动窗口1. 为什么要用滑动窗口(1)逐个确认(2)优化逐个确认(滑动窗口) 2. TCP滑动窗口的工作原理 二、快重传的引入三、快速重传详细介绍1. 机制原理2. 触发条件3. 操作步骤4. 与超时重…

如何处理AI模型中的“Gradient Vanishing”错误:优化训练技巧

如何处理AI模型中的“Gradient Vanishing”错误:优化训练技巧 🌑 如何处理AI模型中的“Gradient Vanishing”错误:优化训练技巧 🌑摘要引言“Gradient Vanishing”问题的成因分析 🤔1. 激活函数的选择2. 网络层数过深3…

【自动驾驶汽车通讯协议】SPI通讯:深入理解与应用

文章目录 0. 前言1. 工作原理2. 模式与配置2.1 CPOL (Clock Polarity)2.2 CPHA (Clock Phase)2.3 组合模式 3. 特性与优势4. 在自动驾驶汽车中的应用5. 结论 0. 前言 按照国际惯例,首先声明:本文只是我自己学习的理解,虽然参考了他人的宝贵见…

【MCGS学习-待更】

1、Mcgspro与mcgse区别&入门先学哪个合适? ? 2、软件下载 现在官网没有找到下载链接。 这个网盘里有学习资料: 昆仑通态Mcgspro学习笔记(V3.3.6)-CSDN博客 3、基础入门资料视频(待找) …

谷粒商城实战笔记-36-前端基础-Vue-介绍HelloWorld

文章目录 一,MVVM 思想直接操作DOM的示例使用Vue和MVVM的示例MVVM与DOM操作的主要区别 二,Vue 简介三,第一个Vue项目1 新建项目2 安装依赖3 使用Vue 这一节的主要内容是演示Vue的简单使用。 一,MVVM 思想 M:即 Model…

【电路笔记】-放大器的频率响应

放大器的频率响应 文章目录 放大器的频率响应1、概述2、定义3、电容器的影响4、低频响应5、高频响应6、总结1、概述 对于任何电子电路来说,放大器的行为都会受到其输入端子上信号频率的影响。 该特性称为频率响应。 频率响应是放大器最重要的特性之一。 在放大器设计的频率范…

凭什么赚钱?

我先说一个朴素的逻辑,赚钱的本质是交换,而交换的底层逻辑是需求。那么现在赚钱的公式就出来了,挖掘需求,找到人群,进行兜售。 而我们普遍意义上的赚钱,就分为两类,体力和脑力。脑力是高纬度的赚…

【C++】深入理解函数重载:C语言与C++的对比

文章目录 前言1. 函数重载:概念与条件1.1 什么是函数重载1.2 函数重载的条件1.3 函数重载的注意点 2. 函数重载的价值2.1 书写函数名方便2.2 类中构造函数的实现2.3 模板的底层实现 3. C语言与C的对比3.1 C语言不支持函数重载的原因3.2 C支持函数重载的原因 4. Linu…

2024.7.19 作业

1.链表的排序 int list_sort(NodePtr L) {if(NULLL || L->len<1){printf("排序失败");return -1;}int lenL->len1;NodePtr p;int i,j;for( i1;i<len;i){for( j0,pL;j<len-i;j,pp->next){if( p->data > p->next->data ){datatype tp-&…

机器人开源调度系统OpenTcs6-架构运行分析

系统启动 启动 Kernel&#xff1a;加载核心应用&#xff0c;初始化系统配置和状态。 启动 Plant Overview&#xff1a;加载图形用户界面&#xff0c;初始化模型和用户界面。 模型导入和配置 在 Plant Overview 中导入或创建工厂布局模型。 配置路径、位置和车辆信息。 车辆连…

C++迈向精通:STL设计机制之运算检查(含部分源码解析)

STL设计机制之支持运算检查 文章目录 STL设计机制之支持运算检查__STL_REQUIRES_LessThanComparable_STL_ERROR::__less_than_comparable_requirement_violation STL运算检查方法的特点do{...}while 的优点场景1场景2 __x __x 自己写一个运算检查 单说这个标题可能有点奇怪&am…

基于java的设计模式学习

PS &#xff1a;以作者的亲身来看&#xff0c;这东西对于初学者来说有用但不多&#xff0c;这些东西&#xff0c;更像一种经验的总结&#xff0c;在平时开发当中一般是用不到的&#xff0c;因此站在这个角度上用处不大。 1.工厂模式 1.1 简单工厂模式 我们把new 对象逻辑封装…

【VUE】v-if和v-for的优先级

v-if和v-for v-if 用来显示和隐藏元素 flag为true时&#xff0c;dom元素会被删除达到隐藏效果 <div class"boxIf" v-if"flag"></div>v-for用来进行遍历&#xff0c;可以遍历数字对象数组&#xff0c;会将整个元素遍历指定次数 <!-- 遍…

【大数据】JSON文件解析,对其文本聚类/情感分析

目录 引言 JSON&#xff08;JavaScript Object Notation&#xff09; 文本聚类K-means 基本步骤 优点 缺点 实际应用 情感分析 核心任务与应用场景 算法原理与技术 json数据集 情感分析实现 文本聚类实现 引言 JSON&#xff08;JavaScript Object Notation&#…