分布式系统以及CAP原理

文章首发于微信公众号:大数据每日哔哔。文章:分布式系统以及 CAP 原理

● 本文主要分为以下几个部分:<br />什么是分布式系统<br />对 CAP 的一点理解<br />一点总结<br />参考文献<br />扩展阅读

一、什么是分布式系统?

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

image.png

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

设计一个分布式系统,需要考虑很多方面。比如系统如何拆分子系统?如何规划子系统中的通信?通信是否安全?系统是否具有扩展性?子系统如何让实现可靠性?数据的一致性如何保证?等等,都不是很好解决。<br />但是对于我们一般的用户来说,开源世界已经有完善的解决方案和工具了,比如,我们在设计通信时,我们可以采用面向消息的中间件,比如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 分别代表什么?

image.png

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

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

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

需要注意的是:在分布式系统中,没有一种设计可以同时满足一致性、可用性、分区容错性 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理论的初探,可以帮助我们更好的理解分布式框架在实际中的应用场景。更深层次的内容可以参考文末的参考以及扩展链接。欢迎一起交流~

四、参考
https://waylau.com/talk-about-distributed-system/<br />https://github.com/waylau/distributed-systems-technologies-and-cases-analysis<br />https://blog.csdn.net/qq_26222859/article/details/53079655<br />https://blog.csdn.net/yanpenglei/article/details/80362561

五、扩展阅读

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

《How to beat the CAPtheorem》

(完)

image.png

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

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

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

  2. 分布式系统中CAP原理

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

  3. 分布式系统之CAP原理

    参考链接:http://blog.csdn.net/wireless_com/article/details/79153643 CAP是什么? CAP理论,被戏称为[帽子理论].CAP理论由Eric ...

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

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

  5. 分布式系统架构以及 CAP 原理

    精选30+云产品,助力企业轻松上云!>>> 点击蓝色"大数据每日哔哔"关注我 加个"星标",第一时间获取大数据架构,实战经验 ● 本文主要分为 ...

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

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

  7. redis学习之——CAP原理CAP+BASE

    Remote Dictionary Server 分布式系统 分布式系统(distributed system) 由多台计算机和通信的软件组件通过计算机网络连接(本地网络或广域网)组成.分布式系统是建 ...

  8. redis学习-分布式数据库CAP原理

    传统的ACID分别是什么 A (Atomicity) 原子性 C (Consistency) 一致性 I (Isolation) 独立性 D (Durability) 持久性 关系型数据库遵循ACID ...

  9. 分布式CAP原理:一致性、可用性、分区容错

    目录 CAP概念 分区容错(Partition tolerance) 一致性(Consistency) 可用性(Availability) 一致性和可用性之间的矛盾 使用场景 CAP概念 单机系统由于 ...

最新文章

  1. 算法时间复杂度分析基础
  2. java线程唤醒线程_Java中如何唤醒“指定的“某个线程
  3. MongoDB数据库使用总结
  4. SharePoint 2010无法使用外部asp.net web应用程序调试的解决办法
  5. 腾讯搜搜退出PC搜索领域:百度搜狗迎来双龙竞争
  6. mysql unescape解码_python mysql escape\n(简单语法错误)
  7. img加载在IE11,chrome,FF下的不同
  8. ai作文批改_有道词典上线AI作文批改功能,可自动批改雅思、四六级作文
  9. 十个免费的 Web 压力测试工具
  10. 在使用JEDate时间控件时,不能捕捉到input的change事件的解决办法
  11. 利用最大流最小割算法matlab割图
  12. Windows Server 2008 R2 官方原版下载大全
  13. 【笔记总结】高中生物——【选一 Ⅱ】第二章 微生物的培养与应用
  14. 33岁跳槽无路,走投无路之际受贵人指点,成功上岸阿里(Java岗)
  15. 卷积神经网络残差计算
  16. 分享一下玩滑板的心得体会
  17. 机器人导航答辩记录半成品-60分模板-
  18. 2017年3月17日华为内推上机考试
  19. class的操作:className和classList
  20. 分享个变形金刚地球之战挂机脚本,自动化操作

热门文章

  1. HDU 2208 唉,可爱的小朋友(DFS)
  2. centsos7修改主机名 [root@st152 ~]# cat /etc/hostname
  3. 收回软键盘的两种方式
  4. Linux用户资源限制-ulimit
  5. cocos2dx中加入unzip
  6. SSG 550 6条公网接入的解决方法
  7. Android系统匿名共享内存(Anonymous Shared Memory)C++调用接口分析
  8. 通过Nacos让Nginx拥有服务发现能力
  9. Docker存储空间不够,如何Docker修改存储位置以进行扩容
  10. TyepScript入门教程 之 async await