微服务讲堂--【6】系统稳定性

2023-05-16

稳定性,通常是以可靠性来衡量,即我们常说的几个9,这个主题在之前各个系列文章中已经提到过,本来没有打算单独写一篇。前几天一个老同事在群里发出一个灵魂之问,“如何解决生产环境更新系统后的稳定性问题”。因此,觉得有必要再专门就这个主题做一个论述,也考虑这个主题内容实在太多了,以列举核心内容和纲要为主。

在所有论述之前,必须深刻认识到两个核心原则:

1、任何系统都会出错。要将可靠性从99%提高到99.9%,虽然只提高0.9%可靠性,但故障率降低了10倍,研发成本需要慎重考虑,极大可能也是要增加10倍。

2、只要故障没有被觉察到,那相当于没有。这句话被这么实诚的说出来,估计会有一堆人疯狂DISS,但这是非常魔幻色彩的现实主义实践原则。

一个系统从项目启动到线上运营,都要经历四个阶段,1、设计阶段;2、开发测试阶段;3、发布阶段;4、运维阶段。而系统故障主要出现在运维阶段,而故障根源主要出现在其他三个阶段。因此,为了提高可靠性,需要在每个阶段都要仔细衡量。而更为极端的做法,是把一些设计方案固化成了语言特性,比如早期的erlang,近期的go和rust也有这些特性。

在设计阶段,主要考究的是系统架构,不单是微服务,集群还是分布,还包括组件、语言选型等宏观方面的设计。各种配套工具也需要考虑,对提高可靠性有很大的帮助。这也是一个很大的主题,可以单独成文,由于本篇主要介绍可操作性高的解决方案,所以就不详细介绍理论性较强的架构设计。通常来说,系统可靠性的上限在设计阶段就已经被决定了。

以多年实践经验来看,一个比较成熟的团队,在开发测试阶段就能实现99%的可靠性。大部分公司将开发力量主要集中在业务模块,而工具开发往往忽略,因为没有产生直接的经济利益,所以多直接选用开源工具。开源工具主要着眼于公共领域,解决通用问题,并不能解决自身业务特定领域的问题。

在开发测试阶段要提高系统可靠性,核心就四个字:少写多测。少写就是少写业务代码,少写少犯错,也就是老生常谈的代码复用,公共代码下沉为业务库或者公共服务。这几年很火的中台,也是为了减少业务代码。业务代码通常占系统代码80%以上,而且变化快,需求多样,所以测试资源平均下来就相对变少。虽然单个系统代码比较多,但由于是通用组件,场景单一,被动测试反而更加充分,出现故障概率低。配置管理和自动化构建这两个比较纯粹,网络上资料足以覆盖,无需赘述。多测的核心不是指投入测试资源,在大多数公司里,测试人员比开发人员要少很多。关键是测试案例能够随着时间,而不断累积。自动化测试在这里是一个很重要的解决方案,如果没有健全的自动化测试方案,全回归基本上是奢望。微服务在自动化测试方面有天然的优势,我曾经介绍过《风洞系统》的构想,专门做自动化测试通用解决方案。

自动化部署只解决手工发布可能引发的故障,任何一次发布新系统,会在开发测试阶段引入新的故障点,然后在运维阶段触发这些故障,而不发布也是不可能的。在发布阶段提高系统稳定性的核心是:并行运行,早发现早隔离。他的方法论很多,蓝绿部署,灰度发布,滚动部署等等。K8S是集成环境,不单是解决调度迁移问题,也顺便解决了部署问题。据说,阿里内部有一套系统,借鉴了git原理,可以做增量部署,减少网络传输。这些都是好主意,但现在首先要讨论一般性原理,特别对于金融系统,尤其是交易系统。

除了常见开发、测试、生产环境外,对于可靠性要求高的,还要加入stage环境,我称之为仿真环境。其他环境不需要说太多,基本都会用到,但仿真环境的重要性也经常被忽略的。接过交易所数据的人都知道,在上线之前,一定要先接入到仿真环境,测试到稳定。仿真环境可以加入外面接口模拟器,比如模拟交易所,执行一些会改变数据的危险指令,既可以完成测试功能,又不会造成实际影响。

撇去各种名词概念,发布阶段的操作原则是先多批次少量发布,防止一下子发布太多,无法准确定位故障,即所谓的滚动部署;其实,用户也同样是分批次,即所谓的金丝雀部署。在交易系统中,由于涉及金额巨大,是不存在金丝雀的,所以仿真环境尤为重要。

最后一个运维阶段,除了类似K8S的自动调度迁移之外,最关键的手段是重启,估计说到这里,很多人都要会心一笑,也会有人不以为然,甚至颇为鄙视,但我要强调的是,这是在面对无法快速解决问题的最后保命手段,一定要好好地认真对待。有了这个保命手段,才有可能再考虑其他措施。通常运维都会部署一套监控系统,不论开源或者商业的监控系统,在公共领域,比如网络,内存之类做得比较成熟,但在私有领域,比如具体的业务,一般都不会涉及,这就需要团队自己开发了。这类业务监控的技术难度不高,但开发人员既需要了解业务规则,又需要了解程序的特点,这样就有点难度。多数团队都是在事故之后,补上这样的业务规则。

除了运维监控外,我更多的要强调系统预警。在这里怎么强调都不为过,因为基本上很少有团队能够做到预警,更多的是完全没有意识到预警的重要性。预警更多强调是趋势判断,为解决问题争取更多的时间。比如用户的增长趋势,可能会某个节点直接影响到网络带宽需求。而现有的监控多数基于阈值,而阈值的设定受经验值外,还容易频繁触发,导致监控人员注意力疲劳。在运维阶段,还有全链路追踪、监控、分析等手段,比如阿里的“鹰眼”。

运维是确保系统稳定性的最后一道防线,有很多内容可以探讨。当故障真实发生时,其实没有太多时间去思考,越简单的手段反而越有效。所以,要做事情,都要在上线之前做好,包括系统设计,运维工具,也包括流程管理,故障演练等。

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

微服务讲堂--【6】系统稳定性 的相关文章

  • 小样本元学习论文阅读 | Few-shot Learning with Noisy Labels, Facebook, CVPR2022

    目录 1 motivation 2 contribution 3 Static alternatives to the mean 1 空间中值原型 2 相似度加权原型 4 Learning a prototype aggregator 1
  • 解决Failed to download metadata for repo ‘AppStream’

    原贴 xff1a https www cnblogs com EthanWong p 15932675 html 在CentOS 8 上执行命令 sudo yum update 时报错 xff1a span class token punc
  • WebView自动H5缓存-清除缓存ios

    iOS的Webview加载HTML时会自动缓存JS CSS等文件 xff0c 当下次加载HTML时会根据请求的缓存策略是否使用缓存本地的JS和CSS xff0c 如果本地有缓存 xff0c 那么直接返回本地资源 判断是否过期 xff1b 如
  • 小样本学习论文阅读 | Confess: A framework for single source cross-domain few-shot learning, ICLR 2022 poster

    1 motivation 目前的方法在源域和目标域存在较大域间偏差时实用性较差 本文认为 xff1a 1 无监督学习可以缓解监督崩溃问题 xff0c 并且训练得到的模型可以更好地推广到目标域中 2 因为源数据集和目标数据集之间存在很大差异
  • 将VMDK格式的镜像转成qcow2

    将VMDK格式的镜像转成qcow2格式 1 我们要通过Linux虚拟机进行格式转化工作 在虚拟机中创建单文件可以提取出来VMDK格式 这是我自己的虚拟机创建出来的文件 2 我们找到我们创建好的虚拟机 通过我们远程连接工具进行上传到我们要转为
  • 如何做好一个项目经理

    第一部分 xff1a 软件项目经理的要求 首先是一个管理者 xff0c 其次熟悉某些工具 xff0c 某几种语言 xff0c 行业背景 xff0c 项目管理技能 软件项目经理面临的恶劣环境 xff0c 我们绝大部分软件企业运行在相对混乱的状
  • Cortex-M3利用SVC中断调用系统服务的例子

    SVC xff08 系统服务调用 xff0c 亦简称系统调用 xff09 和PendSV xff08 可悬起系统调用 xff09 xff0c 它们多用在上了操作系统的软件开发中 SVC用于产生系统函数的调用请求 例如 xff0c 操作系统通
  • Nginx + Tomcat + HTTPS极速配置

    由于最近在学习微信小程序开发 xff0c 所以在阿里云申请了一个免费的https证书 xff0c 这个证书申请起来十分简单 xff0c 大约十几分钟就好 所以不再赘述 更多信息可以访问我的个人网站 xff1a https www cjluz
  • Keil uVision5软件的操作与编写基础(入门)

    目录 x1f46c 一 如何新建一个空白文档 x1f46c 二 程序编写 x1f46c 三 编译程序 Keil uVision5是一款编写单片机程序的必备软件 其图标为 xff1a 一 如何新建一个空白文档 1 打开Keil uVision
  • 【工作笔记】Mysql写入报错:Incorrect datetime value: ‘1970-01-01 08:00:00‘

    在写入Mysql的timestamp格式列时 xff0c 将默认时间赋值为1970 01 01 08 00 00 xff1a new Timestamp 0L 此时报错 xff1a Incorrect datetime value 39 1
  • 【人脸识别】L2_Softmax Loss详解

    论文题目 xff1a L2 constrained Softmax Loss for Discriminative Face Verification 论文地址 xff1a https arxiv org pdf 1703 09507 pd
  • JS 常见的 6 种继承方式

    JS 常见的 6 种继承方式 第一种 xff1a 原型链继承 原型链继承是比较常见的继承方式之一 xff0c 其中涉及的构造函数 原型和实例 xff0c 三者之间存在着一定的关系 xff0c 即每一个构造函数都有一个原型对象 xff0c 原
  • MapReduce编程小案例.9th—join算法

    MapReduce编程小案例 9th join算法 数据 xff1a 有订单数据 xff1a order001 u001 order002 u001 order003 u005 order004 u002 order005 u003 ord
  • centos7 安装qt6,安装失败

    Error during installation process qt qt6 624 gcc 64 Could not find the required QmakeOutputInstallerKey qt qt6 624 gcc 6
  • ubuntu安装chrome浏览器

    1 xff09 使用自带的firefox打开 Google Chrome 网络浏览器 点击下载 xff0c 在linux下 xff0c 下载google chrome stable current amd64 deb 2 进入下载目录 su
  • maven xsd文件

    lt xml version 61 34 1 0 34 gt lt xs schema xmlns xs 61 34 http www w3 org 2001 XMLSchema 34 elementFormDefault 61 34 qu
  • 一个电子发烧友的程序员成长之路

    回想起高考已经是7年前的事情了 xff0c 一直想在毕业之际记忆记录一下7年的历程 xff0c 懒惰始终占据着我的整个身躯 看到这个征文活动 xff0c 让我有点想提笔记录的冲动了 1 邂逅 一直在想该用什么样的语言来将我对电子制作发烧程度
  • AI与医学辅助诊断

    人工智能一词越来越频繁的出现在日常生活中 一种事物的时髦 xff0c 必然有其背后的原因 而对于这样一个大的话题 xff0c 从整体上来叙述总显得有些不接地气 作为跟AI沾过一些边的博主将以自己接触的方面来发表一点看法 首先介绍一下 xff
  • 最优传输理论与计算 ——雷娜 顾险峰 【新书发布】

    缘起 1995年秋季 第二作者刚刚来到哈佛大学开始攻读计算机科学领域的博士学位 并在数学系学习丘成桐先生的微分拓扑课程 同时在麻省理工学院人工智能实验室学习Berthold Horn教授的机器人视觉课程 Horn教授提倡从物理的角度来理解视
  • 1.2.6 Linux distributions

    鸟哥的Linux私房菜 基础学习篇 xff08 第三版 xff09 第1章Linux是什么 xff0c 本章介绍为何Linux可以免除专利软件之争 xff0c 并且了解到Linux为何可以同时在个人计算机与大型主机上面大放光彩 本节为大家介

随机推荐

  • 全球40个免费电子图书馆网址~收藏

    中文 中图在线 xff08 提供 3600 种国外期刊的查阅服务 xff09 http cnplinker cnpeak com 国家哲学社会科学文献中心 xff08 提供 2039 种中文期刊 xff0c 7898 种外文期刊 xff09
  • 【docker】WSL+docker_desktop+GPU配置环境失败

    尝试windows下使用docker desktop安装深度学习的GPU环境 xff0c 结果很失败 xff0c GPU调用不了 我一共尝试两种方式调用GPU 第一种是新版本WSL2直接支持 xff0c 下载一个Nvidia官方的docke
  • public,private,protected 常见区别

    1 作用域public private protected 以及不写时的区别 答 xff1a 不写时默认为default 区别 作用域当前类 同一package子孙类其他packagepublic protected default pri
  • NETCONF协议netopeer软件安装与环境搭建

    NETCONF协议netopeer软件安装与环境搭建 目录 NETCONF协议netopeer软件安装与环境搭建 目录简介相关网站参考准备工作手动编译安装部份依赖包手动编译netopeer启动与验证 简介 最近工作涉及一些NETCONF协议
  • centos7 vnc黑屏解决办法

    手动安装的dbus与系统dbus冲突 xff0c 导致vnc启动黑屏 解决办法如下 xff1a 通过命令 find name 34 dbus daemon 34 查找安装的dbus 其中 usr bin dbus daemon 是系统自带的
  • OVS常用命令与使用总结

    OVS常用命令与使用总结 说明 在平时使用ovs中 xff0c 经常用到的ovs命令 xff0c 参数 xff0c 与举例总结 xff0c 持续更新中 进程启动 1 先准备ovs的工作目录 xff0c 数据库存储路径等 mkdir p et
  • 故障容忍分布式协调框架 Atomix

    Atomix 详细介绍 Atomix 是 JAVA8 的故障容忍分布式协调框架 Fault tolerant distributed coordination framework for Java 8 主要特性 xff1a list 可靠
  • 极几何,本质矩阵,基础矩阵,单应矩阵,相机投影矩阵

    什么是三角化 xff1f 三角化就是下图的红字部分 xff1a K和K 分别为两个相机的内参矩阵 什么是极几何 xff1f 极几何描述了同一场景或者物体在两个视点图像间的对应关系 下图中的O1和O2分别是两个相机的光心 xff0c 即摄像机
  • vncserver Cannot establish any listening sockets - Make sure an X server isn‘t already running(EE)

    说明vnc按顺序想要打开的可视化界面端口已被占用 xff0c 可以使用ps ef grep X命令查看一下进程里已经打开的图形化界面 xff08 有些是其他用户已打开的vnc xff0c 有些是系统默认已启用的图形界面 xff0c 不要随意
  • 如何处理linux Ubuntu网络不通的问题

    ubuntu 网络图标不见的问题解决方案 xff08 即无法联网解决方案 xff09 尝试以下操作 xff1a sudo service network manager stop sudo rm var lib NetworkManager
  • UCOSII学习---五、任务通信之信号量

    一 xff1a 信号量的理解 xff1a 信号量的本质是数据操作锁 xff0c 它本身不具有数据交换的功能 xff0c 而是通过控制其他的通信资源 xff08 文件 xff0c 外部设备 xff09 来实现进程间通信 xff0c 它本身只是
  • Python添加或去掉百分号

    数据 xff1a import pandas testing as tm data 61 tm makeDataFrame data 61 data iloc 5 示例数据 xff1a A B C D 6EBYVo9iQi span cla
  • MxNet(GPU版本)安装及相关配置(CUDA,CuDNN,Graphviz,d2l,虚拟环境配置)及最终建议

    深度学习框架MxNet配置 xff08 GPU版本 xff09 1 对应镜像 xff1a https mirrors aliyun com pypi simple mxnet 找到与自己电脑Python版本对应 xff08 命令行使用pyt
  • Kali Linux使用(含VMVare station player安装教程)

    VMware Workstation Player下载及安装配置 1 官方下载地址 xff1a VMvare Workstation Player 2 安装 xff1a 基本一路点 xff0c 需要注意的地方就是后面弄好了要重启一下 xff
  • 那些提升效率的tips(不定期更新中...)

    电脑插了网线可以上网却显示无internet 打开设备管理器 xff08 找不到在控制面板中搜索 设备管理器 xff09 找到网络适配器 选择网卡驱动程序 xff0c 先禁用设备再开启设备 xff08 重启 xff09 用MarkDownl
  • cmake的一个编译报错

    在一台新搭建的服务器上执行cmake的时候 xff0c 报了如下错误 xff1a cmake The C compiler identification is unknown The CXX compiler identification
  • 名词解释专用链接

    算法相关 xff1a 主元素 设T 1 n 是一个含有n个元素的数组 当 i T i 61 x gt n 2 xff0c 时称元素x是数组T的主元素 例如 xff0c T 61 1 1 1 2 5 5 1 1 1 1 xff0c T中有10
  • 微服务讲堂--【4】风洞系统

    一 系统特性 风洞是以人工的方式产生并且控制气流 xff0c 用来模拟飞行器周围气体的流动情况 xff0c 并可测量气流对飞行器的作用效果以及观察物理现象的实验设备 这个定义来自百度百科 xff0c 微服务和飞行器压根就搭不上边 xff0c
  • 微服务讲堂--【5】系统自举

    这里的 系统自举 借用了操作系统的概念 在操作系统启动之前 xff0c 计算机要先加载自举程序 xff0c 再由自举程序加载操作系统的启动程序 整个详细过程不在这里描述 xff0c 可以在网络查阅相关资料 为什么要在微服务系统中特别提及系统
  • 微服务讲堂--【6】系统稳定性

    稳定性 xff0c 通常是以可靠性来衡量 xff0c 即我们常说的几个9 xff0c 这个主题在之前各个系列文章中已经提到过 xff0c 本来没有打算单独写一篇 前几天一个老同事在群里发出一个灵魂之问 xff0c 如何解决生产环境更新系统后