稳定性保障8个锦囊,建议收藏!

稳定性保障,是一切技术工作的出发点和落脚点,也是 IT 工作最核心的价值体现,当然也是技术人员最容易“翻车”的阴沟。8个稳定性保障锦囊,分享给各位技术人员择机使用。

#1 设定可量化的、业务可理解的可用性目标

没有度量就没有改进。Google SRE 曾在其工程实践中,就引入了针对服务可靠性的预算机制,即「Budget」的概念。技术团队和业务团队就服务不可用时长的额度,制定合理的目标,进而指导技术投资、稳定性保障、业务发展三者的全局最优解法。技术方制定稳定性的度量指标,一个关键出发点是“业务方要听的懂”。

我们可以将度量指标进行更进一步的抽象,分别从外部用户视角和从内部系统视角,全面的看待整体的可用性,甚至某种意义来讲,从外部用户视角看到的稳定性统计结果更有说服力,更有价值。暂且把从外部用户视角对系统可用性的度量指标称之为「北极星指标」。通过北极星指标的实时变化趋势,技术和业务团队可以全面的了解系统的运行状态,当发生全局故障的时刻,也可以让所有参与者能够清楚知晓对核心业务的影响面,进而对故障级别、应急处置优先级有统一的认知。北极星本质上,就是在从用户的视角,来整体看待复杂系统的稳定性。

举几个例子:

  • 对于类似 zoom 这样的在线会议业务,其北极星指标可以定义为「1分钟内的参与会议的方数」;
  • 对于电商业务,其北极星指标可以定义为「1分钟内的交易笔数」;
  • 对于游戏业务,其北极星指标可以是 「1分钟内的同时在线游戏人数」;
  • 对于类似滴滴这样的出行业务,其北极星指标可以是「1分钟内的呼叫次数」「1分钟内处于行程中的订单数」;
  • 对于直播类的业务,其北极星指标可以是「1分钟内的主播在线数」「1分钟内的观众在线数」「1分钟内的打赏总金额」等;

从故障发现和定位的角度,一旦这些北极星指标发生了异常波动,就代表了核心业务受到了影响,该事件应该要第一时间被响应并上升,故障应急小组第一时间就位,相关支撑系统的工程师也要被 involve 进来。这种方法可以确保技术团队在业务受损的第一时间就能感知到,起到了故障发现兜底的作用。

同时,北极星指标经过一段时间的运行,其异常的时间、正常的时间,本身就是一个很客观的度量我们系统是否稳定的依据,作为技术团队和业务方沟通的桥梁,是最合适不过了。一年到头,稳定性好与坏,不是技术团队自说自话,从外部用户的视角,用北极星指标的统计结果更客观。

#2 建立可重复执行的发现 、定位、止损路径

故障发现定位处理闭环

故障发现、定位、止损,是稳定性保障闭环中最紧迫、最关键的环节,通常技术人员会做的事情是从各个维度收集『信息』以辅助决策:

  1. 看哪些功能和系统受到了影响和受影响的程度
  2. 看受影响的是哪个单元(如果有多活、多集群或多云架构的话)
  3. 看是否有相关的变更等重要事件
  4. 看系统的容量是否过载
  5. 看有没有基础设施的故障(网络/机房等)
  6. 从端上向后端trace日志,看异常源自哪个环节
  7. 看全局日志/指标的统计数据,判断故障的特征
  8. 看其他多种维度的数据、使用更多的定位工具。。。

在这个环节,推荐重点加强以下三个点:

  1. 问题的排查路径,是否可以固化在平台上,变成套路,并通过每次的故障复盘逐步的完善
  2. 在问题的排查过程中,尽量把需要的数据、信息透明化,免去工程师在不同的工具、平台之间跳转的时间
  3. 把最有经验工程师的专家经验,能否沉淀到平台上,变成所有工程师的经验

故障紧急止损,常见的手段也是相对固定的,不外乎:

  1. 变更回滚
  2. 流量调度
  3. 服务降级
  4. 接口限流
  5. 弹性伸缩
  6. 机器重启
  7. 服务重启
  8. 单点切换

所以,能否把故障的排查结论和固定的止损手段,快速关联起来,决定着本次故障处理的速度,也就决定了本次故障最终的级别。

#3 确保核心服务有冗余、可切换

在架构设计过程中,采用“面向失败设计架构”的思想至关重要,任何系统、模块都有失效的概率。所以,我们需要重点关注以下几个方面:

  1. 梳理和识别业务主流程上的关键节点
  2. 主流程上的关键节点,需要定期review,避免随着业务的迭代,出现遗漏
  3. 制定针对关键模块的冗余方案,以及对应的容灾切换方案
  4. 极端情况下,核心模块有“从零恢复”的预案

#4 确保非核心功能可降级、可熔断

在现代化的软件架构下,系统的模块数量很多,实例数量也很多,实例之间的调用链复杂。往往会由于“非主流程”的模块故障,导致“主流程”被阻塞、甚至“雪崩”。在识别出主流程上的关键节点之外,所有的非核心功能,都必须具备可降级、可熔断的能力。

重点关注以下几点:

  1. 可以查看核心模块的依赖列表,并清楚的呈现每个依赖的接口的流量、成功率、延迟等黄金指标(推荐增加Tracing的覆盖率)
  2. 在非核心功能层面,有开关可以一键熔断和降级(推荐使用feature flags技术)

#5 有状态服务,限流是恢复故障的关键抓手

有状态服务,在故障时候,一般很难短时间内进行扩容,这往往涉及到数据的迁移和再平衡,而数据的迁移又会加重系统的负载,降低系统的性能,导致故障会变的更严重,“雪崩”现象往往就是这么引起的。因此,针对有状态服务,在故障的时刻,最有效的恢复手段是“限流”。

在限流的过程中,需要关注以下几点:

  1. 限流的阈值优先考虑设置“全局限流”阈值,这样在实例数量很多的情况下,限流更准确
  2. 某个模块的容量上限,平时要摸出来,并按照流量、延迟、成功率进行量化
  3. 在“雪崩”严重的情况下,为了让相关模块能快速恢复,推荐的限流操作顺序为:先拒绝所有流量,然后逐步提升限流的阈值,给系统逐步恢复的时间和空间

#6 无状态服务,弹性伸缩是恢复故障的关键抓手

  1. 在系统架构设计上,尽可能设计无状态服务的架构,把有状态的东西更多转移到数据库、对象存储、消息队列等服务中。
  2. 将计算层微服务化,有助于更好的弹性伸缩。

#7 严格执行灰度发布,把影响面控制在小流量阶段

根据统计规律,只要有变更, 就有很大的概率引发故障。统计数据显示,70%的故障都和变更相关,这些变更包括:

  1. 线上发布新版本
  2. 配置变更
  3. 开关变更(feature flags)
  4. 数据库变更
  5. 网络变更

降低变更引发的故障的影响面的方法包括:

  1. 严格执行灰度发布流程,把问题暴露在小流量阶段
  2. 尽可能的保持开发、预发布、线上环境相同,尽早暴露问题

#8 善用云服务

用多az胜过用多云

  • 多az基本可以保障云基础设施的可用性,多云反而会给业务系统的设计带来更大的复杂度,从而引入更多的稳定性风险点。

用对象存储静态文件

  • 成本优化上:按量使用付费,不需要提前预制大量长期浪费的空闲空间,并且有丰富的存储形式,单价也低于块存储;
  • 容错能力上:一般都是三副本,可以做版本管理,优于块存储;
  • 性能上:是公有云的全托管服务,单用户请求可能逊于块存储设备,但是在多用户特别是海量场景下性能有保证;
  • 安全性:是公有云的全托管服务,有丰富的安全策略可以配置,只需要在使用注意选择和配置,日常维护由公有云保证;
  • 扩展性:极好,因为空间接近无限制,研发人员无需担心空间不足情况,不需要猜测容量需求;
  • 开发优势:因为是基于 API 的公开服务,所以方便多个服务共享使用,是一个很好的解耦渠道;

尽量用云托管服务

  1. 云托管服务,指的是由公有云完全托管管理,客户不关心具体的服务器细节,只通过接口来使用服务,通过公有云的控制台、API、SDK 来管理服务,扩展、容错能力和可用性通常内置在服务中。
  2. 鼓励和推荐研发人员选用托管服务
    • 给研发人员一定的托管服务权限
    • 给研发人员提case的权限以应对托管服务的问题
    • 让TAM直接服务研发人员
  3. 运维管住自己的手:)
    • 尽量不自建各种开源服务
    • 拒绝任何维护非业务代码服务的要求
    • 可以购买商业 SaaS 来替代公有云没有的托管服务

数据不要存在服务器上

  1. 日志存S3或者打入到ELK等外部服务中;
  2. 配置文件应该通过外部或者环境获取
    • 外部就是类似Parameter Store或者其他配置中心
    • 环境就是可以通过ec2启动时的用户数据,或者pod启动时环境变量来注入具体的配置
  3. https证书应该用acm和相关服务来解耦,或者参照配置文件获取;
  4. 密钥应该通过外部或者环境获取,类似Parameter Store;
  5. 业务数据应该进入S3或者数据库;
  6. 应用之间的中间数据,应该送往消息队列进行解耦处理;
  7. 所有脚本和配置应该代码库统一管理,部署应该按照CI/CD管理;
  8. 服务器开机,应用服务自启动;
  9. 将程序设计成无状态,无共享,可以随时终止;

注:「善用云服务」,节选自「云原生王四条」

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

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

相关文章

vue diff算法原理以及v2v3的区别

diff算法简介 diff算法的目的是为了找到哪些节点发生了变化,哪些节点没有发生变化可以复用。如果用最传统的diff算法,如下图所示,每个节点都要遍历另一棵树上的所有节点做比较,这就是o(n^2)的复杂度,加上更新节点时的…

系列六、ThreadLocal内存泄漏案例

一、内存泄漏 vs 内存溢出 内存泄漏:内存泄漏是指程序中已经动态分配的堆内存由于某种原因程序未释放或者无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至导致系统崩溃等严重后果,内存泄漏最终 会导致内…

2023年中国宠物清洁用品分类、市场规模及发展特征分析[图]

宠物清洁用品指专用于清洁宠物毛发、口腔、耳部、脚爪等部位的各类宠物用品,包括宠物香波、滴耳露、修毛刀等。宠物主对宠物清洁用品需求的出现,一定程度上反映出部分宠物主与宠物间的感情逐渐加深,并逐渐达到了较为亲密的程度。随着宠物清洁…

掌握技术访谈:CNN、Seq2Seq、Faster R-CNN 和 PPO — 揭开卓越编码和创新之路

一、说明 本文 揭开CNN、Seq2Seq、Faster R-CNN 和 PPO — 编码和创新之路。对于此类编程的短小示例,用于开发时临时参考。 二、数据准备 问题陈述:在本次挑战中,您将深入计算机视觉世界并使用卷积神经网络 (CNN) 解决图像分类任务。您将使用…

electron入门(一)环境搭建,实现样例

1、首先需要安装git和node,配置环境变量,确保npm和git命令可用 2、 然后安装依赖 npm install -g electronnpm install -g electron-forgenpm install -g electron-prebuilt-compile3、 创建样例工程 electron-forge init my-new-app # 我这里碰见报错…

深度学习入门:自建数据集完成花鸟二分类任务

自建数据集完成二分类任务(参考文章) 1 图片预处理 1 .1 统一图片格式 找到的图片需要首先做相同尺寸的裁剪,归一化,否则会因为图片大小不同报错 RuntimeError: stack expects each tensor to be equal size, but got [3, 667…

如何使用环境变量运行bat脚本(开启数据库db)

文章目录 1.拥有一个bat脚本2. 右击本电脑,点击属性,找到高级设置3.新建一个环境变量命名为你想要的名字4. 找到Path,进入新增%m8%即可5.确认所有刚刚的操作,并关闭开始配置后的所有页面6.notice 1.拥有一个bat脚本 内容是执行mys…

【开源】基于Vue.js的康复中心管理系统

项目编号: S 056 ,文末获取源码。 \color{red}{项目编号:S056,文末获取源码。} 项目编号:S056,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 普通用户模块2.2 护工模块2.3 管理员…

精彩预告 | OpenHarmony即将亮相MTSC 2023

MTSC 2023 第12届中国互联网测试开发大会(深圳站)即将于2023年11月25日,在深圳登喜路国际大酒店举办,大会将以“1个主会场4个平行分会场”的形式呈现,聚集一众顶尖技术专家和行业领袖,围绕如今备受关注的行…

2023年中国油墨树脂主要环节、产量及市场规模分析[图]

油墨树脂是指用于油墨制造中的一种高分子材料,主要用于改善油墨的粘性、流动性、光泽度和耐磨性等性能。其主要成分为合成树脂,如聚酯、聚酰胺、聚丙烯酸酯等。油墨树脂在油墨制造中的应用非常广泛,可以用于各种类型的油墨,包括印…

(内部资料)收下这几个人工智能学习秘籍!

秘籍一:练好基本功 学习基础知识:人工智能涉及多个学科领域,包括数学、计算机科学、统计学等。因此,学习基础知识是非常重要的。您可以通过学习线性代数、概率论和微积分等数学基础知识,以及掌握Python编程语言和常用…

Linux学习笔记-Ubuntu下使用Crontab设置定时任务

文章目录 一、概述二、基于crontab的设置2.1 基本命令说明2.2 使用-e指令编辑命令2.2.1 进入编辑模式2.2.2 指令信息格式2.2.4 开启日志1) 修改rsyslog配置文件2) 重启rsyslog3) 查看日志 2.2.3 设置后之后重启服务 三、示例3.1 每隔一分钟往文件中日期3.2 使用-l查看任务列表3…

腾讯云服务器99元一年?假的,阿里云是99元

腾讯云服务器99元一年是真的吗?假的,不用99元,只要88元即可购买一台2核2G3M带宽的轻量应用服务器,99元太多了,88元就够了,腾讯云百科活动 txybk.com/go/txy 活动打开如下图: 腾讯云服务器价格 腾…

【Redis篇】简述Java中操作Redis的方法

文章目录 🎄简述Jedis🎄Jedis优点🍔使用Jedis连接Redis⭐进行测试🎈进行测试 Redis(Remote Dictionary Server)是一种流行的高性能内存数据库,广泛应用于各种应用程序和系统中。作为Java开发人员…

政府采购变数大,联想还值不值得代理渠道商们“跟”?

文|新熔财经 作者|余一 “事业单位更换纯国产电脑”、“联想被排除在大订单之外”等消息下,联想硬件终端产品面临的问题日益严峻。 早在今年年初,联想集团(下称联想)掌门人杨元庆坦承,“智能…

阿里云学生认证可领300元无门槛代金券(高效计划)

阿里云高校计划学生和教师均可参与,完成学生认证和教师验证后学生可以免费领取300元无门槛代金券和3折优惠折扣,适用于云服务器等全量公共云产品,订单原价金额封顶5000元/年,阿里云百科aliyunbaike.com分享阿里云高校计划入口及学…

MySQL数据库入门到大牛_基础_11_数据处理之增删改

本章将会介绍DML中的增删改查操作,增删改泛泛来讲是针对表中数据的修改。 文章目录 1. 插入数据1.1 实际问题1.2 方式1:VALUES的方式添加1.3 方式2:将查询结果插入到表中 2. 更新数据3. 删除数据4. 小结5. MySQL8新特性:计算列6. …

微博头条文章开放接口报错 auth by Null spi

接口文档地址 https://open.weibo.com/wiki/Toutiao/api 接口说明 https://api.weibo.com/proxy/article/publish.json 请求方式 POST 请求参数 参数名称类型是否必需描述titlestring是文章标题,限定32个中英文字符以内contentstring是正文内容,限制9…

项目管理PMP6.0-五大过程组、十大知识领域、四十九个过程(记忆码:7664363734)

项目管理PMP6.0-五大过程组、十大知识领域、四十九个过程(记忆码:7664363734) 项目经理的影响力范围三者关系图(五大过程组、十大知识领域、四十九个过程)五大过程组十大知识领域十大知识领域之间联系 四十九个过程&am…

振南技术干货集:制冷设备大型IoT监测项目研发纪实(1)

注解目录 1.制冷设备的监测迫在眉睫 1.1 冷食的利润贡献 1.2 冷设监测系统的困难 (制冷设备对于便利店为何如何重要?了解一下你所不知道的便利店和新零售行业。关于电力线载波通信的论战。) 2、电路设计 2.1 防护电路 2.1.1 强电防护 …