分布式系统中可用性及容错性的区别

可用性及容错性是分布式系统中很重要的两个属性。之前我对一致性关注得更多一些,但对两者的区别还是很模糊。
首先是msdn上的一篇介绍两者区别的文章:http://blogs.msdn.com/b/clustering/archive/2010/10/06/10072013.aspx
"High availability solutions traditionally consist of a set of loosely coupled servers which have failover capabilities."
"Fault tolerant solutions traditionally consist of a pair of tightly coupled systems which provide redundancy."
看了之后发现文章介绍的是HA/FT solution,并不是研究领域中的概念,不过这也体现了工业界对HA,FT这两个概念的看法。
文章认为HA解决方案中没有副本机制,故一个节点失效后,必须要等这个节点恢复或用新的节点替代旧的节点后,系统才会变得可用,所以会存在宕机时间;然而在有多副本机制的分布式系统中,尤其是提供弱一致性支持的系统中,一个节点失效并不会导致宕机。
对于FT解决方案,文章用了强一致的主从副本机制:当主节点失效后,从节点可以继续提供服务,使宕机时间为0.
我认为,文中对HA/FT的理解并不是通用的理解,起码在我的研究范围内不是;或者退一步说,文中对HA的理解就不适用于我的研究范畴。
对这两个概念的理解,不同人有不同的看法,例如下面一篇:
http://www.quora.com/What-is-the-difference-between-a-highly-fault-tolerant-and-a-highly-available-system
故在此提出我对这两者的看法。
--------------------------------------------------------------------------
这两个概念其实都是针对同一问题:系统出现异常了怎么办?
首先说明一下,我讨论的系统是分布式环境下有多数据副本的系统。另一类,异常如何定义?在我看的文献中,异常主要有两大类:omission failures及unreliable networks,下面也将沿用这一异常分类。
omission failure:
定义1:Omission failures either due to process crash either due to communication link failures are detected via timeouts
参考:http://stackoverflow.com/questions/12229099/understanding-omission-failure-in-distributed-systems
定义2:Process omission failures + Communication omission failures
参考:http://www.inf.ed.ac.uk/teaching/courses/ds/handouts/handout12.pdf
unreliable network: messages may be delayed for an arbitrary but finite duration, reordered, or dropped.

对于fault的理解,网上常常用可检测的硬件(包括服务器及网络设备)故障来理解,其实是不全面的。首先检测机制本身也会出现故障,另外,硬件故障可能是短期的,且使得检测机制来不及检测到硬件故障又自行恢复了(如网口暂时接触不良),最后,数据包可能会乱序,或者由于网络拥塞导致丢包等等。故障检测到现在都没有100%正确的方法,且仍是学术界研究的一个重要方向。

回到HA及FT的区别。HA是指系统在出现某些特定故障之前,都能继续提供服务,如non-strict quorum系统中的W=R=1的配置下,只要有一个副本可访问,系统就能持续提供服务。对于FT,我的理解还不是很透彻,感觉大家理解更多的是一出现单点故障,系统会迅速寻找到一个点替代故障点;另外,还有一点是替代节点完全可以替代故障节点,使得客户端感觉不到数据不一致的问题,而可用性则允许数据不一致,因为可用性与一致性是两个不同的属性。


参考:《Consistency, Availability, and Convergence》

posted @ 2018-08-21 11:19  我是包子  阅读(445)  评论(0编辑  收藏  举报