1. 计算机系统架构
架构,又名软件架构,是一个系统的草图,描述的对象是直接构成系统的抽象组件,包括系统的组件、模块、接口以及它们之间的关系和交互方式等方面。
在一个分布式系统中,需要考虑如何将不同计算机节点之间的代码和数据进行组织,如何处理分布式环境下的通信和同步问题,以及如何保证系统的可伸缩性、容错性和可维护性等方面。因此,选择适合的软件架构可以有助于解决这些问题,并显著提高分布式系统的可靠性和性能。
2. 分布式系统
分布式系统是由多台计算机节点通过网络连接相互协作,共同完成一定任务的计算机系统。分布式系统的特点包括高可用性、可扩展性、容错性和并发性等。
在分布式系统中,每个节点都是自治的,有自己的计算资源和数据存储,节点之间通过消息传递或共享数据来完成任务。分布式系统通常由多个分布式组件或服务组成,这些组件或服务分布在不同的节点上,并通过分布式协议协调彼此之间的交互。
分布式与集群一样,都是集中多个代理设备进行工作,但集群是将全部的服务器都集中起来做相同的事情,而分布式是将一种业务拆分为多个子部分,每个子部分分布在不同的服务器上,因此每台服务器进行的是不同的工作。
3. 分布式选举算法
(1)Bully算法
目标:选择ID最大的节点成为主节点。
算法思想:
1. 假设每个节点都知道集群中其他节点的ID;
2. 每个节点都判断自己的ID是否是所有节点中最大的。如果是,节点将直接向其他节点发送Victory消息,宣布自己成为主节点。如果自己不是所有节点中ID最大的,节点将向所有比自己ID大的节点发送Election消息,并等待其他节点的回复;
3. 如果节点收到来自比自己ID小的节点发来的Election消息,节点将回复一个Alive消息,告知其他节点自己的ID更大;
4. 如果在给定的时间范围内,本节点没有收到其他节点回复的Alive消息,该节点将成为主节点,并向其他节点发送Victory消息。如果该节点接收到来自比自己ID大的节点的Alive消息,则将等待其他节点发送Victory消息。
(2)Raft算法
目标:由集群中的每个节点投票选举主节点,第一个获得超过一半选票的节点成为主节点。
算法思想:
1. 集群中所有节点随机生成一个时间间隔,若在该时间间隔内没有接收到其他节点的心跳消息,则该节点成为候选节点;
2. 候选节点向其他节点发送投票请求,包括自己的任期号和候选节点的ID;
3. 其他节点进行投票,如果该节点的任期号大于等于候选节点的任期号,则该节点同意投票,并将自己的任期号返回给候选节点;
4. 若候选节点收到超过一半的投票,则该节点成为领导者,并向其他节点发送心跳消息;若候选节点未收到足够多的投票,则视为选举失败,候选节点增加自己的任期号,并重新执行选举过程。
(注:由于集群中节点成为主节点的条件为获得超过一半的选票,因此总结点数一般选为奇数,以防止出现两个节点均获得一半选票的情况)
(3)ZAB算法
目标:由含有数据最新的节点成为主节点。
算法思想:
1. 节点随机生成一个初始的选举ID,并以此ID作为自己的提议;
2. 节点向其他节点发送提议消息,消息中包含自己的选举ID和zxID,其中zxID为节点中包含数据的ID,数据越新则zxID越大;
3. 其他节点接收到提议消息后,比较提议中的选举ID和自己的选举ID,如果提议中的选举ID大于自己的选举ID,则回复“赞成”消息,否则回复“反对”消息;
4. 发送提议消息的节点收到超过半数的“赞成”消息,则该节点成为领导者,并将自己的zxID与该消息一同发送给其他节点;若候选节点未收到足够多的“赞成”消息,则视为选举失败,候选节点增加自己的任期号,并重新执行选举过程。
(注:与Raft算法类似,为了防止出现两个节点均获得一半选票的情况,集群总结点数量一般选为奇数)