10 月,开发者不可错过的开源大数据大会-2021 WeDataSphere 社区大会深圳站 了解详情
写点什么

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

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:037088
用户头像

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

关注

评论

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

原来使用Postman如此简单,API测试之Postman使用全指南

软测小生

接口 Postman 接口测试 API API测试

python中对字典与列表组合进行排序

开心太平洋

Python List 排序

太厉害了!阿里年薪120W架构师整理的学习笔记,看完收获良多

互联网架构师小马

Java 学习 阿里巴巴 程序员 架构师

一文带你学会 Blob(含 7 个使用场景)

pingan8787

Java 前端 Web Blob

消息队列(三)如何保证消息不被重复消费?

奈何花开

Java MQ 消息队列

ARTS打卡 第5周

引花眠

ARTS 打卡计划

SQL运行内幕:从执行原理看调优的本质

arthinking

MySQL 数据库

阿里待遇那么好,你为什么从阿里离职?

互联网架构师小马

Java 阿里巴巴 程序员 找工作 离职

一个典型的大型互联网应用系统使用了哪些技术方案和手段,主要解决什么问题?

朱月俊

关于编码的一点“思考”

damnever

Go 思考 抽象 分层架构 编码

架构师训练营第四周学习总结

CATTY

小师妹学JVM之:JIT中的PrintAssembly

程序那些事

JVM 小师妹 性能调优 JIT 汇编

自由职业的前半年,我是如何度过的?

王磊

Java 程序员

重学 Java 设计模式:实战备忘录模式「模拟互联网系统上线过程中,配置文件回滚场景」

小傅哥

Java 设计模式 小傅哥 重构 备忘录模式

区块链冷链食品追溯系统

CECBC区块链专委会

区块链技术 上链 溯源 浙冷链

《架构师训练营》第四周总结

架构师训练营作业 -Week4

wyzwlj

极客大学架构师训练营

《架构师训练营》第四周命题作业

架构师训练营 - 学习笔记 - 第四周

心在飞

极客大学架构师训练营

清华百万年薪架构师,精心编写多线程与高并发实战PDF

互联网架构师小马

Java 程序员 多线程 架构师 多线程与高并发

CECBC带你一图看懂区块链

CECBC区块链专委会

CECBC 区块链技术 去中心化

快来解锁Pepper机器人新技能,够酷Pepper就跟你回家!

阿甜

编程 开发者 App 开发 机器人

谈反应式编程在服务端中的应用,数据库操作优化,提速 Upsert

newbe36524

C# MySQL 数据库 mongodb Reactive

MyBatis标签trim,你不会以为我是去空格的吧?

Java小咖秀

Java 面试 mybatis

ARTS-WEEK5

一周思进

ARTS 打卡计划

央行数字货币:第三方支付产业新变量

CECBC区块链专委会

数字货币 DCEP 区块链技术

GO语言泛型编程实践

老胡爱分享

Go 泛型

安畅迁移平台的云原生之路

雪雷

Kubernetes DevOps 云原生 CI/CD 迁移

学习总结 - 第 4 周

饶军

系统架构感想

朱月俊

互联网系统常见问题以及解决方案

而立

极客大学架构师训练营

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