分布式系统设计(1)

 

1 设计分布式系统须要考虑的异常

1.1 节点宕机
1.2 网络异常

消息丢失、消息乱序(能够经过增长序列号解决)以及数据错误算法

1.3 分布式系统三态

在单机,只要不宕机,一个函数执行要么成功、要么失败,可是分布式系统共下存在成功、失败和超时。下面解释一下超时的不肯定性:数据库

某个节点 A 向另外一个节点 B 发送一个消息,若是请求 RPC 的节点 A 在给定的时间内没有收到执行 RPC 的节点 B 返回的消息,则认为该操做“超时”。对于超时的请求,咱们没法获知该请求是否被节点 B 成功执行了。这是由于,若是超时是因为节点 A 发向节点 B 的请求消息丢失形成的,则该操做确定没有被节点 B 成功执行;但若是节点 A 成功的向节点 B 发送了请求消息,且节点 B 也成功的执行了该请求,但节点 B 发向节点 A 的结果消息被网络丢失了或者节点 B 在执行完该操做后马上宕机没有可以发出结果消息,从而形成从节点 A 看来请求超时。因此一旦发生超时,请求方是没法获知 RPC 的执行结果的。服务器

超时解决方法:

A 当出现“超时”时,能够经过发起读取数据的操做以验证 RPC 是否成功 (例如银行系统的作法)。网络

B 设计分布式协议时将执行步骤设计为可重试的,即具备所谓的“幂等性”。例如覆盖写就是一种常见的幂等性操做,由于重复的覆盖写最终的结果都相等。若是使用可重试的设计,当出现“失败”和“超时”时,一概重试操做直到“成功”。这样,即便超时的操做实际上已经成功了,重试操做也不会对正确性形成影响,从而简化了设计负载均衡

1.4 存储数据丢失

通常是硬盘机械故障。分布式

2 数据分布方式

2.1 哈希方式

哈希方式是最多见的数据分布方式,其方法是按照数据的某一特征计算哈希值,并将哈希值与机器中的机器创建映射关系,从而将不一样哈希值的数据分布到不一样的机器上。函数

优势:设计

哈希方式须要记录的元信息也很是简单,任什么时候候,任何节点只须要知道哈希函数的计算方式及模的服务器总数就能够计算出处理具体数据的机器是哪台。blog

缺点:ip

A 突出表现为可扩展性不高,一旦集群规模须要扩展,则几乎全部的数据须要被迁移并从新分布

B 一旦某数据特征值的数据严重不均,容易出现“数据倾斜”(data skew)问题,只能从新选择须要哈希的数据特征,例如选择用户 id 与另外一个数据维度的组合做为哈希函数的输入。

2.2 按数据范围分布

将数据按特征值的值域范围划分为不一样的区间,使得集群中每台(组)服务器处理不一样区间的数据。

优势:

使用范围分布数据的方式的最大优势就是能够灵活的根据数据量的具体状况拆分原有数据区间,拆分后的数据区间能够迁移到其余机器,一旦须要集群完成负载均衡时,与哈希方式相比很是灵活。另外,当集群须要扩容时,能够随意添加机器,而不限为倍增的方式,只需将原机器上的部分数据分区迁移到新加入的机器上就能够完成集群扩容。

缺点:

按数据范围分布数据须要记录全部的数据分布状况。通常的,每每须要使用专门的服务器在内存中维护数据分布信息,称这种数据的分布信息为一种元信息。

2.3 按数据量分布

优势:

因为与具体的数据内容无关,按数据量分布数据的方式通常没有数据倾斜的问题,数据老是被均匀切分并分布到集群中。当集群须要从新负载均衡时,只需经过迁移数据块便可完成。集群扩容也没有太大的限制,只需将部分数据库迁移到新加入的机器上便可以完成扩容。

缺点:

须要管理较为复杂的元信息,与按范围分布数据的方式相似,当集群规模较大时,元信息

的数据量也变得很大,高效的管理元信息成为新的课题。

2.4  一致性哈希

一致性哈希(consistent hashing)是另外一个种在工程中使用较为普遍的数据分布方式。一致性哈希最初在 P2P 网络中做为分布式哈希表(DHT)的经常使用数据分布算法。一致性哈希的基本方式是使用一个哈希函数计算数据或数据特征的哈希值,令该哈希函数的输出值域为一个封闭的环,即哈希函数输出的最大值是最小值的前序。将节点随机分布到这个环上,每一个节点负责处理从本身开始顺时针至下一个节点的所有哈希值域上的数据。

例 2.1.3:某一致性哈希函数的值域为[0, 10),系统有三个节点 A、B、C,这三个节点处于的一致性哈希的位置分别为 1,4,9,则节点 A 负责的值域范围为[1,4),节点 B 负责的范围为[4, 9),节点 C 负责的范围为[9, 10)和[0, 1)。若某数据的哈希值为 3,则该数据应由节点 A 负责处理。 图  2-4给出了这个例子的示意图。

wps_clip_image-18051

哈希分布数据的方式在集群扩容时很是复杂,每每须要倍增节点个数,与此相比,一致性哈希的优势在于能够任意动态添加、删除节点,每次添加、删除一个节点仅影响一致性哈希环上相邻的节点。

例 2.1.4:假设须要在例 2.1.3 中增长一个新节点 D,为 D 分配的哈希位置为 3,则首先将节点A 中[3, 4)的数据从节点 A 中拷贝到节点 D,而后加入节点 D 便可

优势:

使用一致性哈希的方式须要将节点在一致性哈希环上的位置做为元信息加以管理,这点比直接使用哈希分布数据的方式要复杂。然而,节点的位置信息只于集群中的机器规模相关,其元信息的量一般比按数据范围分布数据和按数据量分布数据的元信息量要小不少。

缺点:

随机分布节点的方式使得很难均匀的分布哈希值域,尤为在动态增长节点后,即便原先的分布均匀也很难保证继续均匀,由此带来的另外一个较为严重的缺点是,当一个节点异常时,该节点的压力所有转移到相邻的一个节点,当加入一个新节点时只能为一个相邻节点分摊压力。

2.5  数据分布方式的选择

在实际工程实践中,能够根据需求及实施复杂度合理选择数据分布方式。另外,上述数据分布方式是若是能够灵活组合使用,每每能够兼备各类方式的优势,收到较好的综合效果。

2.6  工程投影

wps_clip_image-3230

相关文章
相关标签/搜索