Update distributed-system-cap.md

几个常用的CAP框架对比
This commit is contained in:
haizhu 2020-10-13 16:30:56 +08:00 committed by GitHub
parent 1df021f274
commit 86683c38be
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,4 +1,4 @@
## 分布式系统 CAP 定理 P 代表什么含义
## 1、分布式系统 CAP 定理 P 代表什么含义
作者之前在看 CAP 定理时抱有很大的疑惑CAP 定理的定义是指在分布式系统中三者只能满足其二,也就是存在分布式 CA 系统的。作者在网络上查阅了很多关于 CAP 文章,虽然这些文章对于 P 的解释五花八门,但总结下来这些观点大多都是指 P 是不可缺少的,也就是说在分布式系统只能是 AP 或者 CP这种理论与我之前所认识的理论存在分布式 CA 系统)是冲突的,所以才有了疑惑。
@ -21,3 +21,33 @@
- P 的体现前提是得有分区情况存在
> 文章来源:[维基百科 CAP 定理](https://zh.wikipedia.org/wiki/CAP%E5%AE%9A%E7%90%86)
## 2、几个常用的CAP框架对比
框架 | 所属
---|---|---
eureka | AP
zookeeper | CP
consul | CP
### eureka
> eureka 保证了可用性,实现最终一致性。
eureka所有节点都是平等的所有数据都是相同的且eureka可以相互交叉注册。
eureka client 使用内置轮询负载均衡器去注册有一个检测间隔时间如果在一定时间内没有收到心跳才会移除该节点注册信息如果客户端发现当前eureka不可用会切换到其他的节点如果所有的eureka都跪了eureka client会使用最后一次数据作为本地缓存所以以上的每种设计都是他不具备`一致性`的特性。
注意因为eurekaAP的特性和请求间隔同步机制在服务更新时候一般会手动通过eureka的api把当前服务状态设置为`offline`并等待2个同步间隔后重新启动这样就能保证服务更新节点对整体系统的影响
### zookeeper
> 强一致性
zk在选举leader时会停止服务只有成功选举leader成功后才能提供服务选举时间较长内部使用paxos选举投票机制只有获取半数以上的投票才能成为leader否则重新投票所以部署的时候最好集群节点不小于3的奇数个但是谁能保证跪掉后节点也是基数个呢zk健康检查一般是使用tcp长链接在内部网络抖动时或者对应节点阻塞时候都会变成不可用这里还是比较危险的
#### consul
consul 注册时候只有过半的节点都写入成功才认为注册成功leader挂掉时重新选举期间整个consul不可用,保证了强一致性但牺牲了可用性
https://www.consul.io/docs/intro/vs/serf