分布式网络是否可靠?
来自The network is reliable一文阐述当前发生在业界的一场有关分布式系统是否可靠的讨论。
正方观点是网络是可靠的,没有必要那么专注于失败恢复设计,而另外一方认为网络分区应该尽可能少,它引起的问题比预期要多。
这场讨论将从根本上影响分布式数据库、队列、应用程序的走向。到底谁是正确的?
最大问题是缺乏证据,目前我们所知道的分布式网络基本来自技术人员喝啤酒时的饭后茶余的谈资,大部分来自猜测和传言,不真实。
下面搜集来自各大著名网络中心的数据:
一队来自加拿大多伦多大学和微软研究院的研究:有关在一些微软的数据中心网络出现故障的行为 。 他们发现,平均每天5.2个设备和40.8个连接数的故障率,平均修复时间约5分钟(一个星期)。 虽然研究人员注意到,相关的链路故障和通信分区是具有挑战性的,他们估计每次故障平均丢包59,000包。 也许更担心的是他们发现,网络冗余只能提高43%的流量,网络冗余并不能消除许多常见的网络故障。
在美国加州大学,圣迭戈和惠普实验室的研究人员之间的一项联合研究投票,有关惠普的管理网络的网络故障的原因和严重程度: “连接问题”相关的投票占11.4%的支持票(14%为最高优先级),最高优先级的时间为2小时45分钟,平均时间为4小时18分钟。
谷歌小胖是谷歌的分布式锁管理器,在700天中超过61天停运,。 九次停运大于30秒,四次是网络维护,两次是由于“可疑的网络连接问题造成的。”
.....
原文还列举了亚马逊和雅虎和GitHub的大型网络问题,总结出分布式系统是很难的。
然后详细研究了PostgreSQL, Redis, MongoDB 和 Riak等有关分区冗余方面技术细节,有兴趣者可查看原文。