0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

分布式系统中保证高可用性的常用经验

华为开发者社区 来源:华为云社区 作者:aoho 2021-02-05 10:19 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

系统可用性指标

系统可用性指标简单来讲就是系统可用时间与总运行时间之比

Availability=MTTF/(MTTF+MTTRMTTF)

MTTF 是 Mean Time To Failure,指平均故障前的时间,即系统平均能够正常运行多长时间才发生一次故障。系统的可靠性越高,MTTF 越长(简单理解MTTF 就是指系统正常运行的时间)。MTTR 是 Mean Time To Recovery, 平均修复时间,即从故障出现到故障修复的这段时间,也就是系统不可用的时间,这段时间越短越好。系统可用性指标可以用通过下表的999标准衡量,现在普遍要求至少2个9,最好4个9以上:

6333bbb2-5f86-11eb-8b86-12bb97331649.png

故障不可避免

高可用性是指系统提供的服务要始终可用,然而故障不可避免,特别是在分布式系统,面对不可控的用户流量和机房环境,系统故障将会显得更加复杂和不可预测。在大规模的分布式系统中,各个模块之间存在错综复杂的依赖,任一一个环节出现问题,都有可能导致雪崩式、多米诺骨牌式的故障,甚者可以断言出现故障成了常态。

63c257e6-5f86-11eb-8b86-12bb97331649.png

如上图的分布式系统中,用户请求系统中的某个服务接口,请求需要经过长长的调用链才能处理返回。我们起码要保证网络连接正常,服务网关正常、前端服务正常、后台服务正常、数据库正常,请求才能被正常处理,如果调用链中的任一环节出现问题,都会直接反馈到用户体验上。

系统出现故障的原因多种多样,主要有以下这些:

网络问题,网络连接故障,网络带宽出现超时拥塞等;

性能问题,数据库慢查询、Java Full GC、硬盘 IO 过大、CPU 过高、内存不足等

安全问题,被网络攻击,如 DDoS 等、异常客户端请求,如爬虫等。

运维问题,需求变更频繁不可控,架构也在不断地被调整,监控问题等;

管理问题,没有梳理出关键服务以及服务的依赖关系,运行信息没有和控制系统同步;

硬件问题,硬盘损坏、网卡出问题、交换机出问题、机房掉电、挖掘机问题(前一阵子机房电缆就经常被挖断)等;

面对如此多的天灾人祸,可控和不可控的故障因素,似乎系统的高可用性变成不可能完成的任务,但是在日常开发运维中,我们可以采用一些有效的设计、实现和运维手段来提高系统的高可用性,尽量交付一个在任何时候都基本可用的系统。

冗余设计

分布式系统中单点故障不可取的,而降低单点故障的不二法门就是冗余设计,通过多点部署的方式,并且最好是部署在不同的物理位置,避免单机房中多点同时失败。冗余设计不仅可以提高服务的吞吐量,还可以在出现灾难时快速恢复。目前常见的冗余设计有主从设计和对等治理设计,主从设计又可以细分为一主多从、多主多从。

冗余设计中一个不可避免的问题是考虑分布式系统中数据的一致性,多个节点中冗余的数据追求强一致性还是最终一致性。即使节点提供无状态服务,也需要借助外部服务,比如数据库、分布式缓存等维护数据状态。根据分布式系统下节点数据同步的基本原理CAP(Consistency (一致性)、Availablity (可用性)、Partition tolerance (分区容忍性)三个指标不可同时满足),数据强一致性的系统无法保证高可用性,最典型的例子就是 Zookeeper。

Zookeeper 采用主从设计,服务集群由 Leader、Follower 和 Observer 三种角色组成,它们的职责如下:

Leader: Zookeeper 集群使用 ZAB 协议通过 Leader 选举从集群中选定一个节点作为 Leader。Leader 响应客户端的读写请求;

Follower:只提供数据的读服务,会将来自客户端的写请求转发到 Leader 中。在 Leader 选举的过程中参与投票,并与 Leader 维持数据同步;

Observer:与 Folllower 的功能相同,但不参与 Leader 选举和写过程的“过半写成功”策略,单纯为了提高集群的读能力。

在 Zookeeper 集群中,由于只有 Leader 角色的节点具备写数据的能力,当 Leader 节点宕机时,在新的 Leader 节点没有被选举出来之前,集群的写能力都是不可用的。虽然 Zookeeper 保证了集群数据的强一致性,但是放弃了集群的高可用性。 对等治理设计中比较优秀的业内体现为 Netiflx 开源的 Eureka 服务注册和发现组件。Eureka 集群由 Eureka Client 和 Eureka Server 两种角色组成,其中 Eureka Client 是指服务实例使用的服务注册和发现的客户端,用于注册和查询服务实例信息;Eureka Server 作为服务注册中心,存储有各服务的实例信息列表,采用多实例的方式部署保证高可用性。 每一个 Eureka Server 都是对等的数据节点,Eureka Client 可以向任意的 Eureka Server 发起服务注册请求和服务发现请求。Eureka Server 之间的数据通过异步 HTTP 的方式同步,由于网络的不可靠性,不同 Eureka Server 中的服务实例数据不能保证在任意时间节点都相等,只能保证在 SLA 承诺时间内达到数据的最终一致性。Eureka 点对点对等的设计保证了服务注册与发现中心的高可用性,但是牺牲了数据的强一致性,降级为数据的最终一致性。

熔断设计

在分布式系统中,一次完整的请求可能需要经过多个服务模块的通力合作,请求在多个服务中传递,服务对服务的调用会产生新的请求,这些请求共同组成了这次请求的调用链。当调用链中的某个环节,特别是下游服务不可用时,将会导致上游服务调用方不可用,最终将这种不可用的影响扩大到整个系统,导致整个分布式系统的不可用,引发服务雪崩现象。

为了避免这种情况,在下游服务不可用时,保护上游服务的可用性显得极其重要。对此,我们可以参考电路系统的断路器机制,在必要的时候壮士断腕,当下游服务因为过载或者故障不能用时,及时“熔断”服务调用方和服务提供方的调用链,保护服务调用方资源,防止服务雪崩现象的出现。

断路器的基本设计图如下,由关闭、打开、半开三种状态组成:

64540902-5f86-11eb-8b86-12bb97331649.png

关闭(Closed)状态:

此时服务调用方可以调用服务提供方。断路器中使用失败计数器周期性统计请求失败次数和请求总次数的比例,如果最近失败频率超过了周期时间内允许失败的阈值,则切换到打开(Open)状态。在关闭状态下,失败计数器基于时间周期运作,会在每个统计周期开始前自动重置,防止某次偶然错误导致断路器进入打开状态。

打开(Open)状态:

在该状态下,对应用程序的请求会立即返回错误响应或者执行预设的失败降级逻辑,而不调用服务提供方。断路器进入打开状态后会启动超时计时器,在计时器到达后,断路器进入半开状态。

半开(Half-Open)状态:

允许应用程序一定数量的请求去调用服务。如果这些请求对服务的调用成功,那么可以认为之前导致调用失败的错误已经修正,此时断路器切换到关闭状态,同时将失败计数器重置。如果这一定数量的请求存在调用失败的情况,则认为导致之前调用失败的问题仍然存在,断路器切回到打开状态,并重置超时计时器来给系统一定的时间来修正错误。半开状态能够有效防止正在恢复中的服务被突然而来的大量请求再次打垮。

使用断路器设计模式,能够有效地保护服务调用方的稳定性,它能够避免服务调用者频繁调用可能失败的服务提供者,防止服务调用者浪费 CPU 周期、线程和 IO 资源等,提高服务整体的可用性。

小结

本文主要介绍了几种高可用的设计,除了上面介绍的方式之外,还有限流设计和一些其他设计与方案,如降级设计、无状态设计、幂等性设计、重试设计、接口缓存、实时监控和度量以及常规划化维护。

原文标题:进来抄作业吧!分布式系统中保证高可用性的常用经验

文章出处:【微信公众号:华为开发者社区】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 分布式系统
    +关注

    关注

    0

    文章

    150

    浏览量

    19820

原文标题:进来抄作业吧!分布式系统中保证高可用性的常用经验

文章出处:【微信号:Huawei_Developer,微信公众号:华为开发者社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Acrel-1000DP分布式光伏监控系统成功落地奉贤平食品 4.4MW 分布式光伏项目

    一、概述 上海华电奉贤平食品 4408.085kwp 分布式光伏发电项目(以下简称“本项目”)是响应国家“优化能源结构,提供更加清洁、可靠的能源”的号召,投资建设的分布式光伏发电应用示范项目。上海
    的头像 发表于 11-12 10:17 275次阅读

    如何解决分布式光伏计量难题?

    %。同时,可提升发电效率、降低发电成本的新型技术逐步落地,推动光伏系统向更高效、更紧凑的方向发展,进而对电表在精度、数据更新速度及适配方面也提出了更高要求。 分布式光伏遇计量难题 分布式
    的头像 发表于 11-07 14:55 148次阅读
    如何解决<b class='flag-5'>分布式</b>光伏计量难题?

    【节能学院】Acrel-1000DP分布式光伏监控系统在奉贤平食品 4.4MW 分布式光伏中应用

    摘要:在“双碳”和新型电力系统建设背景下,分布式光伏接入比例不断提高,对配电网电压、调度运行及调峰等环节造成强烈冲击。本文设计包含平台层、设备层二层架构体系的分布式光伏管控平台,以及小容量工商业
    的头像 发表于 08-23 08:04 3305次阅读
    【节能学院】Acrel-1000DP<b class='flag-5'>分布式</b>光伏监控<b class='flag-5'>系统</b>在奉贤平<b class='flag-5'>高</b>食品 4.4MW <b class='flag-5'>分布式</b>光伏中应用

    分布式光伏发电监测系统技术方案

    分布式光伏发电监测系统技术方案 柏峰【BF-GFQX】一、系统目标 :分布式光伏发电监测系统旨在通过智能化的监测手段,实现对
    的头像 发表于 08-22 10:51 2879次阅读
    <b class='flag-5'>分布式</b>光伏发电监测<b class='flag-5'>系统</b>技术方案

    QNAP 正式推出 NAS 双机架构的可用性解决方案,打造不中断的储存环境

    台北2025年7月28日 /美通社/ -- 运算、网通与储存解决方案领导品牌威联通®科技 (QNAP® Systems, Inc.) 今日正式发布可用性 (High Availability
    的头像 发表于 07-28 09:26 403次阅读

    Ceph分布式存储系统解析

    在当今数据爆炸的时代,企业对存储系统的需求日益增长,传统的集中式存储已经无法满足大规模数据处理的要求。分布式存储系统应运而生,而Ceph作为开源分布式存储
    的头像 发表于 07-14 11:15 710次阅读

    分布式光伏发电监控系统

    、低压并网分布式光伏电站的升压系统、光伏逆变器等设备进行全面监控,采集微机保护装置、自动控制设备、电能质量监测装置、光伏逆变器、一体化电源等设备数据,并提供有功功率控制(AGC)、电压无功综合
    的头像 发表于 06-25 13:41 590次阅读
    <b class='flag-5'>分布式</b>光伏发电监控<b class='flag-5'>系统</b>

    Vsan数据恢复——Vsan分布式文件系统上虚拟机不可用的数据恢复

    一台采用VsSAN分布式文件系统的存储设备由于未知原因关机重启。管理员发现上层的虚拟机不可用,存储内的数据丢失。
    的头像 发表于 05-15 17:42 424次阅读
    Vsan数据恢复——Vsan<b class='flag-5'>分布式</b>文件<b class='flag-5'>系统</b>上虚拟机不<b class='flag-5'>可用</b>的数据恢复

    分布式光伏发运维系统实际应用案例分享

    安科瑞刘鸿鹏 摘 要 分布式光伏发电系统其核心特点是发电设备靠近用电负荷中心,通常安装在屋顶、建筑立面或闲置空地上,截至2025年,分布式光伏发电系统在全球和中国范围内取得了显著发展,
    的头像 发表于 04-09 14:46 989次阅读
    <b class='flag-5'>分布式</b>光伏发运维<b class='flag-5'>系统</b>实际应用案例分享

    浅谈分布式光伏系统在工业企业的设计及应用

    主要对工业厂区屋顶分布式光伏发电系统的设计及应用进行研究,为工业厂区能源供应提供一种全新的解决思路和技术支持。介绍了工业厂区屋顶分布式光伏系统及其优势,分析了工业厂区屋顶
    的头像 发表于 03-21 14:24 725次阅读
    浅谈<b class='flag-5'>分布式</b>光伏<b class='flag-5'>系统</b>在工业企业的设计及应用

    分布式 IO 模块:开启药品罐装产线高效生产新纪元

    在药品生产的精密领域,每一个环节都关乎着客户的健康与安全。药品罐装产线作为药品生产的关键环节,其高效运行与精准控制至关重要。明达技术MR30分布式 IO 模块,正以其卓越的性能,成为实现药品罐装产线高效控制,确保产品质量稳定、工厂可用性
    的头像 发表于 01-20 10:52 670次阅读
    <b class='flag-5'>分布式</b> IO 模块:开启药品罐装产线高效生产新纪元

    分布式云化数据库有哪些类型

    分布式云化数据库有哪些类型?分布式云化数据库主要类型包括:关系型分布式数据库、非关系型分布式数据库、新SQL分布式数据库、以列方式存储数据、
    的头像 发表于 01-15 09:43 865次阅读

    基于ptp的分布式系统设计

    在现代分布式系统中,精确的时间同步对于确保数据一致系统稳定性和性能至关重要。PTP(Precision Time Protocol)是一种网络协议,用于在
    的头像 发表于 12-29 10:09 974次阅读

    HarmonyOS Next 应用元服务开发-分布式数据对象迁移数据权限与基础数据

    设备文件访问实现文件的迁移,难以获取文件同步完成的时间。为了保证更高的成功率,文件的迁移不建议继续通过该方式实现,推荐使用分布式数据对象携带资产的方式。开发者此前通过跨设备文件访问实现的文件迁移依然生效
    发表于 12-24 09:40

    分布式光伏监控系统在能源领域中的重要

    在当今能源领域,分布式光伏发电作为一种可持续的能源解决方案正日益普及。而分布式光伏监控系统在其中扮演着至关重要的角色,为分布式光伏发电的高效运行和管理带来了诸多显著好处。 一、提升发电
    的头像 发表于 12-09 14:39 1094次阅读
    <b class='flag-5'>分布式</b>光伏监控<b class='flag-5'>系统</b>在能源领域中的重要<b class='flag-5'>性</b>