精选30+云产品,助力企业轻松上云!>>>

点击蓝色“大数据每日哔哔”关注我

加个“星标”,第一时间获取大数据架构,实战经验



● 本文主要分为以下几个部分:

什么是分布式系统

对 CAP 的一点理解

一点总结

参考文献

扩展阅读

一、什么是分布式系统?

关于分布式系统的定义,《分布式系统原理和范型》一书中是这样定义分布式系统的:“分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像是单个系统”。

(图片选自《分布式系统常用技术及案例分析》)

设计一个分布式系统,需要考虑很多方面。比如系统如何拆分子系统?如何规划子系统中的通信?通信是否安全?系统是否具有扩展性?子系统如何让实现可靠性?数据的一致性如何保证?等等,都不是很好解决。

但是对于我们一般的用户来说,开源世界已经有完善的解决方案和工具了,比如,我们在设计通信时,我们可以采用面向消息的中间件,比如Apache ActiveMQ、RabbitMQ、Apache RocketMQ、Apache Kafka等,也有类似与 Google Protocol Buffer、Thrift等 RPC框架。在设计分布式计算时,我们分布式计算可以采用 MapReduce、Apache Hadoop、Apache Spark 、Apache Flink 等。在大数据分布式存储方面,我们可以选择 HDFS、Apache HBase、Apache Cassandra、Memcached、Redis、MongoDB等。在分布式监控方面,常用的技术包括Nagios、Zabbix、Consul、ZooKeeper等。

二、对 CAP 的一点理解

2000 年 7 月,加州大学伯克利分校的 Eric Brewer 教授在 ACM PODC 会议上提出 CAP 猜想。2 年后,麻省理工学院的 Seth Gilbert 和 Nancy Lynch 从理论上证明了 CAP。之后,CAP理论正式成为分布式计算领域的公认定理。

首先我们先来看看 CAP 分别代表什么?

一致性:更新操作成功并返回客户端完成后,分布式的所有节点在同一时间的数据完全一致。(注意:这里说的是强一致性。)

可用性:  读和写操作都能成功。无论何时,都可以在有效时间内返回用户的请求。

分区容错性:再出现网络故障导致分布式节点间不能通信时,系统能否继续服务

需要注意的是:在分布式系统中,没有一种设计可以同时满足一致性、可用性、分区容错性  3 个特性。CAP 三者不是对等的,其中 P 是基础,CA 之前需要权衡。

如果说Spanner真有什么特别之处,那就是谷歌的广域网。Google通过建立私有网络以及强大的网络工程能力来保证P,在多年运营改进的基础上,在生产环境中可以最大程度的减少分区发生,从而实现高可用性。

CAP之父在《Spanner,真时,CAP理论》一文中写到

在全球广域地理分布环境下(全球规模的分布式系统),网络分区是一个自然的事实,甚至有人认为是必然的。(用来解释为什么 P 是基础。)

上面提到的一致性可以分为几类:强一致性、单调一致性、弱一致性、会话一致性、最终一致性。

强一致性 任何时刻,任何用户都能读取到最近一次成功更新的数据。

单调一致性

任何时刻,任何用户一旦读到某个数据在某次更新后的值,那么就不会再读到比这个值更旧的值。也就是说,可获取的数据顺序必是单调递增的。

弱一致性 用户无法在确定时间内读到最新更新的值。
会话一致性 任何用户在某次会话中,一旦读到某个数据在某次更新后的值,那么在本次会话中就不会再读到比这值更旧的值,会话一致性是在单调一致性的基础上进一步放松约束,只保证单个用户单个会话内的单调性,在不同用户或同一用户不同会话间则没有保障。
最终一致性 用户只能读到某次更新后的值,但系统保证数据将最终达到完全一致的状态,只是所需时间不能保障。

三、总结

文章开头部分也提到了,现在的开源世界已有完善的分布式系统解决方案了,我们没有必要重复造轮子,难度也可想而知。我们可以在使用的过程中倒推这个系统满足了 CAP 的哪两个特性。比如:Zookpper 是 CP,P 是基础的,所有分布系统需要优先考虑这个,Zookeeper 从顺序一致性、原子性、单一镜像、持久性、实时性保证了数据的一致性。但是它在某些情况(重启或网络节点故障)下会重新选举 Leader,此时整个集群是不可用的。问题在于,选举leader的时间太长,30 ~ 120s, 且选举期间整个zk集群都是不可用的,这就导致在选举期间注册服务瘫痪,虽然服务能够最终恢复,但是漫长的选举时间导致的注册长期不可用是不能容忍的。所以说,ZooKeeper不能保证服务可用性。所以 Zookepper 保证了 CP,而不是 AP。

本文只是简单的介绍了一下分布式系统概念以及CAP理论的初探,可以帮助我们更好的理解分布式框架在实际中的应用场景。更深层次的内容可以参考文末的参考以及扩展链接。欢迎一起交流~

四、参考

1.https://waylau.com/talk-about-distributed-system/

2.https://github.com/waylau/distributed-systems-technologies-and-cases-analysis

3.https://blog.csdn.net/qq_26222859/article/details/53079655

4.https://blog.csdn.net/yanpenglei/article/details/80362561

五、扩展阅读

1.https://dbaplus.cn/news-159-1917-1.html

2.《How to beat the CAPtheorem》

(完)

本文分享自微信公众号 - 大数据每日哔哔(bb-bigdata)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

分布式系统架构以及 CAP 原理相关推荐

  1. 分布式系统:FLP Impossibility/CAP原理

    分布式系统: 分布式系统的概念: 分布式系统是一组自治计算机系统的集合,这些系统在物理上是分开的,但通过配备分布式系统软件的集中式计算机网络连接起来.自治计算机将通过共享资源和文件并执行分配给它们的任 ...

  2. 高可用架构:CAP原理

    CAP定义 在一个分布式系统(指互相连接并共享数据的节点的集合)中,当涉及读写操作时,只能保证一致性(Consistence).可用性(Availability).分区容错性(Partition To ...

  3. 分布式系统架构的远程调用(RESTFul、RPC)和CAP原理

    文章目录 分布式系统的远程调用 RestFul接口 RPC协议 RestFul和RPC的区别 分布式系统的CAP原理 分布式系统的远程调用 在微服务架构中,通常存在多个服务之间的远程调用的需求.远程调 ...

  4. Eureka工作原理(Eureka简介Eureka ServerEureka Client自我保护机制分布式系统中的CAP理论Eureka 工作流程)

    一.Eureka简介 Eureka Server(注册中心,相当于zookeeper) Eureka Client: Provider Consumer 多个Eureka就叫集群.集群之间会定时通过r ...

  5. 分布式系统架构常识:CAP理论

    转载自 分布式系统架构常识:CAP理论 什么是CAP理论? 2000年7月,加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提出CAP猜想.2年后麻省理工学院的Seth Gilb ...

  6. 分布式系统以及CAP原理

    分布式系统以及CAP原理 文章首发于微信公众号:大数据每日哔哔.文章:分布式系统以及 CAP 原理 ● 本文主要分为以下几个部分:<br />什么是分布式系统<br />对 C ...

  7. 分布式系统中CAP原理

    分布式系统CAP原理 分布式系统发开虽然有点很多但是并不是完美的,CAP原理就是其中的体现之一. CAP原理:指的是在一个分布式系统中,Consistency(一致性).Availability(可用 ...

  8. 分布式系统的CAP原理及其应用

    什么是分布式系统的CAP原理 在分布式系统中,一致性(C)指每一次读都得到最近的写数据,或者一个异常:可用性(A)指每一个请求都得到一个非异常的响应,而不保证取得最近的写数据:分区容错性(P)是指结点 ...

  9. 分布式系统架构系列讲解一(分布式一致性 1):CAP理论

    分布式系统架构系列讲解 - 总目录 集中式应用进行服务化拆分后,必然会出现一个问题:如何保证各个节点(Node)之间的数据一致性? 比如以下场景:用户首先发起一次更新操作,映射到节点A:然后,用户又做 ...

最新文章

  1. windows下开发准备
  2. 【Java文件操作(八)】将控制台输出重定向到txt文件
  3. Matlab与高等数学
  4. 【C++深度剖析教程25】继承中的构造与析构
  5. 算法优化策略之“中途相遇”算法思想
  6. tomcat8+linux+IDEA配置远程代码调试
  7. lintcode:Add Binary 二进制求和
  8. 三星获得加州自动驾驶测试许可,与Google苹果正面刚
  9. 2020_0527_近期思考
  10. 如何编写python代码
  11. 500 G JAVA视频网盘分享(JEECG开源社区)
  12. 手机进程设置多少个最好_手机打开,开发者选项中的这4个设置,性能瞬间提升一倍,不卡顿...
  13. 浅谈go语言交叉编译
  14. 先码后看!五大学科竞赛哪个含金量最高?
  15. 计算机文档排版的心得体会,排版心得体会-20210523074838.docx-原创力文档
  16. 移动开发者的必知音视频基础知识
  17. 剖析支付宝线下支付技术
  18. Pywinauto基础03--控件操作
  19. 2020年(2021届计算机保研)(北航、国防科大、信工所、上科大、武大、哈深、哈工本部)
  20. 学习笔记之三人表决器FPGA

热门文章

  1. 关于WinForm控件在asp.net中应用的问题。
  2. 使用 Scrum开发太阳能汽车
  3. 关于aspx.designer.cs
  4. Windows下Redmine插件安装
  5. XCode4.2 SVN设置
  6. Jquery 获取元素内容
  7. Adding Keyword And Description meta tags to each page by inheritence
  8. 2019年7月全国程序员工资统计
  9. Docker安装Mysql(docker-compose.yml)
  10. 如何在六个月或更短的时间内成为DevOps工程师(三):版本控制