2021-12-21 18:02

「高可用架构设计」的入门秘籍


前言


伴随着互联网的诞生和发展,高可用架构出现并不断完善。互联网早期许多系统只依赖于一台计算机来处理请求,所以经常出现「服务不可用」的情况。为了保持系统正常运行,出现将负载分配给能够满足需求的多台计算机的高可用架构。

工程师们反复使用并持续优化这些解决方案,以适应自己的需求。本文主要介绍高可用架构的演进常用高可用架构优缺点适用场景

高可用性(HA)用来描述计算机系统或其组件在一段时间内连续运行的能力。政府、银行和其他合规监管行业通常需要数据计算和存储的高可用性,系统必须能够自动从服务器或组件故障中恢复。为了实现系统的可靠性,三个系统设计的原则可以用来实现高可用性:消除单点故障可靠的故障切换故障检测能力。在分布式系统中可以通过将多个冗余节点连接为一个集群来实现这一点,其中每个节点都能够进行故障检测和恢复。

高可用架构一般分为计算高可用存储高可用,主要手段是数据和服务的冗余备份及失效转移。


计算高可用


计算高可用主要分为主备模式主从模式集群模式。三种模式都是通过计算模块冗余方式来规避单点故障的风险,不同的是三种方案故障检测及恢复方式不同,系统可用性也不一样。

主备计算高可用
主备高可用架构任意时刻只有主机对外提供运算任务,备用机器根据运行状态分为冷备和温备。当系统出现故障时需要人为进行服务切换及故障恢复。此种架构实现方式最简单,主备之间不需要交互,不会为系统引入额外复杂度。但是此种方式主备服务无法无缝切换,可用性无法得到保证。

主备计算高可用

主从计算高可用

主从模式和主备模式区别是从机也要执行一些任务,任务调度器负责将任务分类并发送给主机或从机。当主机出现故障时,如果主机不能够自动恢复,则需要人工操作,将原来的从机升级为主机,增加新的机器作为从机,新的从机准备就绪后,任务分配器继续按照原有的设计策略分配任务。主从模式发挥了从机的运算性能,可以减轻主机的运算压力,但是需要加入任务调度功能,实现会复杂一些。

主从计算高可用

集群计算高可用

集群模式是将服务器组合在一起以作为一个统一的系统对外提供服务,也称为故障转移集群,它们共享相同的存储但使用不同的网络。对于有负载均衡功能的集群每个节点具有相同的功能,因为它们可以运行它们所支持的主系统的相同工作负载。如果集群中的服务器出现故障,另一台服务器或节点可以立即接管,以确保集群支持的服务保持正常运行。使用高可用性集群有助于确保关键系统没有单点故障,并减少或消除停机时间

高可用计算集群

一个高可用集群系统必须有一个精心设计的、预先设计好的负载均衡机制,以在集群节点之间分配运算任务。负载均衡器对运算节点进行持续的健康检查,以确保它们可以处理请求。负载均衡机制必须在节点故障的情况下指定确切的故障转移过程。

集群模式解决了故障检测、故障转移及故障修复的问题,能够最大化系统的可用性,但也引入了系统复杂度。在高可用性集群中必须防止的关键情况之一是“脑裂”。当所有私有内部连接同时被切断,但集群节点仍在运行时,就会发生“脑裂”。在这种情况下,集群的所有节点可能会错误地认为所有其他节点都已关闭,并尝试启动其他节点已经在运行的服务。对于同一服务的多个版本,所有这些版本都可能暴露给用户,并可能导致数据损坏,并且向一个HA集群添加过多的虚拟机和主机会导致负载平衡变得困难。


存储高可用


存储高可用通过数据复制,来实现存储冗余,进而实现高可用。存储高可用是系统设计的关键点及难点,需要保证系统的数据一致、可用、分区容忍。存储高可用常用的架构有主从模式集群模式

主从模式中,主机负责读写并定期复制数据给从机,从机仅承担读操作,可以减轻主节点的访问压力。一旦主机宕机,可以通过人工手段,将其中一个从节点切换为主节点。主从模式故障时需要人工干预,并且客户端需要感知主从关系,并将不同的操作发给不同的机器进行处理。在此模式下每个机器上存储的都是全量数据,但是单机的数据存储量总是有上限的,所以存在存储容量的限制,并且不容易扩容。和主从运算高可用类似,当主机出现故障时,如果主机不能够自动恢复,则需要人工操作,可用性无法得到保证。

主从高可用存储模式

  • 集群模式由多个节点组成存储集群,每个节点负责存储部分数据,Client存储数据时,数据根据分片算法被路由到不同的存储节点。集群节点间运行共识算法,当有节点宕机时,共识算法会选举新的主节点并来调度集群的数据存储。基于共识复制的系统,写入被提议到一个节点,然后被复制到一定数量的其他节点。一旦大多数节点确认写入,就可以提交。它可以保证一致性,也可以提供高可用性。从节点可以用来读取数据,从而减少主节点的访问压力。

集群高可用存储模式

集群模式通常添加某种路由技术,将客户端定向到正确的站点来处理他们的请求。分片路由器按特定算法拆分数据,常用算法有取模、检索表、一致性哈希等,并将这些段分布在多个站点之间,每个节点可以视为一个独立的子集,针对子集,仍然需要保证高可用。分片可以在多台机器之间分配工作负载,提高吞吐量,并通过容忍更多的部分故障和消除单点故障来创造更大的弹性。

总结

在过去的几十年里,系统可用性架构取得了长足的进步,从主备模式、主从模式到高可用集群,架构师不断在CAP原则的基础上寻求适合自己应用场景解决方案。主从模式主要应用在需要快速写入的应用场景,集群模式适用于需要一致性的应用场景。现在很多系统服务都是在全球范围内部署,服务永远都不会停止,我们还在研究更好的可用性和更大规模的架构。

马耀耀

趣链科技数据网格实验室  BitXMesh后端开发工程师

本文链接:https://www.8btc.com/media/6717292
转载请注明文章出处

评论
登录 账号发表你的看法,还没有账号?立即免费 注册
下载
分享
收藏
阅读
评论
点赞
上一篇
下一篇