首页 > 其他分享 >微服务CAP原则

微服务CAP原则

时间:2023-06-26 10:14:46浏览次数:29  
标签:CAP 服务 原则 可用性 容错性 分布式系统 一致性 数据 节点

微服务CAP原则

 

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

 

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

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

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

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

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

AC 可用性+一致性

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

CP 一致性+分区容错性

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

AP 可用性+分区容错性

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

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

标签:CAP,服务,原则,可用性,容错性,分布式系统,一致性,数据,节点
From: https://www.cnblogs.com/manmanblogs/p/17504599.html

相关文章

  • 开发一款宠物服务小程序可以带来什么呢?
    1.促进营销小程序自带附近小程序功能,只要在附近5公里以内,就会自动向顾客推荐店铺。在五公里范围内养宠物的用户,有微信用户就可以知道你的店铺,这对宠物店,宠物医院来说是非常有利的营销。2.提升用户体验宠物店,宠物医院可以通过小程序开通商城,然后通过接口连接外卖平台,实现订单采购、......
  • 【从零开始学微服务】03.软件架构的演化过程
    大家好,欢迎来到万猫学社,跟我一起学,你也能成为微服务专家。目前大部分的企业系统和互联网应用都是采用Web的形式提供服务能力,根据系统的组织方式和部署结构,我们通常把软件架构的演化过程分为以下几个阶段:单体架构垂直架构SOA架构微服务架构单体架构单体架构,也被成为巨石......
  • Windows Server操作系统中的DHCP Server Service是一种集成在操作系统中的功能,用于提
    WindowsServer操作系统中的DHCPServerService是一种集成在操作系统中的功能,用于提供DHCP服务器服务。它可以在WindowsServer上设置和管理DHCP服务器,实现自动分配IP地址和其他网络配置信息给连接到网络的设备。DHCPServerService在WindowsServer中提供以下功能和特性:IP地......
  • 服务器与本地资源同步,在ubuntu自建git库,使用nginx远程http访问
    xshell在linux与windows之间传文件虽然方便,但使用git才能真正实现资源同步。为实现服务器与本地资源同步,在ubuntu服务器端自建git库。使用 git-http-backend 搭建git服务的原理都是类似的,主要是利用web服务器(apache/nginx)进行用户认证,并将用户信息传递给CGI程序 ......
  • Microsoft Message Queuing(MSMQ)是由微软开发的一种消息队列服务,用于在分布式应用程序
    MicrosoftMessageQueuing(MSMQ)是由微软开发的一种消息队列服务,用于在分布式应用程序之间进行异步通信。它提供了一种可靠的方式来在不同的应用程序之间发送消息,并确保消息的可靠传递。MSMQ基于消息队列的原理,应用程序可以将消息发送到队列中,然后其他应用程序可以从队列中接收这......
  • 宝兰德应用服务器软件与华为云GaussDB完成兼容互认证
    近日,北京宝兰德软件股份有限公司(简称:宝兰德)携手华为云完成宝兰德应用服务器软件9.5(BESApplicationServer9.5)与GaussDB数据库兼容性测试,并获得华为云授予的技术认证书。宝兰德应用服务器软件(华为云GaussDB是华为自主创新研发的分布式关系型数据库,面向金融政企打造了企业级复杂事......
  • springboot+vue基于Web的社区医院管理服务系统,附源码+数据库+论文+PPT,适合课程设计、
    1、项目介绍在Internet高速发展的今天,我们生活的各个领域都涉及到计算机的应用,其中包括社区医院管理服务系统的网络应用,在外国线上管理系统已经是很普遍的方式,不过国内的管理系统可能还处于起步阶段。社区医院管理服务系统具有社区医院信息管理功能的选择。社区医院管理服务系统......
  • 死信 与 死信交换机【Spring Cloud - 服务异步通信】
    什么是死信?当一个队列中的消息满足下列情况之一时,可以称为死信(deadletter):- 消费者使用basic.reject或basic.nack声明消费失败,并且消息的requeue参数设置为false- 消息是一个过期消息,超时无人消费- 要投递的队列消息慢了,无法投递 什么是死信交换......
  • 亚马逊服务问题之 WARNING: UNPROTECTED PRIVATE KEY FILE
       最近一直搞亚马逊服务相关的东西:    WARNING:UNPROTECTEDPRIVATEKEYFILE: chmod600**.pem  http://stackoverflow.com/questions/10090843/ec2-ubuntu-instance-unprotected-private-key-file ......
  • 构建 samba 共享文件服务器
    构建samba共享文件服务器拓扑图:推荐步骤:➢创建组名字➢在/var/share目录中建立三个子目录bdqn、benet、accp,/bdqn目录所有用户只有读取权限、/benet目录bob拥有读取权限,tom拥有读取和写入权限、/accp目录只有marry和benet组用户可以读取写入拒绝其他用户访问......