云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

负载均衡_阿里云maven仓库_便宜的

小七 141 0

与救生员闲聊

今天,我们很荣幸地宣布由HashiCorp Research出版的第一篇文章,题目是"救生员:带着情境意识游泳"。本文详细介绍了我们为农奴、执政官和游牧民引入的一些新的改进,以使其底层的八卦协议更加健壮。统称为救生员,这些扩展将故障检测器产生的误报减少50倍,使我们能够更快地检测到真正的故障。分布式系统,如BitTorrent、Apache Cassandra、Microsoft Orleans和HashiCorp Consult通常使用八卦协议。它们通常被嵌入以提供诸如集群成员(谁在集群中)、故障检测(哪些成员是活动的)和事件广播等特性。它们的点对点特性通常使它们比集中解决同一问题的方法更具可伸缩性和可靠性。然而,通信量的减少使他们对消息处理的缓慢很敏感。我们的许多工具都利用了学术界的研究成果,我们希望通过HashiCorp的研究做出贡献。我们的重点是关于我们在实践中使用的算法和系统设计的新颖工作和白皮书。Lifeguard是我们的第一个公开作品,我们在生产环境中操作工具的用户推动了这些改进的重点。继续阅读,了解更多关于救生员的知识。»救生员HashiCorp工具嵌入了memberlist库,它实现了SWIM(可伸缩弱一致性感染风格成员)协议。原始协议提供了集群成员和故障检测,并通过Serf扩展,提供了一个事件广播系统。Serf作为一个库嵌入到conver和Nomad中,也是一个独立的工具。总的来说,这些系统运行在数百万台机器上,单个数据中心运行的八卦协议参与者超过10万人。我们支持这些系统的经验使我们发现了原始协议中的一些缺陷。特别是,由于CPU耗尽、网络延迟或丢失而导致的消息处理缓慢,可能会导致错误地将成员声明为错误的。这可能会产生代价高昂的影响,例如不必要地分流正常成员的网络流量,并触发不必要的数据副本重新平衡。Lifeguard成立的初衷是为了减少误报,避免对数据中心中相对常见的情况敏感。我们在原SWIM作者的工作基础上增加了三个新的扩展,它们共同组成了救生员。我们把这些扩展称为自我意识、狗堆和伙伴系统。下面的详细信息将讨论这些扩展。»自我意识第一个扩展称为自我意识,因为我们试图将多个信息源结合到对本地成员健康状况的总体评估中,实际上是让成员对自己的状态有"自我意识"。八卦协议依赖于所有成员的合作,以有效地确定哪些成员是健康的或不健康的。最初的SWIM文件假设一个崩溃停止模型,这意味着一个成员要么正在运行要么失败,中间没有灰色。实际上,运行和失败之间的灰色区域是显著的,成员可以运行但降级(例如CPU耗尽)。由于八卦的协作性,这些退化的节点可能会无意中影响其他健康成员的稳定性。自我感知允许成员确定当前是否降级,并将对集群其余部分的影响降至最低。每个成员维护一个"节点自我意识"计数器,该计数器通过与其他成员的各种交互来更新。随着计数器的增加,成员在声明其他节点不正常时变得更加保守。此反馈循环允许不健康的成员快速地将其对集群其余部分的影响降到最低,直到条件改善,然后在与其他成员的交互表明其已恢复时,恢复正常行为。»狗屎堆Dogpile是第二个扩展,因为多个成员在声明另一个成员失败时将"Dogpile"。在原始的SWIM文件中,单个成员可以怀疑另一个成员失败,并且可疑成员可以在固定的时间范围内反驳。当所有成员都正常时,这种机制是健壮的,但是如果一个节点的CPU耗尽,它可能无法及时处理消息,并且可以将其他正常的成员标记为失败。Dogpile用一个动态的时间框架代替固定的时间框架来反驳一个失效,并且当独立成员确认一个成员失败时,对数减少。当一个降级的成员怀有怀疑时,它将不会收到确认,并且有更多的时间处理反驳,因为它的计时器不会减少。如果一个成员确实失败了,它将很快被其他成员确认,并且不会增加健康成员将该成员标记为失败所需的时间。»伙伴制伙伴系统是最后的扩展,因为成员会通知可疑的对等方,以便他们能够更快地反驳失败。成员之间有几种类型的通信,包括健康检查和状态广播。通常,当一个成员加入集群,或者被怀疑为失败,或者离开集群时,它将广播一条消息,该消息最终由所有其他成员接收。广播序列包括向几个对等方发送消息,然后这些对等方转发给其他几个对等方,等等,直到所有成员都收到消息为止。广播机制是有效的,但可能需要几轮八卦才能通知所有成员。健康检查机制更直接,因为两个成员将直接通信以检查活动性。Buddy系统重载此机制,直接通知成员它怀疑有故障,而不是等待广播机制到达该成员。这使得成员可以立即驳斥失败,因为当另一个成员探测失败时,它将了解它在集群中的状态。»结果本文对每一种救生员分机进行了详细的说明,并分析了它们各自的影响和综合影响。下图提供了救生员效果的高级快照:相对于基线,即救生员之前的实现,我们将误报率降低了50倍以上,这也不影响检测成员失败所需的时间。救生员的一个参数或"旋钮"是alpha,它让我们控制成员有多少时间来反驳失败。通过调低这个旋钮,我们可以更快地检测出故障,但代价是增加误报。在救生员之前,这将导致不可接受的误报数量,但是使用Lifeguard和alpha=2,我们可以在几乎一半的时间内检测到故障,误报减少7倍。我们已经将memberlist中的默认值改为alpha=4,这样现在检测到故障的速度提高了20%,误报率降低了20倍。作为救生员的结果,最终用户会感觉到一个更快更健壮的系统。其中许多改进措施于2016年9月完成,并已在生产规模上运行了几个月。对于那些对细节感兴趣的人,现在可以在Arxiv上找到全文。感谢帮助测试和提供反馈的用户,感谢艾蒙·达加(Armon Dadgar)的建议,感谢詹姆斯·菲利普斯(James Phillips)担任领事。在HashiCorp,我们坚信研究的价值。我们的许多工具利用学术著作来提高性能、可伸缩性或安全性。以这种方式使用研究使最终用户能够访问最先进的技术。救生员是我们提升艺术水平和回报社会的方式。随着我们继续与用户和客户合作,了解他们的挑战,这有助于为我们的研究提供信息,并帮助我们集中精力解决问题的前沿问题。我们期待着在未来分享我们正在进行的工作。