BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

应用工程师的分布式系统理论

| 作者 Andrew Morgan 关注 3 他的粉丝 ,译者 金灵杰 关注 5 他的粉丝 发布于 2017年6月26日. 估计阅读时间: 3 分钟 | GMTC大前端的下一站,PWA、Web框架、Node等最新最热的大前端话题邀你一起共同探讨。

分布式系统工程师、《RabbitMQ实战》合著者Alvaro Videla在2017伦敦QCon上回顾了分布式系统理论。主题涵盖将分布式系统从不同维度进行分类,例如时间模型、故障模式。并讨论这些类别的选型考虑因素。

Videla首先介绍了几种时间模型,它们的区别主要在于分布式系统每步处理时间是否已知。他列举了三类(注意不要和并行编程中的相关概念混淆):

  • 同步:该类分布式系统已知其每一步的耗时。虽然这能够在诸如故障检测上有所帮助,但是真实系统不可能做到。
  • 异步:该类分布式系统每一步执行都无序,且无法保证执行耗时。这更符合真实的系统,但是真实系统一般都会引入超时机制。
  • 半同步:该类分布式系统每一步执行至少能够提供一些耗时信息,因此可以为其设置阈值。

Videla还阐述了进程间通信的方式。一般系统要么选择消息传递机制,要么选择共享内存方式。

Videla最后提到的分类方式是故障模式,它是按照进程故障类型进行分类的,包括:

  • 崩溃后停止:当一个进程崩溃后,再也无法恢复。这不能反应真实场景,一般当一台机器故障时,它不会被处置,而是被重新利用。
  • 崩溃后恢复:当一个进程崩溃后,可以通过一系列恢复算法进行恢复。例如通过从数据库重新读取,或是和其他进程进行交互。
  • 忽略故障:当进程无法接收或者发送消息的时候,直接忽略它。对此Videla给的例子是缓存模块,当发生可以接收消息,但是无法发送响应消息的场景。此时对于客户端来说,缓存模块仍然是有效的,因为它仍然保存着最新的数据。
  • 任意失效模式:此模式下,一旦进程开始发送或者接收不正确的消息,这些消息的计算结果应该能够反映系统处于失效的状态。

Videla强调,在这些模式和类型中间选择时没有银弹。最终的选型一定是基于系统需求权衡的结果。

还有一点值得注意的是,上述一些选项无法反映真实系统,但是它们在分布式系统理论中还是有用的。这是因为它们相对简单,可以用于验证基于这些简单场景的新算法。这些算法如果在简单模型下适用,它们也可能适用于更加复杂的场景。

除此之外,Videla还介绍了故障检测,这是一种用于检测其他进程是否正常的算法。设计这些算法的主要难点在于区分故障进程和长耗时进程。对此Videla介绍了名为“最终完美故障检测器(Eventually Perfect Failure Detector)”,它基于超时进行扩展,将超过一定时限的进程标记为嫌疑进程。这意味着,如果被标记为有故障嫌疑的进程,后面被发现仍然存活,将会从嫌疑列表中移除。

完整视频可以在线观看,同时Videla也以此主题写了一篇文章。文章介绍了仲裁(quorum)和一致性等额外的概念,同时也给出了后续阅读的建议。

查看英文原文Distributed Systems Theory for Practical Engineers

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT