当前位置: 首页 > news >正文

微服务-基础知识(CAP、BASE)

单体与微服务

单体架构:项目所有功能都在一个 war 包 /jar 包里,像商城的订单、库存、会员、支付等服务,都打包在一起,部署在 Tomcat 服务器,数据存在 MySQL。

  • 优点:开发简单,易于理解和维护;部署方便,只需部署一个应用包;测试容易,在一个环境就能完成。
  • 缺点:可维护性差,代码量增大后,模块间耦合度高,修改一处可能影响多处;扩展性受限,无法针对特定功能单独扩展;可靠性低,一处故障就可能导致整个应用不可用 。
单体架构阶段例子

整个电商平台的所有功能,像用户浏览商品的前端界面、下单的订单服务、查询库存的库存服务、会员管理服务、支付服务,都被打包在一个 WAR 包里,部署在一台 Tomcat 服务器上,数据都存在一个 MySQL 数据库里。就好比开了一家小杂货店,所有商品、收银、库存记录都在一个小店铺里,老板一个人能管过来,但要是店里某一处(比如收银台)出问题,整个店可能就没法正常营业了,而且要是节日期间人特别多(订单量暴增),想只增加收银的 “能力” 也做不到,得把整个店铺都扩大,成本高还麻烦。

集群级垂直化(业务系统级的拆分):为解决单体的问题,

  • 横向加服务器,变成集群;
  • 纵向按业务拆,订单、库存、会员、支付各成一个 WAR 包,分别部署到不同的服务器,数据库也对应拆成订单库、库存库等。这样业务耦合度降低,单个业务出问题,不影响其他,也方便针对热门业务(比如订单量暴增)单独扩展服务器。
  • 优点:业务耦合度降低,单个业务系统故障对其他系统影响小;可以针对不同业务需求,独立扩展资源,提高资源利用率;便于不同业务模块的并行开发 。
  • 缺点:系统间调用复杂度增加,需要考虑分布式通信和数据一致性问题;整体维护成本上升,要管理多个独立部署的系统 。
集群级垂直化阶段例子

为了应对业务增长,横向增加了 Tomcat 服务器,变成多台服务器的集群;纵向按业务把订单、库存、会员、支付这些业务拆分开,每个业务都有自己的 WAR 包,分别部署在不同的 Tomcat 服务器上,数据库也对应拆成订单库、库存库、会员库、支付库。这就像把杂货店变成了有多个分区的大超市,订单区、库存区、会员服务区、支付区各自独立,一个区(比如订单区)人多了,就可以单独给这个区增加人手和场地(扩展服务器),一个区出问题,也不会影响其他区正常运作,但每个区内部还是有很多流程和功能混在一起。

![](https://i-blog.csdnimg.cn/img_convert/f7c1a8bafe0c7a5f68c2f18a0376ca38.png)

SOA:核心是把通用、会被多个上层服务调用的业务,抽成独立基础服务,用 ESB(企业服务总线)连接。比如电商、运营系统都可能用订单、库存等服务。这样解决了 “信息孤岛”,让共享业务能复用,像会员服务,电商和运营系统都能调用。[即电商、运营都能调用订单、库存服务】

  • 优点:解决信息孤岛问题,实现业务共享和复用,提高开发效率;业务灵活性高,能快速响应业务变化,便于新业务集成;提高系统的可扩展性,可独立扩展单个服务 。
  • 缺点架构复杂,建设和维护成本高,需要专业的 ESB 等技术支撑;服务治理难度大,需要管理服务间的依赖、版本、安全等 。
SOA 阶段

电商平台和运营系统(比如用于平台运营管理的系统)都需要用到订单、库存、会员等服务,于是把这些通用的、会被多个上层系统调用的业务,抽取成独立的基础服务,通过 ESB(企业服务总线)来连接各个服务。比如电商系统要下单,运营系统要统计会员数据,都可以调用对应的订单服务、会员服务。这样就解决了不同系统之间的 “信息孤岛” 问题,让订单、会员这些共享业务能被多个系统复用,不过服务之间的调用还是通过比较重的 ESB 来管理。

![](https://i-blog.csdnimg.cn/img_convert/8d279f23a2a1685bdd78f3bc623832c7.png)

微服务:SOA 拆分的服务,还能按更细的业务功能拆,独立部署,降低耦合、提升容错。

比如订单服务还能拆得更细。微服务用 API 网关统一管理服务,服务间用 REST API 通信。但服务拆得太细,数量变多,构建、发布、运维就更复杂了。可以说 SOA 是微服务的 “超集”,多个微服务能组成一个 SOA 服务。

  • 优点:高内聚低耦合,每个微服务专注单一功能,开发、测试、维护更方便;扩展性强,可针对不同微服务进行单独的资源扩展;技术选型灵活,不同微服务可根据需求选择不同技术栈。
  • 缺点
    * 服务数量多,管理和监控复杂,运维难度大;
    * 分布式系统带来的数据一致性、网络延迟等问题,增加开发复杂性;部署成本高,要管理多个微服务的部署和运行 。
微服务阶段

SOA 拆分出来的服务,又按照更细的业务功能进行拆分和独立部署。比如订单服务,还能拆分成订单创建、订单查询等更细的微服务,每个微服务都有自己的数据库(或数据存储),通过 API 网关来统一管理服务,服务之间用 REST API 进行通信。就像把大超市的每个区又拆成了更小的独立小店,订单创建店、订单查询店等,各自独立运营,一家店出问题,不影响其他店,而且能根据具体需求(比如订单创建需求猛增),只给订单创建的微服务增加资源。但这样一来,服务数量变多,管理、发布、运维这些工作的复杂度也大大增加了。

![](https://i-blog.csdnimg.cn/img_convert/3e9ff403728f6debea5bffe155a59788.png)

微服务技术栈

  1. 配置管理:借助 Nacos、Config 等工具,统一管理微服务的配置信息,让所有微服务能便捷获取和使用配置,方便配置的集中维护与动态更新。
  2. 服务注册列表:通过注册中心,把所有微服务都注册进去,形成一个服务清单,这样其他微服务要调用服务时,能轻松找到目标服务。
  3. 网关处理请求:网关作为所有请求的入口,对进来的请求进行处理,可进行权限控制,判断请求是否有权限;也能设置白名单,白名单内的请求可通行;还能对请求进行路由,决定哪些请求转发到新系统。
  4. 熔断限流:当某个微服务请求量过大,负载过高时,熔断器会从关闭状态转为打开状态,此时请求会被拦截,返回 “系统繁忙,请稍等” 的提示。之后熔断器会每隔一段时间发送测试请求,查看服务是否恢复,此时处于半开状态,若服务负载正常了,熔断器就转回关闭状态,允许请求正常访问。
  5. 负载均衡策略:运用 Ribbon 等工具,制定规则,决定请求分发到哪台运行服务的机器上,让多台机器合理分担请求压力,避免单台机器负载过高。
  6. 流处理与消息总线:在消息队列之上添加了一层数据处理逻辑,原本是想实现用户能无缝切换不同的消息队列,但实际效果并不理想。
  7. 日志跟踪:利用生成的 Trace ID,对微服务之间的调用链路进行跟踪,像从订单服务到物流服务等不同微服务的调用关系,都能通过这个 Trace ID 清晰呈现,便于排查问题。

CAP&BASE

CAP

名称详细说明
Consistency(一致性)在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)
Availability(可用性)在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备高可用性)
Partition tolerance(分区容忍性)一个分布式系统里面,节点组成的网络本来应该是连通的。然而可能因为一些故障,使得有些节点之间不连通了,整个网络就分成了几块区域,数据就散布在了这些不连通的区域中,这就叫分区。
当一个数据项只在一个节点中保存,那么分区出现后,和这个节点不连通的部分就访问不到这个数据了,这时分区就是无法容忍的。
提高分区容忍性的办法就是把数据项复制到多个节点上,容忍性就提高了。然而,要把数据复制到多个节点,就会带来一致性的问题,而要保证一致,每次写操作就都要等待全部节点写成功,而这等待又会带来可用性的问题
【复制多个副本,使得分区时保证该分区内部有足够多的数据,但是多副本会导致数据一致性问题(副本越多数据一致性问题越大,比如一个副本必然没有数据一致性问题)
解决:等待所有节点写入数据成功,但是这个又会导致可用性问题(即等待时候集群不可用) 】

高可用性:如果说某个节点故障了但是集群整体还可以运行 ,则说明保持了高可用性

BASE

BASE 理论是在 CAP 理论中一致性和可用性之间权衡的结果,源于大规模互联网分布式系统的实践总结,是从 CAP 定理逐步演化而来的 。

BASE 理论核心思想及举例

  • 强一致性(Strong consistency): 以银行转账为例,如果 A 给 B 转账 100 元,在强一致性要求下,转账操作完成后,A 的账户立即减少 100 元,B 的账户立即增加 100 元,任何节点查询到的 A 和 B 账户余额都是最新且一致的。但在大规模分布式系统中,要实现强一致性的成本很高。
  • 最终一致性(Eventual consistency):以电商的商品库存为例,当多个用户同时购买一件商品时,不同的下单请求可能会被分发到不同的服务器节点处理。在某一时刻,各个节点上显示的库存数量可能并不一致 。但经过一段时间,比如订单处理系统完成数据同步后,所有节点上显示的库存数量会达到一致 。

BASE 理论具体概念及举例

  • 基本可用(Basically Available):以电商平台的 “双 11” 大促活动为例,在流量洪峰时期,平台可能会出现部分页面加载缓慢,或者某些非核心功能(如商品评价晒单功能)暂时无法使用的情况,但核心的下单、支付功能依然可以正常使用,这就是保证了基本可用 。
  • 软状态(Soft State):以微博的点赞功能为例,当大量用户同时对一条热门微博点赞时,由于数据同步存在延迟,不同地区的用户在短时间内看到的点赞数可能不一样,这就是软状态。但随着时间推移,点赞数最终会趋于一致 。
  • 最终一致性(Eventual Consistency):以分布式数据库中的用户信息表为例,假设用户在不同的区域中心修改自己的联系方式,由于网络延迟等原因,各个区域中心数据库中的用户联系方式可能在短时间内不一致。但经过一段时间的数据同步后,所有区域中心数据库中该用户的联系方式都会更新为最新的状态,这就是最终一致性 。

基本可用:即保证基本/核心的功能可用即可,其他功能无需维持【比如手机只剩下打电话,抖音功能取消】

软状态:

http://www.dtcms.com/a/390911.html

相关文章:

  • 存储卷清理策略在vps环境磁盘空间维护的操作指南
  • Day46 ARM硬件体系 从计算机架构、处理器类型、指令集到内核寄存器与SoC总线结构
  • 【MySQL】从视图到用户和权限管理
  • 栈与队列:核心差异与应用场景
  • 【Hadoop】ZooKeeper:分布式系统的协调核心与一致性保障
  • AWS 全球机房延迟对比 区域选型经验分享
  • 免费插件分享 |Scene Switcher Pro
  • Vue前端开发工具有哪些?常用Vue开发工具推荐、Vue前端开发工具对比与最佳实践分享
  • 信道管理模块实现
  • Java 网络原理(一)--- 自定义协议,UDP协议和TCP协议
  • 键盘失灵 键盘不好使问题解决(更新到 Windows 11后 )
  • 远程控制操作中,如何开启游戏键盘及3D鼠标?移动端设置教程分享
  • C 语言宏函数进阶:逗号表达式与 GNU 拓展的妙用
  • 币安加密货币API接口文档
  • Ubuntu20.04仿真 | iris无人机添加mid360激光雷达可直接使用文件
  • 17.ImGui-Hook消息循环
  • 《Skinned Mesh Renderer与LOD系统蒙皮变形异常全解析》
  • 免费插件分享 |Pro Scene Manager
  • Elasticsearch 的 ES|QL 编辑器体验 vs. OpenSearch 的 PPL 事件分析器
  • Unity核心概念⑪:光
  • C 语言运算符优先级(超详细)
  • Ingress使用示例
  • HarmonyOS开源项目分享:识笺——高效学习的卡片应用
  • 揭秘提示词攻击:AI时代的安全新战场
  • vscode安装go插件问题
  • 创作一个简单的编程语言3 加上VLLM后端
  • C语言入门指南:内存操作函数详解
  • React 列表渲染 列表排序 条件渲染 数据渲染 响应式处理
  • 从安卓手机切换到iPhone:好处、缺点及4种方法
  • C++ 篇 类和对象(1)万能工具怎么用?