分布式理论 PACELC 了解么?

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介: 分布式理论 PACELC 了解么?

PACELC 基于 CAP 理论演进而来。

CAP 理论是一个分布式系统中老生常谈的理论了:

  • C(Consistency):一致性,所有节点在同一时间的数据完全一致。
  • A(Availability):可用性,服务一直可用。
  • P(Partition tolerance):分区容错性,遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务

系统设计中,这三点只能取其二,一般的分布式系统要求必须有分区容错性。剩下的只能从 C 或者 A 中取舍。

但是这个理论并不能很好地应用于实际,首先, A 中是有一定争议的,很长时间才返回,虽然可用,但是业务上可能不能接受。并且,系统大部分时间下,分区都是平稳运行的,并不会出错,在这种情况下,系统设计要均衡的其实是延迟与数据一致性的问题,为了保证数据一致性,写入与读取的延迟就会增高。这就引出了 PACELC 理论。


微信图片_20220625114657.jpg


在出现分区错误的情况下,取前半部分 PAC,理论和 CAP 内容一致。没有出现分区错误的情况下(PACELC 中的 E 代表 Else),取 LC,也就是 Latency(延迟)与 Consistency(一致性)。

现在,其实很多存储,都已经实现了不同的 PACELC 的兼顾策略,并且交由用户配置去灵活根据不同业务场景使用不同的策略


DynamoDB,Riak,Cassandra 的 NWR 模型


例如 DynamoDB 和 Riak 还有 Cassandra 都是 Dynamo 理论论文的基于一致性哈希写多份实现最终一致性的存储,在默认情况下,是 P+A 以及 E+L 的系统,但是可以根据配置修改,主要基于NWR模型与同步和异步备份。N 代表 N 个备份,W 代表要写入至少 W 份才认为成功,R 表示至少读取 R 个备份。配置的时候要求 W+R > N。 因为 W+R > N, 所以 R > N-W。这个是什么意思呢?就是读取的份数一定要比总备份数减去确保写成功的倍数的差值要大。 也就是说,每次读取,都至少读取到一个最新的版本。从而不会读到一份旧数据。当我们需要高可写的环境的时候(例如,amazon 的购物车的添加请求应该是永远不被拒绝的)我们可以配置W = 1 如果N=3 那么R = 3。 这个时候只要写任何节点成功就认为成功,但是读的时候必须从所有的节点都读出数据。如果我们要求读的高效率,我们可以配置 W=N R=1。这个时候任何一个节点读成功就认为成功,但是写的时候必须写所有三个节点成功才认为成功。 大家注意,一个操作的耗时是几个并行操作中最慢一个的耗时。比如R=3的时候,实际上是向三个节点同时发了读请求,要三个节点都返回结果才能认为成功。假设某个节点的响应很慢,它就会严重拖累一个读操作的响应速度。


MongoDB


MongoDB 和上面的 Dynamo 类似,MongoDB关于一致性、可用性的权衡,取决于三者:

  • write-concern: 表示当写请求在value个MongoDB实例处理之后才向客户端返回
  • read-concern: 设定是否必须从 primary 读取最新的数据还是可以从 secondary 读取最终一致性的数据。
  • read-preference: 对于replica set,是返回当前节点的最新数据,还是返回写入节点最多的数据,还是根据一些函数计算出的数据。


MySQL 同步


MySQL主从复制包括异步模式、半同步模式、全同步复制

默认情况下是异步模式,MySQL 一主多从部署读写分离的情况下,实现的为最终一致性,如果考虑一定延迟可以接受,一般可以通过 show slave status来查看主从延迟从而决定数据是否可以从 slave 读取。 MyCat 等中间件就是用了这种机制。可以通过对于这个时延的容忍性,控制 L 与 C 的取舍 以及 A 与 C 的取舍。

全同步复制:指当主库执行完一个事务,所有的从库都执行了该事务才返回给客户端。这样保证了强一致性,但是响应时间变长了。

半同步复制:主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到 relay log 中才返回给客户端。这样虽然还是有延迟,但是延迟小了很多并且数据相比于异步复制更加不容易丢失。


一致性协议


一致性协议一般包括:

  • 2PC,两阶段提交
  • 3PC,三阶段提交
  • Paxos,Paxos 是很细致的一致性协议,但是一般实现过于复杂仅仅是理论
  • Raft,Raft 是能够实现分布式系统强一致性的算法,TiDB 的一致性协议就是基于 Raft
  • ZAB,Zookeeper 的一致性协议,基于 Paxos 简化
  • NWR,上面提到的 dynamo 理论基础的协议,将 PACELC 均衡交给用户
相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
搜索推荐 NoSQL 关系型数据库
分布式CAP理论和BASE理论
对于分布式系统的项目,使用中没有强制要求一定是CAP中要达到某几种,具体根据各自业务场景所需来制定相应的策略而选择适合的产品服务等。例如:支付订单场景中,由于分布式本身就在数据一致性上面很难保证,从A服务到B服务的订单数据有可能由于服务宕机或其他原因而造成数据不一致性。因此此类场景会酌情考虑:AP,不强制保证数据一致性,但保证数据最终一致性。
156 0
分布式CAP理论和BASE理论
|
数据库 数据库管理
分布式学习四:ACID理论
分布式学习四:ACID理论
133 0
分布式学习三:BASE理论
分布式学习三:BASE理论
85 0
|
负载均衡
分布式理论学习-分布式高可用
当系统出现大量用户请求时,我们主要从负载均衡、流量控制、故障隔离三个角度去思考如何提高系统高可用,以避免处理能力的上线,导致系统崩溃。
分布式理论学习-分布式技术原理
知其然知其所以然,学习分布式的过程中,对于理论知识是必不可少的,主要是分布式互斥、分布式选举、分布式共识、分布式事务、分布式锁。
|
分布式数据库 数据库
分布式理论学习-分布式数据库
什么是分布式数据库? 他在为系统提高可用性优点的同时,也带来了哪些缺点?
|
消息中间件
分布式理论学习-分布式通信
分布式通信主要内容 远程调用:一个服务调用另外一个服务 发布订阅:生产者发布消息到消息中心,消费者从消息中心获取消息 消息队列:消息队列的思想就是基于队列实现的,按照FIFO顺序消费信息
|
存储 缓存 索引
分布式理论学习-分布式存储
在学习分布式存储之前,那我们需要对CAP理论、原则、数据分布方法有一定的认识。
分布式理论学习-分布式体系结构
通过学习《分布式技术原理与算法解析》课程,对分布式理论有一个整体的认识,利用思维导图将内容整理出来。
|
消息中间件 存储 SQL
有趣!用太极拳讲分布式理论,真舒服!
有趣!用太极拳讲分布式理论,真舒服!
115 0
有趣!用太极拳讲分布式理论,真舒服!