3.1 协调架构原理简介
Fourinone对分布式协调的实现,是通过建立一个domain/node两层结构的节点信息去完成,domain可以是分类或者包,node可以是具体属性,domain和node都是根据需求设计命名,比如可以将domain命名为“a.b.c…”表示一个树型类目。一个domain下可以有很多个node,每个node只指定一个domain,可以通过domain返回它下面所有的node。domain不需要单独建立,通常在建立node时,如果不存在domain会自动创建。如果domain下没有node了,该domain会自动删除。如果删除domain,该domain下面node也都会删除。每个node下可以存放一个值,可以是任意对象。所有的节点信息存放在ParkServer里,ParkServer提供协调者的功能。如图3-1所示。
图3-1 domain/node结构图
从图3-1可以看到,其他分布式进程可以通过ParkServer的用户接口ParkLocal,对节点进行增加、修改、删除、指定心跳、指定权限等操作,并且结合ParkServer提供同步备份、领导者选举、过期时间设置等功能,共同来实现众多分布式协调功能。
我们举个例子,说明两个分布式应用完成协调功能的流程:
1)分布式应用A通过ParkLocal在ParkServer上创建一个domain/node的节点,并且在节点里存放相应的value,这个节点以及它的value值代表分布式应用A的某种协调信息,它存放在ParkServer上用于向分布式应用B分享。
2)分布式应用B通过ParkLocal操作ParkServer,对它上面的分布式应用A建立的这个domain/node节点进行监听,如果节点value发生变化,那么分布式应用B可以获取到这个value,并进行相应的业务处理,这样便将各自独立的分布式应用A和B协调了起来。
3)由于ParkServer保存着用于协调的节点和信息,为了防止ParkServer宕机导致整体故障,ParkServer配置为一主多备的关系,互相同步信息,在故障时可以进行领导者选举,切换到备用ParkServer上继续提供协调服务。
分布式协调的场景还有很多(我们在3.6节会详细讲解),例如:
1)分布式配置,多个机器的应用公用一个配置信息,并且挂掉能够通过领导者选举进行恢复;
2)分布式锁,多个机器竞争一个锁,当某个机器释放锁或者挂掉,其他机器可以竞争到锁,继续执行任务;
3)集群管理,集群内机器可以互相感知并进行领导者选举;
4)多个节点,每个节点具有读写权限不一样的操作。