CA:如果不要求 P (不允许分区),则 C (强一致性)和 A (可用性)是可以保证的。但放弃 P 的同时也就意味着放弃了系统的扩展性,也就是分布式节点受限,没办法部署子节点,这是违背分布式系统设计的初衷的。因此在这里只讨论实现了 CP 或者 AP 的架构/系统。
Paxos 协议我从工作的时候就了解,基本上过目就忘非常难理解。想要手撸一个 Paxos 协议太难了。
Raft 协议初认识的时候简单,源码比 Paxos 也简单点,但是实现起来有点难。
Gossip 协议算法简单,实现起来也容易。
理解起来简单,实现起来也简单。
个人感觉 Euraka 的通信协议最简单,其次是 Gossip ,这里说的是手撸的难度。
1
keakon 219 天前
你不都发现盲点了么,没人搞 CA
|
3
coyove 219 天前
因为现在全球化部署,业务对解决 P 问题更感兴趣
|
4
lxdlam 219 天前 1
Zookeeper 不是 Paxos ,而是自己发明的协议 ZAB ,跟 Paxos 有一定差距;实现了 Paxos 的系统有很多,比如 Google 的 Chubby 和 Scylla DB 。
同样,根据 DDIA 的说法,现代 CAP 其实逐渐式微,因为现代系统设计里面这三个每一个话题都会有很多需要考虑的问题,不再只是单纯的 3 选 2 了。 |
6
heqingpan 219 天前 via Android 1
亲身实践过,如果不依赖三方库从 0 开始写,一般 AP 会比 CP 简单些。
不过 CP raft 一般都有库(与业务无关的基础部分),而 AP 没有( AP 一般和业务相关较大,没有通用库)。 CP 基于库做二次开发与 AP 从 0 开发相比,工作量会差不多。(和具体业务有关) 我之前在写 r-nacos (用 rust 重新实现 nacos )时,有分别用 CP(基于 raft 库)实现配置中心,用 AP (从 0 开发)实现注册中心。 它们两块整体工作量上感觉差不多。 附上去年在本站发的相关帖子: https://v2ex.com/t/974680 |
7
fkdtz 219 天前
Redis 不是 AP 的么
|
8
wkong 219 天前 1
难度还好,就是脱层皮。
|