前言
在上一篇文章我们讨论了单机运算能力不足的问题,了解了分布式系统也是基于分治思想来实现运算分布式化,达到提高系统整体算力的最终目标。分布式系统的出现弥补了集中式系统在运算和存储方面存在的不足,做到了集中式系统不方便实现甚至做不到的事,但是有一件事是包括分布式系统在内的所有系统都可能遇到的,那就是宕机。让分布式系统保证不宕机则是本篇的主题。
这是系列文章的第四篇,讨论分布式系统如何达到高可用的目标。分布式系统具有的扩展性提升了系统整体算力和存储能力,解决了这两个核心问题后要考虑的就是如何让系统平稳地运行下去,使我们能够持续地感受到分布式系统的强大,我们管这份强大叫高可用性。实现高可用性的唯一策略便是备份副本。
备份副本
一个系统的软实力再强大、应用的设计思想再精妙,都挡不住硬条件的不足(如机房停电、网络故障等)对自身的打击,物理设备因各种事故瘫痪的可能性时刻存在,所以要想让一个系统具有高可用性只有一个方法——副本(Replication)。一台机器在故障后马上将服务切换到副本机器上,才能实现服务不断。
副本(Replication
)
副本(Replication
)是分布式系统必备的两种能力之一(另一种是分片(partition/sharding
)),对于海量数据来说,replication
一方面可以使系统具有高可用性,另一方面还可以提升读取的效率。
假设我们从来没有听说过分布式系统和副本策略,单单给一个思路:通过复制一份原来的系统来提高系统可用性。那么我们最容易往下想的思路是:以原本提供服务的系统为蓝本,复制出一份副本备用(standby
),蓝本持续提供服务,当蓝本出现故障无法工作时,失效转移(failover
)到副本继续对外提供服务,不使系统陷入瘫痪。
上述思路提到的蓝本、副本很容易可以看出来是一主一从的身份,很多算法都有使用这种理念设计高可用性算法,它有很多不同的叫法:leader & follower
、master & slave
、active & standby
,本篇统一叫master & slave
。master & slave
的关系并非永久不变的,failover
操作会转换二者身份。
replication有三种玩法,接下来会通过推导来串讲这三种玩法。
首先,上述的master & slave
是第一种类型,我们叫它单主复制(single leader replication
),或者另一个更生动的叫法:一主多从。