简评:设计分布式系统(分布式系统的设计模式)

Posted Flink

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简评:设计分布式系统(分布式系统的设计模式)相关的知识,希望对你有一定的参考价值。

如果你已经看完了这本书(简评)Kubernetes In Action(大势所趋),但是除了所提到的建立“不死的service”之外,又不知道怎么在其他的地方使用Kubernetes来搭建分布式系统的话,那么可以考虑看一下这本书:Designing Distributed Systems;

这本书的真名其实是"分布式系统的设计模式"。

由于系统设计是需要具体问题具体分析的,任何不了解你的domain的人,哪怕他是Tech Fellow还是Distinguish Engineer或者Jeff Dean,都无法告诉你怎么来设计你的系统(没有银弹) (The hardest part of writing a specification is choosing the proper abstraction. I can teach you how to use TLA+; but I don't know how to teach you about abstraction. ----Leslie Lamport, Specifying Systems)
那么这些技术大牛怎么传(写)道(书)授(赚)业(钱)呢?把问题抽象成一种模式,然后告诉你在XXX的情况下可以用YYY方法解决这个问题。先定义和局限好场景,然后根据假设来解决问题,只要场景足够通用,那么一样可以具有实用型。只要读者可以把你的场景代入到pattern所应对的领域,那么就可以利用大牛们的经验来解决问题。而这本书就采取了这种思路,把问题抽象,然后利用pattern来讲解如果解决特定问题。

抽象的描述往往需要真实实例来解释,方便理解,本书的作者是K8S的co-founder,本书的所有实例基本都使用K8S来实现(但是非常简朴),所以这本书又可以看成K8S的简单使用指南。

层级
这本书的抽象层级介于战略层(如:(简评)建造可进化的系统构架)与实现层(具体的技术)之间;战略/系统/需求的具体分析确定构架层的trade-off,据此可以决定什么pattern合适,然后根据选择的pattern再来选择各种各样的framework和工具来实现书里的pattern;从而完成从高层构架到具体细节的设计。

优点
在讲解pattern的时候点出了分布式系统经常需要面对的常见问题,对于不熟悉分布式系统的同学来说还是很有用的, 比如traffic congestion,怎么做traffic shedding, “Request driven VS. Event Driven”的考虑, 使用分布式锁来决定leader时候会遇到的各种问题(即使你使用了etcd, zookeeper这种分布式共识系统),leader lease,fencing token,service discovery时候的选择。。。等
书里举例的各种互联网应用场景也很实在,都是要解决的真实问题(可惜讲的太笼统)。


缺点

  • 书太薄了,140页带code和各种图,使得能讲的内容无法深入,或者说讲的太high level了,不深入任何具体的技术,哪怕用K8S举例,也是浅尝辄止(当然相对的优点是很快就能翻完)。

    如果看完目录,只是看这些pattern的名字你都可以联想到他在讲什么的话,那么你的联想基本上都是对的。懂得人不必看,不懂的人看了还是不懂

  • 对pattern所应对的问题讲的不系统明确,其实内容更像是描述已经存在的分布式系统的各种"样子".


使用方法

  • 对于有经验的同学,这本书可以当作备忘录,设计系统的时候可以迅速浏览一遍有没有思路没想到的,从中选最适合的思路来设计系统。

    同时也有利于写文档,比如“我尝试了n种设计系统的思路,这种是最好的,由于。。。

  • 对于没有经验的同学,这本书可以当作导论,了解了pattern的列表,那么对每种pattern,去找已经成型的framework或者开源软件,或者去AWS上找服务,可以加深理解和对比。

注意:任何系统往往都是复杂且多变的,这意味着你的实际系统可能需要多个pattern并用,在不同的局部解决不同的问题,且系统也需要随着时间变化,今天适用当前系统的pattern,也许一年后就不行了。没有银弹,Domain Driven,把“拥抱变化”和“进化性”作为first-class-citizen考虑在设计里,实现在系统里,才是正确应用pattern的正道(关于“进化性”(简评)建造可进化的系统构架)。   

整体来说3.5星推荐,可以根据优缺点决定是否适合自己阅读。

看到最后的小福利:本书可免费下载

http://www.istrsjournal.org/wp-content/uploads/2018/06/Designing_Distributed_Systems.pdf www.istrsjournal.org

====== 小尾巴 =====

我是阿莱克西斯,10+年关于高并发,大数据处理的技术经验,常年与内部科学家合作,负责搭建预测优化后端黑魔法系统的Amazon Sr. SDE; 每天看技术书和paper到夜里1点的读书狂魔兼猫奴。

关注我,关注我的读书专栏,和解释分布式系统paper的专栏,带你成为程序艺术家,学习在战略分析层面的大道编程,讨论如何以构架师和技术负责人的角度看问题,玩转分布式系统~ 我们一起读书一起成长~

用谁都能看懂的方法解释分布式系统

一个书魔程序员的读书简评

编程到底难在哪里?

在做程序员的道路上,你掌握了什么概念或技术使你感觉自我提升突飞猛进?


以上是关于简评:设计分布式系统(分布式系统的设计模式)的主要内容,如果未能解决你的问题,请参考以下文章

分布式系统设计系列 -- 基本原理及高可用策略

分布式系统设计应考虑的问题

分布式系统架构设计系列文章

分布式系统架构设计系列文章

分布式系统弹力设计

分布式系统设计