线上弱一致性系统-htrc110 用户手册

时间:2024-06-30 06:35:47
【文件属性】:

文件名称:线上弱一致性系统-htrc110 用户手册

文件大小:1.33MB

文件格式:PDF

更新时间:2024-06-30 06:35:47

分布式

5.4 线上弱一致性系统 线上弱一致性系统以 Dynamo 和 Cassandra 为代表。这类系统有两个好处:一个是机器 宕机不需要停写服务,另一个是由于只需要保证弱一致性可以采用 P2P 的方法实现,大大地 减少了对工程师个人能力的依赖,减少了系统整体风险。Dynamo 内部使用了很多 P2P 中的 技术,这些技术都可以单独应用到其它系统的开发过程中。一个分布式系统在设计时必须想 好这个系统将来如何测试,Dynamo 和 Cassandra 这样的弱一致性系统的主要难点就在于如 何做系统测试。初步想到的测试工作如下: 1, 模块级别的测试需要做得比较细,比如 gossip 协议测试,DHT 分布测试,机器上下 线模块测试,存储引擎测试,冲突处理测试; 2, 专门为测试提供额外的信息,比如每次写操作返回写入的机器编号,写入时刻的 timestamp 等额外信息,如果对同一个 key 多次写入不同的机器,可以在客户端模拟合并过 程,将合并结果与读取到的数据进行对比; 3, 模拟一次两台机器宕机的情形,两台机器中的节点某些在 DHT 环相邻,某些不相邻; 模拟网络分区的情况; Dynamo 实现时需要使用到如下技术点:  DHT DHT 全称 Distributed Hash Table,使用一致性 Hash (consistent hashing)思想:给每台机器 赋予固定数量的 token,这些 token 构成一个分布式 Hash 环。执行数据存放操作时,先计算 key 的 hash 值,然后存放到第一个包含大于或者等于该 Hash 值的 token 的节点。这种方法 的好处就在于机器上下线时只会影响到在 DHT 中相邻的 token。 外部的数据可能首先传输至集群中的任意一台机器,为了找到数据所属机器,要求每台 机器维护一定的集群机器信息用于定位。最直观的想法当然是每台机器分别维护它的前一台 及后一台机器的信息,机器的编号可以为机器 IP 的 Hash 值,定位机器最坏情况下复杂度为 O(N)。可以采用平衡化思想来优化(如同平衡二叉树优化数组/链表),使每一台机器存储 O(logN)的集群机器信息,定位机器最坏情况下复杂度为 O(logN)。在 Dynamo 系统中,每台 机器尽量维护整个集群的信息,客户端也缓存整个集群的信息,从而大多数请求都能直接发 送到目标机器。 Dynamo 中通过 gossip 协议发现机器上下线信息从而更新每台机器缓存的 DHT 环。集群 中某台机器上下线时,部分机器先发现,部分机器后发现,从而集群中每台机器缓存的 DHT 环处于不一致的状态。比如系统中初始有四台机器包含的 token 分别为 A, C, D, E,现在上线 一台机器 token 为 B,假设 A 发现了 B 上线但是 C, D, E 没有发现,这时原本属于 B 的数据可 能写入 B, C, D(假设存储三份),也可能写入 C,D,E,不过没有关系,以后 E 将发现 B,或者 说是 B 发现 E,从而触发操作将错误写入到 E 的数据同步到 B,由 B 来进行数据合并,合并 的过程中可能需要处理冲突。  Gossip 协议 Gossip 协议用于 P2P 系统中自治的节点协调对整个集群的认识,比如集群的节点状态, 负载情况。我们先看看两个节点 A 和 B 是如何交换对世界的认识的。  A 告诉 B 其管理的所有节点的版本(包括 Down 状态和 Up 状态的节点)  B 告诉 A 哪些版本他比较旧了,哪些版本他有最新的,然后把最新的那些节点发 给 A(处于 Down 状态的节点由于版本没有发生更新所以不会被关注)


网友评论