分布式系统的异常、⼀致性与衡量指标
1.1 模型
节点
在具体的⼯程项⽬中,⼀个节点往往是⼀个操作系统上的进程。在本⽂的模型中,认为节点是⼀个完整的、不可分的整体,如果某个程序进程实际上由若⼲相对独⽴部分构成,则在模型中可以将⼀个进程划分为多个节点。
异常
1. 机器宕机:机器宕机是最常见的异常之⼀。在⼤型集中每⽇宕机发⽣的概率为千分之⼀左右,在实践中,⼀台宕机的机器恢复的时间通常认为是24 ⼩
时,⼀般需要⼈⼯介⼊重启机器。
2. ⽹络异常:消息丢失,两⽚节点之间彼此完全⽆法通信,即出现了“⽹络分化”;消息乱序,有⼀定的概率不是按照发送时的顺序依次到达⽬的节点,考虑
使⽤序列号等机制处理⽹络消息的乱序问题,使得⽆效的、过期的⽹络消息不影响系统的正确性;数据错误;不可靠的TCP,TCP 协议为应⽤层提供了可靠的、⾯向连接的传输服务,但在分布式系统的协议设计中不能认为所有⽹络通信都基于TCP 协议则通信就是可靠的。TCP协议只能保证同⼀个TCP 链接内的⽹络消息不乱序,TCP 链接之间的⽹络消息顺序则⽆法保证。
3. 分布式三态:如果某个节点向另⼀个节点发起RPC(Remote procedure call)调⽤,即某个节点A 向另⼀个节点B 发送⼀个消息,节点B 根据收到的消息内
容完成某些操作,并将操作的结果通过另⼀个消息返回给节点A,那么这个RPC 执⾏的结果有三种状态:“成功”、“失败”、“超时(未知)”,称之为分布式系统的三态。
4. 存储数据丢失:对于有状态节点来说,数据丢失意味着状态丢失,通常只能从其他节点读取、恢复存储的状态。
5. 异常处理原则:被⼤量⼯程实践所检验过的异常处理黄⾦原则是:任何在设计阶段考虑到的异常情况⼀定会在系统实际运⾏中发⽣,但在系统实际运⾏遇
到的异常却很有可能在设计时未能考虑,所以,除⾮需求指标允许,在系统设计时不能放过任何异常情况。
1.2 副本
副本(replica/copy)指在分布式系统中为数据或服务提供的冗余。对于数据副本指在不同的节点上持久化同⼀份数据,当出现某⼀个节点的存储的数据丢失
服务副本,指数个节点提供某种相同的服务,这种服数据副本是分布式系统解决数据丢失异常的唯⼀⼿段。另⼀类副本是服务副本,指数个节点提供某种相同的服务,这种服时,可以从副本上读到数据。数据副本是分布式系统解决数据丢失异常的唯⼀⼿段。
务⼀般并不依赖于节点的本地存储,其所需数据⼀般来⾃其他节点。
副本协议是贯穿整个分布式系统的理论核⼼。
副本⼀致性
分布式系统通过副本控制协议,使得从系统外部读取系统内部各个副本的数据在⼀定的约束条件下相同,称之为副本⼀致性(consistency)。副本⼀致性是针对分布式系统⽽⾔的,不是针对某⼀个副本⽽⾔。
1. 强⼀致性(strong consistency):任何时刻任何⽤户或节点都可以读到最近⼀次成功更新的副本数据。强⼀致性是程度最⾼的⼀致性要求,也是实践中最难
以实现的⼀致性。
2. 单调⼀致性(monotonic consistency):任何时刻,任何⽤户⼀旦读到某个数据在某次更新后的值,这个⽤户不会再读到⽐这个值更旧的值。单调⼀致性是
弱于强⼀致性却⾮常实⽤的⼀种⼀致性级别。因为通常来说,⽤户只关⼼从⼰⽅视⾓观察到的⼀致性,⽽不会关注其他⽤户的⼀致性情况。
3. 会话⼀致性(session consistency):任何⽤户在某⼀次会话内⼀旦读到某个数据在某次更新后的值,这个⽤户在这次会话过程中不会再读到⽐这个值更旧
的值。会话⼀致性通过引⼊会话的概念,在单调⼀致性的基础上进⼀步放松约束,会话⼀致性只保证单个⽤户单次会话内数据的单调修改,对于不同⽤户间的⼀致性和同⼀⽤户不同会话间的⼀致性没有保障。实践中有许多机制正好对应会话的概念,例如php 中的session 概念。
4. 最终⼀致性(eventual consistency):最终⼀致性要求⼀旦更新成功,各个副本上的数据最终将达到完全⼀致的状态,但达到完全⼀致状态所需要的时间
对于最终⼀致性系统⽽⾔,⼀个⽤户只要始终读取某⼀个副本的数据,则可以实现类似单调⼀致性的效果,但⼀旦⽤户更换读取的不能保障。对于最终⼀致性系统⽽⾔,⼀个
副本,则⽆法保障任何⼀致性。
5. 弱⼀致性(week consistency):⼀旦某个更新成功,⽤户⽆法在⼀个确定时间内读到这次更新的值,且即使在某个副本上读到了新的值,也不能保证在其
他副本上可以读到新的值。弱⼀致性系统⼀般很难在实际中使⽤,使⽤弱⼀致性系统需要应⽤⽅做更多的⼯作从⽽使得系统可⽤。
1.3 衡量分布式系统的指标
session数据错误是什么意思1. 性能:系统的吞吐能⼒,指系统在某⼀时间可以处理的数据总量,通常可以⽤系统每秒处理的总的数据量来衡量;系统的响应延迟,指系统完成某⼀功
能需要使⽤的时间;系统的并发能⼒,指系统可以同时完成某⼀功能的能⼒,通常也⽤QPS(query per second)来衡量。上述三个性能指标往往会相互制约,追求⾼吞吐的系统,往往很难做到低延迟;系统平均响应时间较长时,也很难提⾼QPS。
2. 可⽤性:系统的可⽤性(availability)指系统在⾯对各种异常时可以正确提供服务的能⼒。系统的可⽤性可以⽤系统停服务的时间与正常服务的时间的⽐例
来衡量,也可以⽤某功能的失败次数与成功次数的⽐例来衡量。可⽤性是分布式的重要指标,衡量了系统的鲁棒性,是系统容错能⼒的体现。
3. 可扩展性:系统的可扩展性(scalability)指分布式系统通过扩展集机器规模提⾼系统性能(吞吐、延迟、并发)、存储容量、计算能⼒的特性。好的分
布式系统总在追求“线性扩展性”,也就是使得系统的某⼀指标可以随着集中的机器数量线性增长。
4. ⼀致性:分布式系统为了提⾼可⽤性,总是不可避免的使⽤副本的机制,从⽽引发副本⼀致性的问题。越是强的⼀致的性模型,对于⽤户使⽤来说使⽤
起来越简单。
来源:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。