QCon全球软件开发大会9折优惠倒计时,了解详情 了解详情
写点什么

分布式系统的开发经验与心得

2015 年 8 月 23 日

与近期与 InfoQ 的一次对话中, Vaughn Vernon 分享了一些他在开发分布式系统方面的心得。他特别指出,在分布式系统中,有可能会出现局部故障之类的问题。对于这种类型的问题以及一些其它挑战来说,最佳的应对方式是做好一切准备,而不是无助地祈祷它不要出现。Vaughn 还推荐了 Jeff Hodges 所撰写的一篇博客文章,这篇文章为分布式系统给出了一些落到实处的设计方式,并提出了一些实用的建议,非常适合于在分布式系统方面经验尚浅的开发者。

Vaughn Vernon 是《实现领域驱动设计》以及最新的《通过Actor Model 实现响应式消息处理模式》这两本书的作者。在他看来,Hodges 的文章中有两个推荐是最有价值的,一是尝试为局部可用性进行设计,二是当依赖的系统变得不可用时,通过使用capped 指数退避(exponential back off)算法恢复完整的操作。这种方式是当故障发生时,你所能做的最好的期望,这会让你想到Vernon 的评价。

Hodges 发现,新手往往会将延迟视为分布式计算中最困难的一部分。但在他看来,分布式系统的区别性因素在于出现故障的可能性增大了,尤其是局部故障的出现率。因此,他建议设计者去寻找一些能够实现局部可用性的设计方式。他以一个设计良好的搜索系统作为示例,如果发生搜索操作超时的情况,那么系统应当返回在超时之前所获得的搜索结果,这种方式可以有效地提高系统的弹性。

在 Hodges 看来,要创建健壮的分布式系统,一个最基本的构建块就是背压(backpressure)机制。被请求的系统会向发起请求的系统发出故障信号,以避免出现过载的情况。实现这种机制有一些常见的方式,例如丢弃消息,或是在处理一个有可能失败的请求之前就返回错误信息。

Hodges 强烈反对在服务器之间进行协调的做法,他倾向于让服务器保持独立性,将互相之间的通信次数降至最低。因为一旦出现需要两台服务器对某个操作表示允许的情况,整个服务的实现就变得更加困难了。

Hodges 还认为,如果能够找到一些高层次的业务逻辑,并将其提炼为服务,则能够带来许多益处。一个经过提炼的服务能够提供更好的封装性,并且能够让代码变更的部署更快、更简便。在他看来,对于部署至多个客户的情况,在服务这一层进行协调的成本,比之让所有客户端使用一个共享的类库,在部署时必须对所有客户进行协调的成本来说要低上许多。

Hodges 在文中也描述了一些在他的职业生涯中所学到的一些经验教训,例如利用特性标记交付基础设施,以及为系统选择 id 空间时所需考虑的各种因素。

查看英文原文: Lessons Learned Working with Distributed Systems

2015 年 8 月 23 日 19:037067
用户头像

发布了 428 篇内容, 共 154.2 次阅读, 收获喜欢 27 次。

关注

评论

发布
暂无评论
发现更多内容

🍉 别再恐惧 IP 协议(万字长文 | 多图预警)

飞天小牛肉

面试 计算机网络 IP TCP/IP 2月春节不断更

线程范围内共享数据

武哥聊编程

Java 多线程 28天写作

集群迁移自由来啦!4步将Rancher迁移至任意K8S发行版

RancherLabs

产品经理第三周作业

朱琴

入网指南:一文读懂你身边的网络

站出来打造真正开源的 Elasticsearch

亚马逊云科技 (Amazon Web Services)

产品经理训练营 Week3 作业

Mai

作业 - 第二章 产品思维和产品意识 (二)

hao hao

批判性思维自修课(七)

石君

28天写作 批判性思维

产品训练营第三周

克比

第三周笔记

Ashley.

大数据两万年

大伟

大数据 GFS

产品训练营第三周作业-利益相关者关注的问题

jpcr987i

利益相关者的问题

沈弋

极客时间产品经理训练营第 3 次作业

待注册

极客大学产品经理训练营

速成算法笔记,Github上已收获近60K+star!力压LeetCode只为面试

云流

程序员 面试 算法

作业:游戏的利益相关者

嫉妒的耗子

LeetCode题解:69. x 的平方根,牛顿迭代法+迭代,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

K8S原生存储持续进化,Longhorn 1.1迎来ARM支持

RancherLabs

《期权合同》常见的一个大坑,99%中招 | 视频号28天(26)

赵新龙

28天写作

学计算机的都是傻子?《打工人的点点思考》

谙忆

话题讨论 | 工作之外的时间怎样分配

程序员架构进阶

时间分配 自我提升 话题讨论 2月春节不断更

CSS(十一)——用CSS设置超链接样式

程序员的时光

七日更 28天写作 2月春节不断更

产品训练营作业:2、产品意思和产品思维 (2)

Geek_06d2e5

产品训练营·第三周作业

产品经理训练营

给予你关注产品的利益相关者,想想他们的问题,自己设定一些前提,做个简单的排序。

戎帅

一带一路上的中国品牌!AWS 助力中国新能源车企走向世界!

亚马逊云科技 (Amazon Web Services)

产品经理训练营第三周作业 - 利益相关方(二)

Denny-xi

产品经理 产品经理训练营

产品经理训练营第二章作业(二)

新盛

CSS(十二)——用CSS设置列表样式

程序员的时光

七日更 28天写作 2月春节不断更

产品训练营 第三周作业

万顷湖天碧

产品训练营

数据库运维技术发展与展望

数据库运维技术发展与展望

分布式系统的开发经验与心得-InfoQ