高可用
2022-09-22 15:02:01 1 举报
AI智能生成
每个程序员都有一个成为架构师的梦想,高可用(High Availability)是每位码农在进行系统设计和代码编写时都不得不思考的重要环节
作者其他创作
大纲/内容
存储高可用
本质
通过将数据复制到多个存储设备,通过数据冗余的方式来实现高可用
复杂性
主要体现在如何应对复制延迟和中断导致的数据不一致问题
对任何一个高可用的存储方案,需要从以下几个方面去进行思考和分析
数据如何复制?
各个节点的职责是什么?
如何应对复制延迟?
如何应对复制中断?
常见的高可用存储架构有
主备
优点
对于客户端来说,不需要感知备机的存在,即使灾难恢复后,原来的备机被人工修改为主机后,对于客户端来说,只是认为主机的地址换了而已,无须知道是原来的备机升级为主机。
对于主机和备机来说说,双方只需要进行数据复制即可,无须进行状态判断和主备切换这类复杂的操作
缺点
备机仅仅只为备份,并没有提供读写操作,硬件成本上有浪费。
故障后需要人工干预,无法自动恢复
主从
优点
主从复制在主机故障时,读操作相关的业务可以继续运行
主从复制架构的从机提供读操作,发挥了硬件的性能
缺点
主从复制架构中,客户端需要感知主从关系,并将不同的操作发给不同的机器进行处理,复杂度比主备复制要高
主从复制架构中,从机提供读业务,如果主从复制延迟比较大,业务会因为数据不一致出现问题故障时需要人工干预
双机切换
主要解决的问题
主机故障后,无法进行写操作
如果主机无法恢复,需要人工指定新的主机角色
要实现一个完善的切换方案,必须考虑这几个关键的设计点
主备间状态判断
状态传递的渠道
是相互间互相连接,还是第三方仲裁
状态检测的内容
例如机器是否掉电、进程是否存在、响应是否缓慢等
切换决策
切换时机
什么情况下备机应该升级为主机?
切换策略
原来的主机故障恢复后,要再次切换,确保原来的主机继续做主机,还是原来的主机故障恢复后自动成为新的备机?
自动程度
切换是完全自动的,还是半自动的?
数据冲突解决
双机切换常见架构
互连式
互连式就是指主备机直接建立状态传递的渠道
缺点
如果状态传递的通道本身有故障(例如,网线被人不小心踢掉了),那么备机也会认为主机故障了从而将自己升级为主机,而此时主机并没有故障,最终就可能出现两个主机。
虽然可以通过增加多个通道来增强状态传递的可靠性,但这样做只是降低了通道故障概率而已,不能从根本上解决这个缺点,而且通道越多,后续的状态决策会更加复杂,因为对备机来说,可能从不同的通道收到了不同甚至矛盾的状态信息。
中介式
主备两者之外引入第三方中介,主备机之间不直接连接,而都去连接中介,并且通过中介来传递状态信息
开源方案已经有比较成熟的中介式解决方案,例如ZooKeeper和Keepalived。
模拟式
主备机之间并不传递任何状态数据,而是备机模拟成一个客户端,向主机发起模拟的读写操作,根据读写操作的响应情况来判断主机的状态
主主
两台机器都是主机,互相将数据复制给对方,客户端可以任意挑选其中一台机器进行读写操作
集群
复杂度
主机如何将数据复制给备机
备机如何检测主机状态
主机故障后,如何决定新的主机
分区
多个服务器组成一个集群,每台服务器都会负责存储一部分数据;同时,为了提升硬件利用率,每台服务器又会备份一部分数据。
数据分散集群的复杂点在于如何将数据分配到不同的服务器上
算法需要考虑这些设计点
均衡性
容错性
可伸缩性
计算高可用
主要设计目标是当出现部分硬件损坏时,计算任务能够继续正常运行。
因此计算高可用的本质是通过冗余来规避部分故障的风险,单台服务器是无论如何都达不到这个目标的。
因此计算高可用的本质是通过冗余来规避部分故障的风险,单台服务器是无论如何都达不到这个目标的。
计算高可用的设计思想很简单:通过增加更多服务器来达到计算高可用。
计算高可用架构的设计复杂度主要体现在任务管理方面,即当任务在某台服务器上执行失败后,如何将任务重新分配到新的服务器进行执行
计算高可用架构设计的关键点
哪些服务器可以执行任务
任务如何重新执行
0 条评论
下一页