前言

这段时间一直在读一本书《大规模分布式系统架构与设计实战》,这是淘宝千峰老师的作品,是从程序员到首席架构师十多年职业生涯的实战经验总结。

这本书其实是围绕着Fourinone在讲分布式,并非分布式理论,所以只适用于想研究Fourinone的人,应用实践挺详细。Fourinone是为了解决Hadoop的不足,所以也会有很多相似之处,想研究hadoop的可以借鉴一下思路。最后一单在调度这块比较详细,适用于研究分布式调度的人阅读。我是吧这本书作为我走向分布式的启蒙老师的。

fourinone是一个分布式框架,它主要就是一种“包工头-职介所-工人”的结构,下面我们来说书中的一个例子,使用“并行计算实现上亿排序”。
对于上百G甚至上T的数据,这种数据量是巨大的,通常这些数据也无法在一台计算机上保存,这就使得数据本身就会分布在多个计算机上,即分布式存储。

现在假设我们有50G的无序数据等待排序,这50G的数据都是10万以内的数据。

当使用分布式计算时,首先我们获得10台计算机,这样每台计算机上有5G的数据,由于现在有10台计算机,因此我们考虑可以将所有的数据分成10组(正好对应10台计算机,第一台保存010000,第二台保存1000020000,。。。,第十台保存90000~100000),然后每个计算机对自己的一组数据进行排序,但这样我们需要在分布式系统中有许多次的交互,因此我们想到可以想让每台计算机将自己的数据分成10组,然后再将对应的组发到对应的计算机上,这样,10台计算机之间有很好的并行性。

因此,最终我们的做法是“先在每台计算机上对数据进行分组,然后将数据合并到他们应该待得计算机上(比如每台计算机的第三组合并到第3台计算机上),最后,每台计算机上对自己的数据进行排序”,这样就实现了大规模数据的排序。当然对于分组时还可以行进行。

其中系统讲解构建大规模分布式系统的核心技术与实现方法,包含开源的Fourinone系统的设计与实现过程,手把手教你掌握分布式技术。通过学习这个系统的实现方法与相关的理论,可快速掌握分布式系统的理论并设计自己的分布式系统。

因为内容实在是太多了,所以小编只把部分知识点截图出来粗略的介绍了一下,每个小节都有更多细化的内容,希望大家能够学到知识。

本篇一共分为七个大章节,大家从头开始阅读就可以了。

第1章,概述

在概述分布式核心技术之前,我们有必要先概括阐述一-下分布式计算、并行计算、云计算等相关概念,以及市场上流行的相关技术产品,如Hadoop生态体系,然后再结合背景引出我们为什么要归纳出一个轻量级的分布式框架。本章为后续章节的背景。本章意在使读者对分布式技术话题的前因后果先有所了解。

由于只是概述,我们对涉及的分布式计算概念和Hadoop生态体系只是蜻蜓点水地带过,目的仅是让读者了解到这些内容大致是什么。

第2章,分布式并行计算的原理与实践

本章首先讲述分布式并行计算的各种设计模式和原理机制,并进一步说明Fourinone与市场上其他并行计算产品和技术的区别,最后手把手演示大量并行计算案例。

本章讲述的分布式并行计算思想、模式、技巧、实现,与编程语言无关,读者可以用多台计算机来尝试编程。

架构实战营 架构实战营 知乎_大数据

第3章,分布式协调的实现

分布式协调是分布式应用中不可缺少的,通常会设立专门的协调者角色,即将多机协调的职责从分布式应用中独立出来,以减少系统的耦合性和增强可扩展性。Apache的ZooKeeper、Google的Chubby都是分布式协调的实现者。Fourinone实际上可以单独当做ZooKeeper用,它使用最少的代码实现了ZooKeeper 的所有功能,并且力图做到功能更强、使用更简洁。

本章会从设计角度讲述分布式协调系统的实现原理,包括归纳出的API介绍,权限机制介绍,并详细阐述了在领导者选举机制上和Paxos算法的区别,最后再结合实践中的统一配置和集群管理等应用讲解demo,让读者有更直观的体会。

第4章,分布式缓存的实现

本章讲述小型缓存、大型分布式缓存的原理和实现机制,并且讲述经典的一致哈希算法原理,以及改进的基于日期key取模和分组算法去做集群负载均衡和扩容,最后讲述一个分布式Session的实现案例,以及相关的配置属性。

架构实战营 架构实战营 知乎_架构实战营_02

第5章,消息队列的实现

本章讲述了中间件和消息队列(MQ)的发展史JMS规范定义的发送/接收、主题订阅两种经典消息服务模式的机制原理,并详细举例说明如何在Fourinone中实现这两种经典模式。

第6章,分布式文件系统的实现

本章讲述如何使用FTTP去实现一个分布式文件系统,包括FTTP的架构原理和远程文件各种方式的访问和操作,以及整型数据处理等,包含了每一一步的具体操作,可帮助入门的读者快速上手。

在FTTP中通过FttpAdapter和FileAdapter实现文件I0的支持。其中,FttpAdapter 提供对远程文件的操作,FileAdapter 提供对本地文件的操作,两者的API和使用相似,这里主要说明FttpAdapter。

架构实战营 架构实战营 知乎_java_03

第7章,分布式作业调度平台的实现

在前面第2章介绍的分布式并行计算原理中,我们看到可以将工头工人程序部署到不同的机器_上运行,然后完成计算。但是,.当这样的并行计算应用非常多,而我们的机器数量有限时,我们需要排队依次来使用机器,第一个并行计算应用跑完了,再跑第二个应用,如果第一个并行计算应用只占部分机器,那么可以考虑同时跑第二个应用....这就涉及建立-个作业调度平台去完成。

我们知道Hadoop本身包含了作业调度的部分,按照Hadoop开发规范,开发好一个作业,打包后,Hadoop 会分发到相应的机器上去运行,但是实际上这仅仅是-种任务调度层面的实现,我们还需要资源层面的调度,比如对CPU、内存、带宽等的分配和管理。

本章会讲述调度平台的设计和实现,包括任务调度和资源调度的实现机制,各种资源调度算法,并以MPI调度器的为例讲述一个完整Demo,最后再讲述市场上常用的调度实现和框架,比如Torque、Mesos、Yarn 等。

架构实战营 架构实战营 知乎_架构实战营_04

【总结】:

1、作者想借Fourinone的讲解,来讲分布式,但全文明显一种偏向Fourinone,拉回,再偏的感觉。如果单纯的定性为Fourinone讲解,会更合适吧。

2、针对Fourinone的适应场景和怎么讲,讲的很详细,给出了足够的实践代码。

3、在框架设计层面,也给出了很多讲解,尤其是最后的作业调度实现上,很到位。

4、Fourinone看起来是个全面轻量的分布式框架包,这个值得研究一下。

5、如果不是针对Fourinone,本书价值中庸,作者本身做为工程经验为主的人员,理论应该是短板。