- 应对场景:
相对于开发在一台计算机上运行的单个程序,如何让一个应用中的多个独立的程序协同工作是一件非常困难的事情。开发这样的应用,很容易让很多开发人员陷入如何使多个程序协同工作的逻辑中,最后导致没有时间更好地思考和实现他们自己的应用程序逻辑;又或者开发人员对系统逻辑关注不够,只是用很少的时间开发了一个简单脆弱的主协调器,导致不可靠的单一失效点。
- ZooKeeper使命:
在分布式系统中协作多个任务。一个协作任务指一个包含多个进程的任务。这个任务可以是为了协作或者是为了管理竞争。协作意味着多个进程需要一同处理某些事情,一些进程采取某些行动是的其他进程可以继续工作。比如,在典型的主-从工作模式中,从节点处于空闲状态时会通知主节点可以接受工作,于是主节点就会分配任务给从节点。竞争则不同,它指的是两个进程不能同时处理工作的情况,一个进程必须等待另一个进程。
- ZooKeeper工作方式
提供某种有序共享存储的组件
- 示例:主-从应用
一般在这种架构中,主节点进程负责跟踪从节点状态和任务的有效性,并分配任务到从节点。
1、主节点崩溃
如果主节点发送错误并失效,系统将无法分配新的任务或重新分配已失败的任务。
主节点崩溃,我们需要有一个备份主节点。备份主节点接管主要主节点的角色,进行故障转移,新的主要主节点需要能够恢复到旧的主要主节点崩溃时的状态。对于主节点状态的可恢复性,可以通过ZooKeeper获取。
状态恢复并不是唯一的重要问题。假如主节点有效,备份节点却认为主节点已崩溃。如主节点负载过高,告知消息任意延迟,备份主节点将会接管成为主要主节点,执行必要的程序,最终可能以主节点的角色开始执行,成为第二个主节点。
此情况成为“脑裂”:系统中两个或多个部分开始独立工作,导致整体行为不一致。
2、从节点崩溃
如果从节点崩溃,已分配的任务将无法完成
3、通信故障
如果主节点和从节点之间无法进行信息交换,从节点将无法得知新任务分配给它。
- 任务总结
1、主节点选取
主节点可以分配任务给从节点
2、崩溃检测
主节点必须具有检测从节点崩溃或失去连接的能力
3、组成员关系维护
主节点必须具有指导哪一个从节点可以执行任务的能力
3、元数据管理
主节点和从节点必须具有通过某种可靠的方式来保存和分配状态和执行状态的能力