分布式和CAP讨论

CAP定理

简介

一个分布式系统,不可能同时满足CAP

image-20220523170644064

 

数据模型

image-20220528150625474

优缺点
算法

etcd与raft协议

逐步补充

redis与gossip协议

gossip

Gossip 协议又称 epidemic 协议(epidemic protocol),是基于流行病传播方式的节点或者进程之间信息交换的协议,在P2P网络和分布式系统中应用广泛,它的方法论也特别简单:

redis集群实现

集群示意图

redis_cluster

关键组件
键分布模型
键哈希标签
集群节点属性

每个节点都有一个唯一的名字。节点名字是一个十六进制表示的160 bit 随机数。

节点会把它的ID保存在配置文件里,以后永远使用这个ID,只要这个节点配置文件没有被系统管理员删除掉。

每个节点都有其他相关信息是所有节点都知道的:

使用 CLUSTER NODES 命令可以获得以上的一些信息

集群拓扑结构

Redis 集群是一个网状结构,每个节点都通过 TCP 连接跟其他每个节点连接

在一个有 N 个节点的集群中,每个节点都有 N-1 个流出的 TCP 连接,和 N-1 个流入的连接。 这些 TCP 连接会永久保持,并不是按需创建的。

集群处理具体流程: Redis 集群规范
gossip协议消息类型(cluster.h)

 

扩展到业务场景

CAP一般讨论分布式存储一致性问题。扩展到经典业务场景,比如分布式系统中,购买后发道具:购买成功后发放5个道具,用户查询领取情况,保证最终发放成功。

分布式系统中,调用可能出现的3种状态

image-20220527145837195

解决方案

对于这个异步场景来说,应优先保证可用性分区容错性,确保数据最终一致性即可

解决

image-20220527145944481

 

参考

一万字详解 Redis Cluster Gossip 协议

Redis 集群规范

Redis 集群教程