弹性架构:容错系统策略

如今软件无处不在 - 从我们的手机到汽车和电器。这意味着软件系统的可靠性、健壮性和弹性非常重要。 弹性系统可以承受故障或错误而不会完全崩溃。容错能力是弹性的关键部分。即使出现问题,它也能让系统保持正常工作。

在本文中,我们将了解为什么弹性和容错能力对业务很重要。我们还将讨论构建容错系统的核心原则和策略。这包括冗余、故障转移、复制和隔离等内容。此外,我们将研究不同的测试方法如何识别潜在问题并提高弹性。最后,我们将讨论弹性系统设计的未来。云计算、容器和无服务器平台等新兴趋势正在改变弹性系统的构建方式。

韧性的重要性

系统故障可能会损害业务和技术运营。从业务角度来看,中断会导致收入损失、声誉受损、客户不满意以及竞争优势丧失。例如,2021 年,Reddit、Spotify 和 AWS 等主要在线服务宕机了几个小时。这次中断造成了数百万美元的损失,也让用户感到沮丧。同样,2021 年的一次维护错误导致 Facebook 及其服务在全球范围内中断约六个小时。数十亿用户和广告商受到影响。

在技术方面,系统故障可能会导致数据丢失或损坏、安全漏洞、性能问题和复杂性。例如,2020 年 Garmin 遭受勒索软件攻击,扰乱了其在线服务和健身追踪器。最近,即 2023 年,人为因素导致澳大利亚的 Microsoft Azure 服务器出现严重中断。

因此,构建弹性和容错系统至关重要。这样做可以防止或最大程度地减少系统故障对业务和技术运营的影响。

了解容错系统

即使出现问题,容错系统也能保持正常工作。故障是导致系统行为与预期不同的任何问题。故障可能是由硬件故障、软件错误、人为错误或断电等环境因素引起的。

在具有大量服务和子服务、数百台服务器并分布在不同数据中心的复杂系统中,小问题总是会发生。这些问题一定不能影响用户体验。

构建容错能力的三个主要原则:

  • 冗余- 出现故障时可以接管的额外组件。
  • 故障转移 - 当检测到故障时自动切换到备份组件。
  • 复制 - 创建服务器或数据库等组件的多个相同实例。

消除单点故障至关重要。系统的设计必须确保没有任何单个组件对运行至关重要。如果该组件发生故障,系统可以通过冗余和故障转移继续工作。

这些原则使得容错系统能够检测故障、解决故障并在故障发生时进行恢复。这增加了整体弹性。通过避免过度依赖任何一个组件,可以提高整个系统的可靠性。

构建弹性系统的策略

在本节中,我们将讨论容错系统的三个原则中的每一个,并提供有效使用它们的系统示例。

冗余

冗余涉及拥有备用或替代组件,以便在出现故障时可以接管。它可以应用于硬件、软件、数据或网络。优点包括提高可用性、可靠性和性能。冗余消除了单点故障并实现了负载平衡和并行处理。

示例:负载平衡的 Web 应用程序

  • 该 Web 应用程序在 3 个区域的 20 台服务器上运行

  • 全局负载均衡器监控每台服务器的健康状况

  • 如果美国东部的 2 个服务器发生故障,平衡器会将流量路由到美国西部和欧洲的其余服务器

  • 避免单一区域故障可提供连续的正常运行时间

故障转移

故障转移机制检测故障并自动切换到备份。这可以保持连续性、一致性和数据完整性。故障转移允许在发生故障后顺利恢复操作。

示例:无服务器视频编码

  • 媒体编码功能在 AWS Lambda 等无服务器平台上运行

  • 平台跨多个可用区 (AZ) 自动扩展实例

  • 可用区故障会禁用这些功能实例

  • 其他实例在剩余可用区中启动以处理负载

  • 故障转移提供弹性编码能力

复制

复制涉及在多个位置维护数据或软件等资源的相同副本。它提高了可用性、耐用性、性能、安全性和隐私性。

示例:高可用性数据库集群

  • 2 个数据库节点配置为主动-被动集群

  • 主动节点处理所有事务,而被动节点复制数据

  • 集群管理器检测到主动故障并自动将被动提升为主动

  • 虚拟IP地址迁移到新的主动节点以重定向客户端连接

  • 故障转移提供数据库服务器崩溃的无缝恢复

测试在弹性系统中的作用

测试在构建弹性、容错系统方面发挥着关键作用。测试有助于在潜在的弱点造成真正的故障或中断之前识别并解决它们。有多种针对弹性的测试方法,包括混沌工程、压力测试和负载测试。

这些技术模拟现实的故障场景,例如硬件崩溃、流量峰值或数据库过载。目标是观察系统如何响应并找到提高容错能力的方法。测试验证冗余、故障转移、复制和其他策略是否按预期工作。

所有大型 IT 公司都会进行弹性测试。 Netflix 在这方面处于领先地位。他们使用模拟以及系统或区域的受控关闭部分来识别任何需要修复的漏洞。此类测试的受控性质允许在不影响用户体验的情况下识别系统可靠性方面的差距。与意外发生此类中断并影响用户体验的情况相比。

弹性系统架构的未来

弹性系统架构领域正在不断发展并适应新兴趋势和技术带来的新挑战和机遇。让我们来谈谈当今影响弹性系统设计和开发的一些趋势和技术。

  • 云计算提供灵活的可扩展性来应对使用高峰和峰值负载。它通过自动化简化了增加容量或更换故障组件的过程。丰富的无服务器计算能力可实现冗余和动态故障转移。这些云属性有助于构建可弹性扩展的弹性系统。

  • 微服务将整体应用程序分解为独立的模块化服务。每个服务都专注于特定功能并通过 API 进行通信。这可以实现故障隔离以及每个服务的独立扩展/更新。微服务可以轻松复制和负载平衡以实现高可用性。松散耦合和小型代码库也有助于恢复能力。

  • 容器将代码与依赖项和配置打包在一起,以便跨环境进行可预测、可移植的执行。容器共享主机资源,但彼此隔离运行。这通过一致的部署、故障遏制和资源效率提高了弹性。容器简化了管理。

  • 无服务器计算抽象了服务器和基础设施。开发人员只需编写可自动扩展的功能代码片段。无服务器平台处理配置、扩展、修补等。基于使用情况的定价可降低成本。通过消除服务器管理职责,无服务器计算简化了弹性系统的构建。

  • 监控通过指标、日志记录和跟踪提供对系统运行状况和行为的实时可见性。该数据可以识别/诊断故障和性能问题。可观察性工具可帮助团队了解故障、调整系统并提高可靠性。强大的监控是有效运行弹性系统的关键。

结论

弹性是跨行业和应用程序的系统的关键品质。通过应用冗余、故障转移、复制和严格测试等核心原则,我们可以开发容错系统,在故障期间提供可靠性、可用性和持续服务。随着云计算、微服务和无服务器架构等技术趋势的广泛传播,弹性的新机遇和挑战也随之出现。然而,通过及时了解领先实践、跨领域协作并牢记反脆弱性的最终目标,工程师可以打造出具有弹性设计的系统。尽管形势将继续发展,但本文涵盖的策略和思维方式将作为坚实的基础。弹性是一个旅程,而不是目的地,但通过明智的架构和测试,我们可以构建为未来做好准备的系统。

作者:Maria Rogova

更多技术干货请关注公号【云原生数据库

squids.cn,云数据库RDS,迁移工具DBMotion,云备份DBTwin等数据库生态工具。

irds.cn,多数据库管理平台(私有云)。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JsRpc技术服务搭建,最简单的JSRPC,Flask+undetected-chromedriver

只需10来行代码快速实现JSRpc,最简单的JSRPC 使用Flask和undetected-chromedriver快速实现JsRpc 推荐Python版本3.7.x及以上,需要pip安装 pip install Flask pip install undetected-chromedriver __author__ jiuLiang __email__ "jiuliangef…

软件测试职业规划

软件测试人员的发展误区【4】 公司开发的产品专业性较强,软件测试人员需要有很强的专业知识,现在软件测试人员发展出现了一种测试管理者不愿意看到的景象: 1、开发技术较强的软件测试人员转向了软件开发(非测试工具开发); 2、业务…

蓝桥杯专题-真题版含答案-【古代赌局】【古堡算式】【微生物增殖】【密码发生器】

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分…

K中期考核-降低显存的关键

读入模型参数-且不占用显卡 see_memory_usage(‘message’) # 4. 读入checkpiont参数 state_dicttorch.load(../train-output/ args.model_name_or_path.split(/)[-1] /unet/diffusion_pytorch_model.bin, map_locationcpu) # state_dicttorch.load(../train-output/ …

C++报错:error C2238: 意外的标记位于“;”之前

报错信息如下: 编译遇见这样的错误信息主要有一下几种: 情况一: 多数情况下出现这种问题的原因是因为头文件重复包含:即头文件A包含了B,头文件B又包含了A,导致编译器在加载头文件时陷入死循环。 解决办法…

力扣题:数字与字符串间转换-12.16

力扣题-12.16 [力扣刷题攻略] Re:从零开始的力扣刷题生活 力扣题1:640. 求解方程 解题思想:首先将方程按照“”进行划分,然后分别记录x的因数和常数项,最后进行返回的判断即可 class Solution(object):def solveEqu…

Ubuntu下COLMAP的编译与安装全攻略

文章目录 一、前言二、安装依赖库基本的依赖安装Ceres Solver安装不需要cuda支持需要cuda支持 三、编译colmap四、运行colmap五、总结 一、前言 在计算机视觉领域,colmap是一款功能强大的开源图像重建工具。它提供了包括SfM(Structure from Motion&…

git变更关联的远程仓库

git变更关联的远程仓库 git 将本地关联的远程仓库1变更为新建的远程仓库2 1、移除本地的远程仓库关联关系 git remote remove origin 2、添加新的远程仓库地址: git remote add origin gitgithub.com:github-xiaobai/66-test-cc.git 3、生成本机的ssh-key(如果已…

uniapp获取app版本号、h5版本号、微信小程序版本号的方法

目录 第一种获取App版本号App版本号App的H5版本号 第二种获取App版本号第三种获取App版本号第一种获取微信小程序版本号获取微信小程序版本号 最后 第一种获取App版本号 App版本号 // 获取当前app的版本 const systemInfo uni.getSystemInfoSync(); // 应用程序版本号 // 条…

万户 OA OfficeServer.jsp 任意文件上传漏洞复现

0x01 产品简介 万户OA是面向政府组织及企事业单位的FlexOffice自主安全协同办公平台。 0x02 漏洞概述 万户OA OfficeServer.jsp接口存在任意文件上传漏洞,攻击者可通过该漏洞上传任意文件从而控制整个服务器。 0x03 复现环境 FOFA: (banner="OASESSIONID" &a…

算法基础概念之数据结构

邻接表 每个点作为头节点接一条链表 链表中元素均为该头节点指向的点 优先队列 参数: ①储存元素类型 ②底层使用的存储结构(一般为vector) ③比较方式(默认小于)

ffmpeg可以做什么

用途 FFmpeg是一个功能强大的多媒体处理工具,可以处理音频和视频文件。它是一个开源项目,可在各种操作系统上运行,包括Linux、Windows和Mac OS X等。以下是FFmpeg可以做的一些主要任务: 转换媒体格式:可将一个媒体格式…

0基础学习VR全景平台篇第128篇:720VR全景拍摄设备推荐

上课!全体起立~ 大家好,欢迎观看蛙色官方系列全景摄影课程! 本篇教程,小编为大家推荐720VR全景拍摄所需要的设备器材。上节我们提到,理论上任意相机和镜头都能够拍摄全景,但为了标准化制作流程&#xff0…

关于chatgpt一点肤浅认识

001 词向量 用数字向量表示单词。它是计算机更好地理解单词 1、预训练 – 就是先训练一个模型,用于以后特定任务的微调,比如将 BERT这个模型用于特定的NLP任务,比如情感分析 2、one-hot: 用只有一个元素是1,其他是0的向量表示物体…

【C++】特殊类设计及单例模式

1.设计一个只能在堆上创建对象的类 实现方式: 将类的构造函数私有,拷贝构造声明成私有。防止别人调用拷贝在栈上生成对象。提供一个静态的成员函数,在该静态成员函数中完成堆对象的创建。代码示例如下: class HeapOnly { publi…

CSS新手入门笔记整理:CSS常用属性表

字体样式 属性 属性值 说明 font-family 微软雅黑/苹方 字体类型 font-size 数值 字体大小 font-weight 数值/关键字 字体粗细(字重) font-style normal(正常(默认值))italic(斜体)oblique&am…

Graylog解决超出ES搜索最大窗口限制问题

今天在查询日志的时候graylog报了一个错: While retrieving data for this widget, the following error(s) occurred: Unable to perform search query: Elasticsearch exception [typeillegal_argument_exception, reasonResult window is too large, from size …

云原生向量计算引擎 PieCloudVector:为大模型提供独特记忆

拓数派大模型数据计算系统(PieDataComputingSystem,缩写:πDataCS)在10月24日程序员节「大模型数据计算系统」2023拓数派年度技术论坛正式发布。πDataCS 以云原生技术重构数据存储和计算,「一份存储,多引擎…

我的NPI项目之Android 安全系列 -- 先认识一下ST33Jxxx

目前接触过的高通平台都没有集成单独的SE,安全运行环境都是高通自家的TEE,又言Trustzone。高通Keystore功能也是依赖TEE来实现的。那么,如果另外集成SE,那么高通的Keystore如何集成?TEE部分要如何配置? 最近…

Ubuntu Shutdown while other user logged on

1. sudo vim /etc/systemd/logind.conf 修改代码KillUserProcessesyes 2. sudo touch /etc/polkit-1/localauthority/50-local.d/multi-user-inhibit-shutdown-restart.pkla 3. 打开修改配置文件 sudo vim /etc/polkit-1/localauthority/50-local.d/multi-user-inhibit-shut…