1.5 分布式系统中节点之间的关系
一个人类社会的组织,要想实现其组织功能,组织内的人需要按照某种方式被组织起来,例如,有的人负责管理,有的人负责执行,等等。由许多节点组成的分布式系统也一样,系统中的节点也需要被有机地组织起来,才能实现想要完成的功能。也就是说,有些节点需要承担这样的角色,而另一些节点则需要承担另外的角色。根据所承担角色的不同,节点之间的关系不外乎下面两种。
- 主从式(master-slave)关系:主节点集大权于一身,所有重要的信息都存储在主节点上,所有重要的决定也都由主节点做出。这类系统的例子有谷歌的GFS和Bigtable等,以及受其架构影响而开发的其他系统(如HDFS、HBase、淘宝TFS、京东JFS、百度BFS、百度Tera等)。
- 对等式(peer-to-peer)关系:这类系统中的节点之间的关系是平等的,没有中心节点,而是采用设置好的选举与协调规则来处理节点之间的协调问题,这类系统的典型代表是亚马逊的Dynamo,以及受其架构影响而开发的其他系统(如Cassandra、Riak等)。
相对而言,主从式系统实现起来要简单些,而对等式系统实现起来则困难些。
[1] 所谓集群,是指采用同样或类似配置的许多台机器,为了达到一个共同的目的而组成的系统。
[2] 像谷歌和百度这样的公司,因为索引的页面量非常庞大,需要很大的存储空间。微信和Facebook这样的社交应用亦然。
[3] 例如谷歌,其PageRank算法就需要很大的计算量;再如京东和淘宝这样的电商,其商品推荐系统也需要很大的计算量。
[4] 水平扩展(scale out)与垂直扩展(scale up)是一对相对的概念,前者是指通过增加额外的节点来扩展系统的处理能力,后者则指通过升级单个节点的硬件(CPU、内存、磁盘)来进行扩展。
[5] 节点与机器可以是物理的实体(即物理机器),也可以是虚拟的实体(如虚拟机、Docker容器)在本书中这两个概念在本书中不加区别,常互换使用。
[6] 最终一致性即在“有穷”的时间内,各个节点上的数据最终会收敛到一致的状态,当然这里的“有穷”经常是指很短暂的时间,几分或几秒就算比较长的了。
[7] ACID指的是原子性(Atomicity)、一致性(Consistency)、独立性(Isolation)和持久性(Durability)。
[8] CAP指的是一致性(Consistency)、可用性(Availability)和网络分区可容忍性(Tolerance to Network Partitions)。
[9] 阿里巴巴的OceanBase的这种实现方式实际上就是所谓的Lamda架构。
[10] map函数的功能是将输入的键值对映射成一个新的键值对列表。
[11] reduce函数的功能是将一个键和一个值的列表映射成一个新的值的列表。