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

1.1 分布式系统的组成

一个大型的分布式系统虽然非常复杂,但其设计目标却往往是非常简单的,例如,京东和淘宝这样的电商,其设计目标是卖东西;谷歌和百度这样的搜索引擎,其设计目标是帮助大家在网上找相关的内容;Facebook和微信这样的社交应用,其设计目标是方便大家相互联系并分享自己生活中的点点滴滴。

如前文所述,之所以需要有分布式系统,最根本的原因还是单机的计算和存储能力不能满足系统的需要。但要把成百上千台计算机组织成一个有机的系统,绝非易事。在人类社会中,其实也一样,找到1000个人容易,但要把这1000个人组织成一只能战斗的军队可就没那么简单了。

一个典型的分布式系统如图1-1所示。

  • 分布式系统大都有一个Web前端,用户可以通过浏览器随时随地访问,当然,前端也可以是运行在Windows/Linux上的桌面程序或者运行在手机上的应用。
  • 分布式系统还要有后端支撑。分布式系统的后端大都是基于Linux的集群[1]。之所以采用Linux,一是因为开源操作系统成本低,二是因为开源软件可以定制。
  • 就像人类社会需要有一定的组织和管理一样,为了组成一个集群,在单机的操作系统之上,还需要集群管理系统。在集群管理系统中,一个非常重要的组件是分布式协调组件,用来协调不同机器之间的工作。这些协调系统大都基于一些著名的分布式一致性协议(如Paxos、Raft等)。有些超大型的后端还拥有专门的集群操作系统,这些系统不仅有分布式协调功能,还有资源的分配与管理功能。
  • 为了满足大规模数据的存储需要[2],需要有能够存储海量数据的后端存储系统。
  • 为了满足大规模数据的计算需要[3],还需要有能够分析海量数据的后端计算系统。

图1-1 一个典型的分布式系统

  • 在分布式系统中,有很多共性的功能,例如能够支持分库分表的数据库访问中间件、用来异步化的消息中间件、用来开发不同组件的分布式系统调用中间件、用来监控各个组件状态的分布式跟踪中间件等。事实上,前面所列举的每一种中间件,也都是一个复杂的分布式系统。

本章下面的内容先就后端最重要的分布式协调组件、后端存储系统和后端计算系统做一个概要的介绍。