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

微服务之 CAP原则

文章目录

  • 微服务CAP原则
    • AC 可用性 + 一致性
    • CP 一致性 + 分区容错性
    • AP 可用性 + 分区容错性


提示:以下是本篇文章正文内容,SpringCloud系列学习将会持续更新

微服务CAP原则

经过前面的学习,我们对 SpringCloud Netflix 以及 SpringCloud 官方整个生态下的组件认识也差不多了,入门教学就到此为止,下一章将开启真正精彩的正片部分,本章的最后我们还是来了解一些理论上的知识。
在这里插入图片描述

CAP原则又称CAP定理,指的是在一个分布式系统中,存在Consistency(一致性)Availability(可用性)Partition tolerance(分区容错性),三者不可能同时保证,最多只能保证其中的两者。

  • 一致性(C):在分布式系统中的所有数据备份,在同一时刻都是同样的值(所有的节点无论何时访问都能拿到最新的值)

  • 可用性(A):系统中非故障节点收到的每个请求都必须得到响应(比如我们之前使用的服务降级和熔断,其实就是一种维持可用性的措施,虽然服务返回的是没有什么意义的数据,但是不至于用户的请求会被服务器忽略)

  • 分区容错性(P):一个分布式系统里面,节点之间组成的网络本来应该是连通的,然而可能因为一些故障(比如网络丢包等,这是很难避免的),使得有些节点之间不连通了,整个网络就分成了几块区域,数据就散布在了这些不连通的区域中(这样就可能出现某些被分区节点存放的数据访问失败,我们需要来容忍这些不可靠的情况)

总的来说,数据存放的节点数越多,分区容忍性就越高,但是要复制更新的次数就越多,一致性就越难保证。同时为了保证一致性,更新所有节点数据所需要的时间就越长,那么可用性就会降低。

所以说,只能存在以下三种方案:

AC 可用性 + 一致性

 要同时保证可用性和一致性,代表着某个节点数据更新之后,需要立即将结果通知给其他节点,并且要尽可能的快,这样才能及时响应保证可用性,这就对网络的稳定性要求非常高,但是实际情况下,网络很容易出现丢包等情况,并不是一个可靠的传输,如果需要避免这种问题,就只能将节点全部放在一起,但是这显然违背了分布式系统的概念,所以对于我们的分布式系统来说,很难接受。

CP 一致性 + 分区容错性

 为了保证一致性,那么就得将某个节点的最新数据发送给其他节点,并且需要等到所有节点都得到数据才能进行响应,同时有了分区容错性,那么代表我们可以容忍网络的不可靠问题,所以就算网络出现卡顿,那么也必须等待所有节点完成数据同步,才能进行响应,因此就会导致服务在一段时间内完全失效,所以可用性是无法得到保证的。

AP 可用性 + 分区容错性

 既然 CP 可能会导致一段时间内服务得不到任何响应,那么要保证可用性,就只能放弃节点之间数据的高度统一,也就是说可以在数据不统一的情况下,进行响应,因此就无法保证一致性了。虽然这样会导致拿不到最新的数据,但是只要数据同步操作在后台继续运行,一定能够在某一时刻完成所有节点数据的同步,那么就能实现最终一致性,所以 AP 实际上是最能接受的一种方案。

 比如我们实现的 Eureka 集群,它使用的就是 AP 方案,Eureka 各个节点都是平等的,少数节点挂掉不会影响正常节点的工作,剩余的节点依然可以提供注册和查询服务。而 Eureka 客户端在向某个Eureka 服务端注册时如果发现连接失败,则会自动切换至其他节点。 只要有一台 Eureka 服务器正常运行,那么就能保证服务可用(A),只不过查询到的信息可能不是最新的(C)

回到目录…


总结:
提示:这里对文章进行总结:
本文是对SpringCloud的学习,了解了微服务的CAP原则,并且认识了三种组合方案的利弊。之后的学习内容将持续更新!!!

http://www.lryc.cn/news/33184.html

相关文章:

  • 乐鑫特权隔离机制 #4 | 用户应用程序的安全启动
  • 剑指 Offer 46. 把数字翻译成字符串
  • tar命令——归档/压缩和解压缩文件
  • Softing smartLink网关——推进过程工业数字化转型
  • Spark的常用算子
  • Unity Avatar Cover System - 如何实现一个Avatar角色的智能掩体系统
  • steam/csgo搬砖项目到底真的假的?
  • 【Python笔记20230307】
  • SBOM应该是软件供应链中的安全主食
  • [计算机组成原理(唐朔飞 第2版)]第一章 计算机系统概论 第二章 计算机的发展及应用(学习复习笔记)
  • Python的数据分析相关的框架
  • 为什么会出现植物神经紊乱 总是检查不出来该怎么办
  • 宏任务和微任务
  • 使用WebSocket、SockJS、STOMP实现消息实时通讯功能
  • C++回顾(十一)—— 动态类型识别和抽象类
  • 雷电模拟器安卓7以上+Charles抓包APP最新教程
  • vsvode 配置sftp,连接远程linux全过程
  • C++类转换为蓝图、打印日志、蓝图关卡、删除C++文件
  • elasticsearch高级篇:核心概念和实现原理
  • 部署安装Nginx服务实例
  • 云原生架构设计原则及典型技术
  • 【Linux】-- 工具介绍 vim_gcc/g++_gdb
  • JAVA SE: IO流
  • 打破原来软件开发模式的无代码开发平台
  • 06-redux中的hook
  • watch监听不到数组对象的变化
  • 言语理解与表达之语句表达
  • 2023年全国最新食品安全管理员精选真题及答案14
  • 【MySQL】约束
  • C语言学习(三)