分布式系统设计实践
上QQ阅读APP看书,第一时间看更新

我很喜欢看书。从小到大,我看过很多书。

每看一本好书,我都会对书的作者充满感激和敬意,因为他愿意花那么多精力,写一本那么好的书给别人看,实在是非常值得尊敬。我知道,写书是赚不了多少钱的,一个人不为名、不为利,却愿意花很多精力写一本好书给别人去读、去欣赏,实在是难能可贵!

因此,我一直有一个想法,就是有一天,我也要尽力去写一本“好点儿”的书,一则对自己的所学做一个系统的整理,二则也为读者做些贡献。

我不知道是否有人会喜欢我的这本书,但无论如何,我已经尽力把它写好,因为我想和那些自己曾经读过的好书的作者一样,奉献给读者一本值得读的书。

我从1991年开始接触计算机,绝对算是一个“老码农”了。屈指一算,从那时到现在,计算机技术经历了几次重要的更新换代。

第一次发生在20世纪90年代初,是从DOS到Windows的换代。这一次换代淘汰了一批落后的公司和产品,亦有一批新的公司和产品崛起。当年DOS下的WPS如日中天,然而Windows一经推出,就难觅WPS的踪迹了。直到21世纪初,新版Windows下的金山WPS才姗姗而来。如果当年求伯君先生能及时推出新版的Windows下的WPS,那么中文办公软件的市场也许就不是今天这样了。

第二次换代发生在20世纪90年代末到21世纪初,Java和.NET这样的基于虚拟机的开发技术开始兴起。在DOS/Windows下,C/C++一直是主流的开发语言,而随着计算机软件的复杂度越来越高,C/C++语言开发效率低、查错难的弊端越来越突出,于是Java和.NET这样的基于虚拟机的开发技术日益受到开发者的青睐。这一波技术换代使Java的应用范围越来越广,也动摇了微软公司的技术在开发领域中无可替代的地位。

进入21世纪后,由于互联网技术,尤其是移动互联网技术的发展,诞生了一批大型互联网公司(谷歌、亚马逊、Facebook、百度、阿里巴巴、腾讯等)。在互联网发展的初期,这些公司在汹涌而来的大数据面前毫无准备,被折腾得筋疲力尽。痛定思痛后,以谷歌为代表的互联网新贵们,开发了许多优秀的技术(GFS、Bigtable、Hadoop等),完美而优雅地解决了大多数曾经令它们头疼的问题。继谷歌将其技术以论文的形式发表后,业界就开始模仿其设计和架构,相继开源了许多优秀的产品(如Apache Hadoop系列产品)。从此,大型分布式技术的大门被轰然推开,一个又一个大型的分布式应用(淘宝网上商城、京东网上商城、微信、谷歌搜索、Twitter社交平台、Facebook社交平台等)相继诞生。这就是以移动互联网和分布式计算的大规模应用为代表的第三次技术换代。无疑,这一次换代又是一次各大公司实力的大洗牌。

第四次大的技术换代是什么?也许它正在进行(如果它是人工智能的话),也许还没有开始……

每一次大的技术换代,都会有公司和技术被无情地淘汰,从Novell到Borland,到Netscape,再到Nokia,昔日霸主早已风光不再。但被淘汰的不仅有大公司,同时被淘汰的还有不少从事技术工作的工程师和架构师。因此,为了不被技术浪潮无情地拍倒,每一个IT从业者都应该对新技术心存敬畏,都应该关注技术的发展。

今天,对于在IT行业从事技术工作的人,无论是工程师、架构师还是管理者,也无论从事的工作是否与分布式相关,都应该了解分布式技术,因为总有一天,你会遇到它、接触它、使用它、理解它、完善它。

然而,分布式技术涉及的方面(存储、计算、框架、中间件等)是如此之多,且迄今为止尚未见到一本书对其进行概括和梳理,要想对分布式技术有全面的了解,特别是对初学者而言,何其难哉!

因此,本书试图对近年来涌现出的各种主流分布式技术做一个简要介绍,以使不太熟悉这个领域的读者能了解其概貌、原理和根源。

本书共分为以下6部分。

  • 第一部分对典型的分布式系统的组成及其中每个组件的功能进行简要介绍,以使读者对分布式系统有一个总体了解。
  • 第二部分介绍分布式系统的前端经常使用的Web框架、反向代理及负载均衡技术。
  • 第三部分对分布式系统中经常使用的各种中间件技术逐一进行介绍,包括分布式同步服务中间件、关系型数据库访问中间件、分布式服务调用中间件、分布式消息服务中间件和分布式跟踪服务中间件。
  • 第四部分介绍分布式文件系统、各种NoSQL数据库技术(基于键值对的NoSQL技术、基于列的NoSQL技术、基于文档的NoSQL技术、基于图的NoSQL技术)和NewSQL数据库系统。
  • 第五部分对业界在构建大型分布式系统的过程中的主要经验加以总结,使后来者避免重蹈覆辙。
  • 第六部分介绍业界几个知名的大型分布式系统的主要设计思想和架构,包括谷歌搜索系统、淘宝网、阿里云和领英的社交应用。此外,还会探讨和思考分布式系统实现中的一些问题。

在本书写作的过程中,参考了许多网上的资料和书籍,感谢这些资料的作者们。由于涉及的资料太多,无法将其作者一一列出,谨表歉意。

感谢人民邮电出版社的杨海玲编辑,没有你的辛勤付出,也不会有本书的顺利出版。

另外,还要感谢我的好朋友申天雷,感谢你在繁忙的工作之余抽出时间来全面审阅这本书。

最后,感谢我的家人。没有父母的养育,我不可能有机会掌握这些知识;没有我岳父母帮我看管孩子,没有我爱人的关心与支持,我不可能有时间来写作;没有我儿子那双充满期待的眼睛,我也不可能一直坚持把本书写完!

由于分布式系统涉及的内容实在太多,我不可能对其中每个细节都有很深刻和精确的理解,因此,书中错误及疏漏之处在所难免,欢迎批评指正。

李庆旭

2019年夏于北京