一文读懂分布式系统CAP定理
浏览:849次 出处信息
总有一些看不见的手在控制着软件的世界,就像CAP定理,第一次听到这个词竟然是在面试场合,真的是汗颜,回来之后数次尝试去理解这个定理。英文原文理解不透,中文介绍更是百花齐放百家争鸣,总是感觉一知半解。痛定思痛,决定好好研究一番,并用更加通俗的言语进行解释。
名词
CAP定理,又称布鲁尔定理,它指出对于一个分布式计算系统来说,不可能同时满足以下三点:一致性(Consistency):所有客户端同时查询或者更新为相同的最新数据可用性(Availability):不管是否成功,确保每一个请求合理的时间内接收到响应分区容错(Partition tolerance): 当系统因为网络问题被分割为多个区域时,系统仍然能提供正常服务的能力。
原理
分布式系统:应用部署在多个计算节点,Node之间通过网络进行交互。分区:网络的不可靠性,Node之间的隔离是不可避免的存在。当网络不可达时,系统因为网络被分离为多个可联通区域,所以分布式系统的分区是不可避免的。
优先满足CA
基于主键的mysql分库分表实现:数据库分为N个实例,每个实例M个表,主键 % N 余数为实例的index主键 % M 余数为表的index每个数据只存在于一个实例的一个表中,因此满足一致性。当因为网络原因mysql集群导致分区时,客户端访问可联通区域的数据时,可用性和分区容错性得到保证;但是客户端访问数据不在可连接的分区,系统返回数据库访问错误,满足可用性,不满足分区容错。因此该访问满足CA,但是不容忍任何分区
优先满足CP
使用主从结构的mysql集群,做读写分离,写master,读slave;为保证数据一致性,master更新后,必须slave完全复制成功,才作为更新成功返回。因此满足数据一致性(C)的要求。系统分区导致,部分slave不能交互,数据不能从master向slave复制,导致写不可用,但是读不影响的结果。因此满足C(一致性)P(分区容错读可用),不满足A(写功能不可用)
优先满足AP
仍然使用主从结构的mysql集群,做读写分离,写master,读slave;为保证可用性,数据master更新成功,既认为数据更新成功,当部分slave不用的情况下,仍然可保证读写的可用性,以及分区容错。但是数据存在不一致的情形,部分客户端与不能和master进行数据复制的slave位于同一个分区,可能导致读取历史数据。因此满足A(可用性)P(分区容错读写均可用),不满足C(读不复制slave的历史数据)
BASE思想
越来越多大数据量,高并发系统在CAP定理的制约下采用优先满足AP,保证可用性,允许临时中间态,数据最终保证一致。即为BASE思想:BA:Basically Available基本可用S:Soft state软状态 状态可以有一段时间数据处于中间态,数据不一致。E:Eventually consistent最终一致,最终数据是一致。
建议继续学习:
- 分布式缓存系统 Memcached 入门 (阅读:14700)
- Zookeeper工作原理 (阅读:10352)
- GFS, HDFS, Blob File System架构对比 (阅读:9356)
- Zookeeper研究和应用 (阅读:8500)
- 分布式日志系统scribe使用手记 (阅读:8021)
- 一致性哈希算法及其在分布式系统中的应用 (阅读:7911)
- 分布式哈希和一致性哈希 (阅读:7634)
- HBase技术介绍 (阅读:6736)
- 分布式系统的事务处理 (阅读:5967)
- Memcache分布式部署方案 (阅读:5429)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:协程并发模型及使用感受
后一篇:ECS 中的消息发布订阅机制 >>
文章信息
- 作者:sunhaojie 来源: 孙豪杰的博客
- 标签: CAP 分布式
- 发布时间:2020-02-01 15:07:16
建议继续学习
近3天十大热文
- [68] Go Reflect 性能
- [68] 如何拿下简短的域名
- [67] Oracle MTS模式下 进程地址与会话信
- [62] IOS安全–浅谈关于IOS加固的几种方法
- [61] 图书馆的世界纪录
- [60] 【社会化设计】自我(self)部分――欢迎区
- [58] android 开发入门
- [56] 视觉调整-设计师 vs. 逻辑
- [49] 给自己的字体课(一)——英文字体基础
- [48] 读书笔记-壹百度:百度十年千倍的29条法则