向微服务迈进

没有银弹

传说里,能从普通人忽然变身的狼人是梦靥中最为可怖的怪物,人们一直尝试寻找到能对狼人一枪毙命的银弹。

软件亦有着狼人的特性,平常看似人畜无害的技术研发工作,转眼间就能变成一只工期延误、预算超支、产品满身瑕疵的怪兽。我听到了管理者、程序员与用户都在绝望地呼唤,大家都渴望能找到某种可以有效降低软件开发的成本的银弹,让软件开发的成本也能如同电脑硬件的成本那样,稳定且快速地下降。

—— Fred Brooks向微服务迈进 - 图1No Silver Bullet:Essence and Accidents of Software Engineering向微服务迈进 - 图2, 1987

这部文档的主体内容是务实的,多谈具体技术,少谈方向理论。只在本章中会集中讨论几点与分布式、微服务、架构等相关的相对务虚的话题。

IBM 大型机之父Fred Brooks向微服务迈进 - 图3 在他的两本著作《没有银弹:软件工程的本质性与附属性工作向微服务迈进 - 图4》和《人月神话:软件项目管理之道向微服务迈进 - 图5》里都反复强调着一个观点:“软件研发中任何一项技术、方法、架构都不可能是银弹”,这个结论已经被软件工程里无数事实所验证,现在对于微服务也依然成立。本节,笔者将会谈到哪些场景适合去使用微服务,以及一些已经被验证过、被总结为经验的最佳的实践方式;而更主要的是想讨论什么场景不适合微服务,微服务存在哪些理解误区、应用前提,等等。

作为一部技术文档的作者,如果有同学是因为看了此文档,然后被带进微服务的沟里,那作者只强调一句“微服务不是银弹”也难以免责,所以,在你准备发起实际行动向微服务迈进前,希望你能阅读一遍本章,向微服务迈进——的避坑指南。