高可用架构设计

1. 引言

软件系统有三个追求:高性能、高并发、高可用,俗称三高。三者既有区别也有联系,门门道道很多,本篇讨论高可用

高可用技术的重要性在于保证系统的连续可用性,提高系统的稳定性和可靠性。它可以应对高并发和大规模负载,支持持续交付和快速迭代。实际应用场景涵盖了各个行业和领域,关乎到企业的业务运营和发展。

2. 高可用性概述

2.1. 定义

高可用性是指系统能够在面对故障、意外事件或负载增加时保持稳定运行,持续提供可用的服务的能力,是现代系统设计和架构中的一个重要目标。

2.2. 重要性

高可用性是现代系统设计中的一个重要目标,它能够保障业务连续性、提高用户体验、确保数据安全性,并增强企业的品牌声誉和用户的信任。在竞争激烈的市场中,高可用性对于现代系统的重要性不可忽视。

举个例子:用户面对2个系统,一个全年不停机、无故障;另一个隔三差五出线上事故、宕机,用户肯定选择前者,

3. 衡量指标

3.1.1. 系统可用性(Availability)

可用性是衡量系统能够正常运行并提供服务的程度。常用的可用性指标是系统的正常运行时间与总运行时间的比例(通常以百分比表示),例如,99.99%的可用性表示系统每年只有不到1小时的停机时间

其中,

MTTF 是 Mean Time To Failure,平均故障前的时间,即系统平均能够正常运行多长时间才发生一次故障。系统的可靠性越高,MTTF 越长。(注意:从字面上来说,看上去有 Failure 的字样,但其实是正常运行的时间。)

MTTR 是 Mean Time To Recovery,平均修复时间,即从故障出现到故障修复的这段时间,这段时间越短越好。

业界衡量系统可用性的方式主要有2种:

  • 时间纬度的系统可用性。
  • 请求纬度的系统可用性。
3.1.1.1. 时间纬度的系统可用性(常用)
Availability = 程序正常运行时间 / (程序正常运行时间 + 系统故障时间)

时间维度的系统可用性,就是我们经常提起的X个9

X个9表示以年/月/日等为单位,在指定的时间范围内,系统可以正常使用时间与总时间之比。 例如,我们以1年为时间单位,可以得出:

  • 3个9:(1-99.9%)36524=8.76小时,表示该系统在连续运行1年时间里最多可能的业务中断时间是8.76小时。
  • 4个9:(1-99.99%)36524=0.876小时=52.6分钟,表示该系统在连续运行1年时间里最多可能的业务中断时间是52.6分钟。
  • 5个9:(1-99.999%)36524*60=5.26分钟,表示该系统在连续运行1年时间里最多可能的业务中断时间是5.26分钟。

根据如上的定义,我们可以总结出一张表格:

可用性等级

故障时间(以年为单位)

故障时间(以月为单位)

故障时间(以日为单位)

90%

(1-90%)*365天 = 36.5天

(1-90%)*30天 * 24小时 = 72小时

(1-90%)*24小时= 2.4小时

99%

(1-99%)*365天 = 3.65天

(1-99%)*30天 * 24小时 = 7.2小时

(1-99%)*24小时 * 60分钟= 14.4分钟

99.9%

(1-99.9%)*365天 * 24小时= 8.76小时

(1-99.9%)*30天 * 24小时 * 60分钟= 43.8分钟

(1-99.9%)*24小时 * 60分钟= 1.44分钟

99.99%

以此类推

...

...

99.999%

...

...

...

3.1.1.2. 请求纬度的系统可用性:
Availability = 成功请求数量 / 请求总数量

3.1.2. 容错性(Fault Tolerance)

容错性是指系统能够在出现组件故障或异常情况时继续正常运行的能力。评估容错性的指标可以是系统的恢复时间(Recovery Time Objective,RTO),即系统从故障到完全恢复正常运行所需的时间

3.1.3. 可恢复性(Recoverability)

可恢复性是指系统能够在故障后迅速恢复到正常运行状态的能力。评估可恢复性的指标可以是系统的恢复点目标(Recovery Point Objective,RPO),即系统从故障点到数据和服务完全恢复的时间和数据损失程度。

4. 考虑的因素

4.1. 成本

系统可用性越高,对你的系统要求也越高,那么你付出的成本和代价也会越高。对于可用性越高的系统,那么对于你服务器的存储、网络、软件等要求也就越高。而对于一些服务并不需要达到那么高的可用性,因此就可以为这些服务设置较低的可用性目标。

4.2. 业务容忍度

系统可用性也需要考虑业务的容忍度。

对于金融行业服务来说,任何一个请求的失败都有可能带来资金的损失,因此对于这类的服务,对于错误的容忍度是比较低的,也就要求系统可用性较高。

对于常用的社交软件而言,例如我们使用的评论区功能/弹幕功能,对于这些应用来说,即使请求一次失败也是 可以接受的,下次再请求成功就可以了。因此对于这些业务来说,业务容忍度较高,系统可用性不要求一定要很高。

高可用架构设计需要在成本和业务容忍度中取得一个"平衡"

5. 核心设计思想

  • 做好研发规范,系统都是研发人员设计和编码写出来的,因此首先要对研发层面有一个规范和标准
  • 做好容量规划和评估,主要是让开发人员对系统要扛住的量级有一个基本认知,方便进行合理的架构设计和演进。
  • 做好服务层面的高可用,主要是负载均衡、弹性扩缩容、异步解耦、故障容错、过载保护等。
  • 做好存储层面的高可用,主要是冗余备份(热备、冷备)、故障转移(确认,转移,恢复)等。
  • 做好运维层面的高可用,主要是发布测试、监控告警、容灾、故障演练等。
  • 做好产品层面的高可用,主要是兜底策略。
  • 做好应急预案,主要是在出现问题后怎么快速恢复,不至于让我们的异常事态扩大。

6. 常见技术手段介绍

常见的实技术手段包括负载均衡、冗余备份故障转移、监控和告警和容错设计

6.1. 负载均衡

6.1.1. 简介

将系统的流量均匀地分散到多个服务器或节点上,确保每个服务器的负载均衡,避免单一节点过载,提高系统的性能和可靠性

6.1.2. 负载均衡算法

算法名称

描述

适用场景

轮询 (Round Robin)

请求依次分发给每个服务器,按照顺序循环轮询

服务器性能相近、请求量均匀分布

加权轮询 (Weighted Round Robin)

根据权重比例分发请求给服务器

服务器性能不均衡、某些服务器处理能力更强

最少连接 (Least Connection)

将请求发送到当前连接数最少的服务器上,确保请求在服务器上的分布均衡

每个连接的处理时间不同

IP哈希 (IP Hash)

根据客户端的IP地址将请求分发给特定的服务器,保持会话的连续性

需要保持会话状态或会话一致性的应用程序

最短响应时间 (Least Response Time)

将请求发送到响应时间最短的服务器上,根据服务器的平均响应时间选择最快的服务器处理请求

服务器处理能力不同、响应时间差异较大

随机 (Random)

随机选择一个服务器处理请求

请求分布均匀,不需要考虑服务器负载差异

哈希 (Hash)

根据请求的特定属性(如URL、Cookie等)进行哈希计算,将相同哈希值的请求分发给同一台服务器,保持请求的一致性

需要特定请求的一致性,如会话保持

加权最小连接 (Weighted Least Connection)

结合权重和连接数,选择连接数最少且权重最高的服务器处理请求

服务器性能不均衡且每个连接的处理时间不同

最短预测延迟 (Least Predicted Delay)

根据服务器的预测延迟选择最快的服务器处理请求

服务器响应时间具有预测性,可以根据历史数据进行预测

这些负载均衡算法根据不同的需求和条件,提供了各种选择。在设计高可用架构时,需要根据系统的特点和负载分布选择合适的负载均衡算法,以实现负载的均衡和优化系统的性能。

6.1.3. 常见负载均衡技术

  1. 基于硬件的负载均衡:这种技术使用专门的硬件设备(如负载均衡器)来分发流量。负载均衡器通常位于网络前端,通过监控服务器的负载情况和性能指标,在多个服务器之间均匀地分配请求。硬件负载均衡器具有高性能、高可靠性和高并发处理能力,适用于大型系统和高流量环境。
  2. 基于软件的负载均衡:这种技术使用软件来实现负载均衡功能。常见的软件负载均衡器包括Nginx、HAProxy和Apache等。软件负载均衡器可以在应用层或传输层进行负载均衡,根据不同的算法(如轮询、最少连接数或响应时间)来分配请求。它们通常具有灵活的配置选项和易于扩展的特点。
  3. 基于DNS的负载均衡:这种技术通过DNS来实现负载均衡。当客户端发起请求时,DNS服务器返回一个与请求相对应的服务器IP地址。通过将多个IP地址与同一域名关联,DNS负载均衡可以将请求分发到不同的服务器上。DNS负载均衡具有简单和易于实现的优点,但缺点是无法动态调整负载分配。
  4. 内容分发网络(CDN):CDN是一种分布式的负载均衡解决方案,通过将静态和动态内容缓存在全球各地的边缘节点上来分发流量。当用户请求内容时,CDN会根据用户的位置选择最近的边缘节点来提供内容。CDN可以大大减少延迟和带宽使用,提高系统的性能和可用性。

6.2. 数据备份

6.2.1. 简介

采用备份服务器、热备份或冷备份等方法,将系统的数据和功能复制到备份系统,当主系统发生故障时,可以快速切换到备份系统,保证系统的连续性和可用性

6.2.2. 具体方案

在高可用性架构中,常见的数据备份方式包括热备份和冷备份

  • 热备份(Hot Backup)
    热备份是在系统正常运行期间进行的数据备份。它基于实时或定期的备份策略,将数据实时复制到备用存储设备中,确保数据的冗余性和可靠性。在系统故障或灾难发生时,可以快速切换到备份设备,并迅速恢复数据,减少系统的停机时间和数据丢失风险。
  • 冷备份(Cold Backup)
    冷备份是在系统停机或处于非活动状态时进行的数据备份。它涉及到备份整个系统或关键数据,通常在系统维护窗口期间进行。冷备份能够提供完整和一致的备份数据,但恢复时间较长,需要系统重启和数据导入。

相对于热备份而言,冷备份的备份过程对正常的数据源操作有较小的影响。当主要数据源发生故障时,需要将备份数据还原到备用设备上,然后再将服务切换到备用设备上,因此冷备份的恢复过程可能需要一些时间。

6.3. 故障转移

6.3.1. 简介

在高可用架构设计中,故障转移技术起着至关重要的作用。它可以帮助系统实现快速的故障检测和转移,从而减少系统停机时间,提高系统的可用性和可靠性

6.3.2. 常见的故障转移技术

  1. 心跳监测:心跳监测是一种基本的故障检测和转移机制。它通过周期性发送心跳信号来监测主节点的可用性。备用节点会监听这些心跳信号,一旦检测到主节点失效,就会接管主节点的工作负载。这种机制通常用于主备模式的故障转移。
  2. 故障切换:故障切换是一种手动或自动触发的故障转移机制。当主节点发生故障时,管理员可以手动切换到备用节点。自动故障切换则是通过监控和自动化工具实现的,当监测到主节点故障时,自动将工作负载迁移到备用节点上。
  3. 负载均衡器:负载均衡器是一种常用的故障转移技术。它通过将请求分发到多个服务器上,以均衡系统的负载。当某个服务器发生故障时,负载均衡器会自动将请求重定向到其他可用服务器上,确保服务的连续性和可用性。
  4. 数据复制和同步:数据复制和同步是一种常见的故障转移技术,特别适用于数据库和存储系统。通过将数据实时或定期复制到备用设备上,并保持同步,一旦主节点发生故障,备用节点可以接管数据服务,保证数据的可用性和一致性。
  5. 容器编排技术:容器编排技术,如Kubernetes,提供了故障转移和容灾功能。它可以自动监测和管理容器集群中的节点和服务,一旦发现节点故障或服务失效,会自动转移工作负载到其他健康节点,确保应用的连续运行。

6.4. 监控和告警

6.4.1. 简介

监控和告警是保障高可用性的守护者,它们可以无时无刻地监测系统的脉搏,发现潜在的问题和异常情况,并在关键时刻发出警报,以便及时采取行动,确保系统始终保持稳定和可用。

6.4.2. 具体方案

  1. 定义关键指标和阈值:确定系统的关键指标和性能指标,如服务器负载、响应时间等,并为每个指标设置适当的阈值。阈值应该根据系统需求和性能标准进行定义,超过阈值时触发告警。
  2. 选择合适的监控工具和系统:根据系统的特点和需求,选择适合的监控工具和系统。常见的监控工具包括Prometheus、Nagios、Zabbix等。确保监控工具能够实时收集和展示关键指标的数据,并提供告警功能。
  3. 配置监控项和告警规则:在监控工具中配置监控项和告警规则。设置监控项以收集系统指标和性能数据,同时设置告警规则,根据阈值和异常条件触发相应的告警通知。
  4. 设置告警通知方式:选择适当的告警通知方式,确保相关人员能够及时收到告警信息。常见的告警通知方式包括电子邮件、短信、即时通讯工具等。确保告警通知能够及时传达给相关人员,以便他们能够快速响应和处理问题。
  5. 告警响应和故障处理:设立明确的告警响应流程,确保接收到告警后能够及时响应和处理。指定责任人和相应的行动计划,确保故障能够在最短的时间内得到处理和解决。
  6. 持续优化和演进:定期回顾和评估监控和告警系统的效果,并根据实际情况进行调整和优化。根据系统的演化和需求变化,不断改进监控策略和配置,以确保系统的高可用性和稳定性。

6.5. 容错设计

6.5.1. 简介

任何服务,一定会存在失败的情况,不可能有 100% 的可用,服务在线上运行过程中,总会遇到各种各样意想不到的问题会让你的服务出现状况。为此,我们的设计建议遵循"design for failure"的设计原则,设计出一套可容错的系统,需要做到尽早返回、自动修复

6.5.2. 核心思想

  • 遵循 fail fast 原则
    Fail fast 原则是说,当我们的主流程的任何一步出现问题的时候,应该快速合理地结束整个流程,尽快返回错误,而不是等到出现负面影响才处理。
  • 具备自我保护的能力
    当我们依赖的其他服务出现问题的时候,要尽快的进行降级、兜底等各种异常保护措施,要避免出现连锁反应导致整个服务完全不可用。比如当我们依赖的数据存储出现问题,我们不能一直重试从而导致数据完全不可用

6.6. 其他

相关技术很多,诸如 限流、降级、熔断、预案、回滚、超时与重试...在此不在展开

7. 总结

高可用架构设计需要综合运用多种技术和策略,以实现系统的高可用性和可靠性。根据具体的需求和场景,选择和结合合适的技术,能够有效地提升系统的性能、可用性和容错性,确保持续的业务运行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/140275.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue2按需导入Element(vite打包)

1.安装element 说明:-S是生产依赖。 npm install element-ui2 -S 2.安装babel-plugin-component 说明:-D是开发模式使用。 npm install babel-plugin-component -D 3. vite.config.js 说明:借助 babel-plugin-component ,我们可…

华为的干部管理和人才管理实践精髓(深度好文,收藏)

(本文摘自谢宁专著《华为战略管理法:DSTE实战体系》,欢迎购买) 1997年,在《华为基本法》的起草过程中,起草小组的一位人大教授问任正非:“任总,人才是不是华为的核心竞争力?”任正非的回答出人…

在Spring Boot中使用进程内缓存和Cache注解

在Spring Boot中使用内缓存的时候需要预先知道什么是内缓存,使用内缓存的好处。 什么是内缓存 内缓存(也称为进程内缓存或本地缓存)是指将数据存储在应用程序的内存中,以便在需要时快速访问和检索数据,而无需每次都从…

记录--让我们来深入了解一下前端“三清”是什么

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前端“三清” 在前端开发中,我们经常听到关于“三清”的说法,即 window、document、Object。这三者分别代表了 BOM(浏览器对象模型)、DOM(文档对象模型)以及 JS 的顶层对象。在…

C/C++轻量级并发TCP服务器框架Zinx-游戏服务器开发006:基于redis查找玩家姓名+游戏业务实现总结

文章目录 1 Redis的安装与API的使用1.1 安装目录及环境变量1.2 设置远程客户端连接和守护进程1.3 启动redis1.4 Hiredis API的使用1.5 我的动态库和头文件 2 Redis的使用2.1 初始化时候2.2 结束的时候 3 测试4 Makefile5 游戏业务总结 1 Redis的安装与API的使用 1.1 安装目录及…

为什么UI自动化难做?—— 关于Selenium UI自动化的思考

在快速迭代的产品、团队中,UI自动化通常是一件看似美好,实际“鸡肋”(甚至绝大部分连鸡肋都算不上)的工具。原因不外乎以下几点: 1 效果有限 通常只是听说过,就想去搞UI自动化的团队,心里都认…

【数据分享】2021-2023年我国主要城市逐月轨道交通运营数据

以地铁为代表的轨道交通是大城市居民的主要交通出行方式之一,轨道交通的建设和运营情况也是一个城市发展水平的重要体现。本次我们为大家带来的是2021-2023年我国主要城市的逐月的轨道交通运营数据! 数据指标包括:运营线路条数(条…

浅谈掌动智能验收测试主要服务内容

所谓验收测试是对软件的功能性、性能效率、兼容性、易用性、可靠性、信息安全性、维护性、可移植性进行测试,对产品说明、用户文档集进行审阅,为科研项目、信息工程项目等进行第三方验收评测,交付验收测试报告。本文将介绍掌动智能验收测试主…

BlendTree动画混合算法详解

【混合本质】 如果了解骨骼动画就知道,某一时刻角色的Pose是通过两个邻近关键帧依次对所有骨骼插值而来,换句话说就是由两个关键帧混合而来。 那么可不可以由多个关键帧混合而来呢?当然可以。 更多的关键帧可以来自不同的动画片段&#xf…

weblogic集群配置信息,IIOP问题解决,节点配置管理

第一、创建域的时候,管理服务器,受管服务器,选择管理服务器,设置端口9001,其他默认下一步即可。 第二、启动管理服务器,打开控制台,增加服务器,集群如图,如果这两部有问…

RT-DETR算法优化改进:Backbone改进 | HGBlock完美结合PPHGNetV2 GhostConv

💡💡💡本文独家改进: GhostConv助力RT-DETR ,HGBlock与PPHGNetV2 GhostConv完美结合 推荐指数:五星 HGBlock_GhostConv | 亲测在多个数据集能够实现涨点 RT-DETR魔术师专栏介绍: https://blog.csdn.net/m0_63774211/category_12497375.html ✨✨✨魔改创新RT-…

【FPGA】十进制计数器 | 实现 4-bit 2421 十进制计数器 | 有限状态机(FSM)

目录 Ⅰ. 实践说明 0x00 十进制计数器 0x01 有限状态机(FSM) Ⅱ. 实践部分 0x00 4-bit 2421 十进制计数器 Ⅰ. 实践说明 0x00 十进制计数器 十进制计数器是一种以十进制运算的计数器,从 0 数到 9,然后返回 0 状态。由于它需…

吃透 Spring 系列—IOC部分

目录 ◆ 传统Javaweb开发的困惑 -传统Javaweb开发代码分析-用户模块 -传统Javaweb开发困惑及解决方案 ◆ IoC、DI和AOP思想提出 - IoC 控制反转思想的提出 - DI 依赖注入思想的提出 - AOP 面向切面思想的提出 - 框架概念的出现 - 思想、框架和编码关系 ◆ Spring框架…

11-13 周一 同济子豪兄CNN卷积神经网络学习记录

11-13 周一 同济子豪兄CNN卷积神经网络学习记录 时间版本修改人描述2023年11月13日14:02:14V0.1宋全恒新建文档2023年11月13日19:05:29V0.2宋全恒完成 大白话讲解卷积神经网络的学习 简介 为了深入理解CNN,进行B站 同济子豪兄深度学习之卷积神经网络的学习. 主要内…

如何在电脑和手机设备上编辑只读 PDF

我们大多数人更喜欢以 PDF 格式共享和查看文件,因为它更专业、更便携。但是,通常情况下您被拒绝访问除查看之外的内容编辑、复制或评论。如果您希望更好地控制您的 PDF 或更灵活地编辑它,请弄清楚为什么您的 PDF 是只读的,然后使用…

NLP在网安领域中的应用(初级)

NLP在网安领域的应用 写在最前面1. 威胁情报分析1.1 社交媒体情报分析(后面有详细叙述)1.2 暗网监测与威胁漏洞挖掘 2. 恶意软件检测2.1 威胁预测与趋势分析 3. 漏洞管理和响应4. 社交工程攻击识别4.1 情感分析与实时监测4.2 实体识别与攻击者画像构建4.…

网络编程 初探windows编程

目录 一、什么是Winodws编程 二、开发环境搭建以及如何学习 三、VA助手安装 四、第一个Win32程序 五、窗口类句柄/窗口类对象 六、Winodws消息循环机制 七、Windows数据类型 一、什么是Winodws编程 Windows 编程指的是在 Microsoft Windows 操作系统上进行软件开发的过…

Spring IOC - BeanDefinition解析

1. BeanDefinition的属性 BeanDefinition作为接口定义了属性的get、set方法。这些属性基本定义在其直接实现类AbstractBeanDefinition中,各属性的含义如下表所示: 类型 名称 含义 常量 SCOPE_DEFAULT 默认作用域:单例模式 AUT…

《Semantics Disentangling for Generalized Zero-Shot Learning》论文解读

其实除了VAE自监督外,引入语义属性来约束生成特征的质量。感觉解纠缠这个说法有点扯淡。 语义相关模块的作用 其实就是把语义属性也作为标签。除了VAE外,加了语义属性作为标签,这样生成的特征就可以即跟原始视觉特征对齐,又跟语…

大数据治理运营整体解决方案:PPT全文39页,附下载

关键词:大数据,数据治理,数据治理解决方案,数据治理的目的和意义 一、数据治理的定义 数据治理专注于将数据作为企事业单位数据资产进行应用和管理的一套管理机制,能够消除数据的不一致性,建立规范的数据应…