(2023.07.30 Sun @KLN)
计算高可用的设计目标是当出现硬件损坏,计算软任务仍然能够正常运行。其本质是通过冗余来规避部分故障的风险,而单台服务器无论如何都打不到这个目标,所以其设计思想课简单归结为:通过增加更多服务器来达到计算高可用。
计算高可用的架构和数据高可用的架构相似,差别在于不需要在后台做数据同步。
该架构设计的关键点:
- 任务在服务器上的执行
- 方式一:每个服务器都可以执行任务
- 方式二:特定服务器执行任务(“主机”),当该服务器出现故障,由系统挑选其他服务器执行任务
- 任务的重新执行
- 策略一:已经分配和执行并且执行失败的任务不做任何处理,系统只需要保证新的任务能够分配到其他非故障服务器上执行即可
- 策略二:设计任务管理器来管理计算任务,服务器执行完成任务后,需要向任务管理器反馈任务执行结果,管理器根据结果来决定是否需要将任务重新分配到另外的服务器上执行
主备架构 master-replica

计算高可用中最简单的架构。设计如下:
- 主机执行所有计算任务,如,读写数据、执行操作等
- 当主机故障,任务分配器不会自动将计算任务发送给备用机replica
- 如果主机恢复,则任务分配器继续将任务发送给主机
- 如果主机不能恢复,则人工干预,将replica升为主机,由任务分配器将任务发送给新主机;同时,需要人工增加新的机器作为备机
根据备机replica的状态不同,又可细分为冷备架构和温备架构:
- 冷备:replica服务器已经启动,业务系统没有启动,程序包和配置文件已经准备完毕。主机故障后,需要人工将备机的业务系统启动,将任务分配器的任务请求切换为发送给备机
- 温备:replica服务器已经启动,业务系统已经启动,只是不对外提供服务。主机故障后,人工只需要将任务分配器的任务请求切换为发送到备机即可。
一般情况下采用温备方案,尽管比冷备架构更耗费能源。
该架构适合适用人数不多的场景,内部管理系统、后台管理系统扥,或使用频率不高的业务,不适合在线的业务。
主从main-secondary

与主备架构不同,主从架构中的服务器都在工作,区别在于执行的任务不同,由任务分配器决定不同的服务器执行何种工作。
优点:
- 从机也执行任务,发挥了其硬件性能
缺点:
- 需要将任务分类,任务分配器的设计略复杂
集群:对称
前面介绍的两种架构,存在的主要问题是人工操作效率低、容易出凑、不能及时处理故障。在可用性要求严格的场景中,我们需要系统能够自动完成切换操作,于是引出高可用集群方案。
对称集群中每个服务器的角色都是一样的,可以执行所有任务。对称集群更通俗的叫法是负载均衡集群.

设计如下:
- 一般来说,任务分配器采用某种册页(随机、轮询等)将计算任务分配给集群中的不同服务器
- 集群中某台服务器故障后,任务分配器不再将任务分配给它,而分配给其他服务器执行
- 服务器恢复后,重新被分批任务
设计关键点:
- 任务分配器检测服务器工作状态
- 任务分配器选取分配策略
检测工作状态,常用的做法是在任务分配器和服务器之间通过心跳来传递信息,根据实际情况确定状态判断条件。
分配策略以随机和轮询为主。
集群:非对称

与对称集群不同,非对称集群中每个服务器的角色是不同的,承担不同的职责,以main-secondary为例,部分任务main执行,而部分任务secondary执行。
设计如下:
- 集群区分不同服务器的角色。例如通过Paxos算法选举,或者简单的选取当前存活服务器中节点ID最小的服务器作为main服务器
- 将不同任务发送给不同服务器
- 指定类型的服务器故障,则重新分配角色
对比对称集群,其设计复杂度体现在:
- 任务分配策略更复杂,将任务划分为不同类型并分配给不同角色的集群节点
- 服务器的角色分配策略更复杂,可能需要Paxos这类复杂算法实现Leader的选取
可参考ZooKeeper。
Reference
1 从零开始学架构-照着做,你也能成为架构师,李运华著,电子工业出版社
2 excalidraw
网友评论