上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
1.2 分布式算法的意义
客观世界充满着既独立、又需要协作的实体,如何让它们按照人类的意图运作,分布式算法发挥着重要的作用。例如,在多路处理器的计算机中,处理器之间是不共享高速缓存的,但无论进程在哪个处理器上执行,都能看到同样的数据,这是因为每个处理器对应的缓存控制器上都运行了一种叫作“一致性缓存”的算法。这个一致性缓存算法就是一种基于消息传递的分布式算法,只不过分布的尺寸仅限于单台计算机内部而已。
有些应用在本质上就是分布式的,因此需要分布式算法。例如,有一个数据分发系统,它只要求每个接收者都能一个不落地收到所有的数据包,但对数据包的接收顺序没有要求,在分布式算法中,这叫作“尽力广播”;而一个交易系统不仅要求每个正确的进程(即证券信息接收端)能收到所有的包,还要求收包顺序与发包顺序完全一致,在分布式算法中,这叫作“先进先出广播”。类似的系统数不胜数,它们本身就是一个分布式系统,所以需要使用分布式算法。
还有一些应用,本身并不要求分布式算法,但出于高可用、容错等目的而不得不使用分布式算法。例如,对于一个业务并不繁忙的交易系统,单台数据库节点或许就足以满足性能需求。但为了避免单台节点故障,导致交易业务受影响,往往需要部署多台数据库节点以实现高可用,这要求在每台数据库节点上存储的交易记录是完全相同的。这就要用到分布式算法中的共识算法。
下面介绍一个著名的“两将军”问题(Two Generals Problem),感受一下分布式共识算法的巨大作用。