第六篇:稳定性之提升团队潜意识【减少人工操作、敬畏之心】

本文主要是介绍第六篇:稳定性之提升团队潜意识【减少人工操作、敬畏之心】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

减少人工操作

减少人工干预是对系统的配置变更、测试、部署等等,对线上的所有的操作尽可能减少人工操作,这里说的人工操作是不建议直接对线上操作,可以通过平台、工具、自动化等可视化的方式操作,这样可以降低操作失误的风险,因为人工操作时掺杂太多不可控因素等等,而这些因素都可能导致操作失误,出现风险,造成事故。

配置变更

对线上配置进行变更,配置包括基础配置(数据库配置、缓存配置)、各种功能开关、其他文案的配置、服务通信地址配置等等。

传统的做法是配置变更可以通过git代码库方式进行管理包括版本,便于旧版版本对比回滚等,传统的做法显然是可行的方法,随着业务的发展,架构不断升级,分布式演化,服务数据量不断增多,那么传统做法的缺点也就是很凸显了,缺点如下:

    ■ 每次配置变更都需要发版部署。
    ■ 时效性不够,原因是发布和部署不是随时可以操作的,需要等窗口期。
    ■ 局限性:无法支持动态调整,例如开关这类配置。
    ■ 容易出错、无法快速回滚。

为了解决上述问题,配置变更演进成了分布式配置中心,其实将手动操作这类东西,做成平台化,平台化的好处是可以通过权限、版本对比、提升时效性,随时可以变更,审核机制,完全吊打传统的方式,这种方式简直太舒服了。同时也降低了人为操作风险的可能性,还可及时回滚,版本比对等等。

业界流行的平台有:Apollo、Nacos、Spring Cloud Config等等

CICD

测试的全流程覆盖最好能做到全自动化,很多测试用例可以沉淀下来,用来做全流程回归,当然这需要系统支持。我也见过太多犹豫QA没精力进行全流程回归而导致问题没有提前发现而产生的事故,所以测试的原则是尽可能自动化和全流程覆盖,让宝贵的人力资源投入到只能人工测试的环节。

部署也是如此,如果所有的部署都需要人工干预,那么整个过程很不爽,成本非常高,并友好,失误概率也很高,一旦操作失误也无法快速回滚,整个部署严重影响线上的稳定性,为了解决这种问题,演进至今的CICD持续集成持续部署,CI有助于降低风险,通过自动处理项目不同开发人员的代码变更实现生产均等化。另一方面,CD使开发人员能够无缝地将集成代码交付给生产,从而提供快速有效的自动化流程,以便在不费工夫的情况下向客户发布新功能和更新。好处如下:

    ■ 卓越的代码质量
    ■ 减少变更和审核时间
    ■ 加速发布周期
    ■ 故障检测和隔离
    ■ 增强测试可靠性
    ■ 减少任务堆积
    ■ 改善平均解决时间

业界流行的平台有:GoCD、GitLab CI、Jenkins等等

举例:很多奶茶店或连锁店,可以快速扩张的原因是将自己餐饮标准化、流程化之后,可以将这些东西下发到各个分店,分店按照配比调料搭配即可,举这个例子是想说明:在架构设计或者变更之类操作,尽可能减少人工操作,将操作的动作标准化、流程化,这样一方面可以降低失误的概率,另外可以降低人力成本,可以去做更多需要人的事情。

小结

减少人工操作是因为人工操作,掺杂太多不可控因素,操作也非标准化,更不提流程化了,这样操作失误的概率大大增加,只有将操作和标准化、流程化这样才能减少操作失误的概率,从而提升稳定性,整体的演进目标是简单化、标准化、流程化、平台化、自动化,基于是标准化和流程化的操作,可以大大降低操作的失误概率。​

敬畏之心

心有敬畏者,方能行有所止,进而行之高远。对于稳定性建设也是如此,而敬畏之心,就是谨言慎行,遵守规章,就像一根底线时刻在警示我们,所谓“千里之堤,溃于蚁穴”,意味着失去敬畏,便有随时面临巨大损失的风险,不论是架构设计、还是做业务、稳定性建设,线上变更都要心存敬畏。

例如:线上环境是运行用户正在使用的系统环境,如果我们粗心的进行变更操作,或意识不到线上环境的重要性,或变更操作可能存在的风险,或可能带来其他的风险,也有可能导致线上机器宕机,出现重大生产事故,让用户受到重大损失,带来不好的体验,敬畏说的是对线上变更操作需要慎重,考虑周全,对所变更的操作合理评估,及可能存在的风险,及预案都考虑到位,应不断回顾检查、梳理反思。

可参考,变更操作的checklist,自我拷问:
  ○ 变更内容是什么?可能带来哪些影响?影响范围?影响用户群体?
  ○ 变更操作路径是否合乎流程规范?
  ○ 变更操作是否需要double-check?
  ○ 变更操作失败是否可以快速回滚?
  ○ 变更操作操作是否可以小范围验证?
  ○ 变更操作内容是否需要先后顺序?
  ○ 变更操作可能需要哪些业务方关注?

再例如:在架构设计使用某些技术或者中间件,如果对该技术不深入了解,包括应用场景、特性、有什么优缺点,或者了解一点,对很多默认的参数配置,不去针对参数了解,直接使用的话,必然将会带来风险,敬畏是就像一根底线时刻在警示我们,通过不断自查、分析、总结,我们能更审慎地控制风险,自我约束,不怕繁琐。

为什么会没有敬畏之心?我认为有以下原因:

  • 不知道自己不知道
  • 知道自己不知道或者不确定,但有试错的资本
  • 人生太顺,没有体验过失败或者挫折

小结

敬畏是一种态度,在架构设计或稳定性建设,我们也要心存敬畏,就像一根底线时刻在警示、不断鞭策我们,通过各种手段和方法,避免风险。海因里希法则告诉我们,一次重大事故的背后必然有一百次未遂事件和几十次轻度损失。这个法则对于我们有两个启示:一是事故的发生必然有其关联起因和先发信号;二是事故发生前一定有足够的提示,我们要及时遏制苗头,防患于未然。

关于稳定性建设之道大纲速览

目录:关于【稳定性建设之道】大纲速览_jackl-CSDN博客从理论、方法、实践多维度阐述稳定性、从全局视野出发、由内到外、从组织到文化,从风险识别到风险预防、从面向失败到主动失败多个阶段,多维度去描述如何打造一个高可用的系统。https://blog.csdn.net/liu_dudu/article/details/122333724?spm=1001.2014.3001.5501

这篇关于第六篇:稳定性之提升团队潜意识【减少人工操作、敬畏之心】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/298857

相关文章

内核启动时减少log的方式

内核引导选项 内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"_

java学习,进阶,提升

http://how2j.cn/k/hutool/hutool-brief/1930.html?p=73689

动手学深度学习【数据操作+数据预处理】

import osos.makedirs(os.path.join('.', 'data'), exist_ok=True)data_file = os.path.join('.', 'data', 'house_tiny.csv')with open(data_file, 'w') as f:f.write('NumRooms,Alley,Price\n') # 列名f.write('NA

线程的四种操作

所属专栏:Java学习        1. 线程的开启 start和run的区别: run:描述了线程要执行的任务,也可以称为线程的入口 start:调用系统函数,真正的在系统内核中创建线程(创建PCB,加入到链表中),此处的start会根据不同的系统,分别调用不同的api,创建好之后的线程,再单独去执行run(所以说,start的本质是调用系统api,系统的api

JAVA用最简单的方法来构建一个高可用的服务端,提升系统可用性

一、什么是提升系统的高可用性 JAVA服务端,顾名思义就是23体验网为用户提供服务的。停工时间,就是不能向用户提供服务的时间。高可用,就是系统具有高度可用性,尽量减少停工时间。如何用最简单的方法来搭建一个高效率可用的服务端JAVA呢? 停工的原因一般有: 服务器故障。例如服务器宕机,服务器网络出现问题,机房或者机架出现问题等;访问量急剧上升,导致服务器压力过大导致访问量急剧上升的原因;时间和

Java IO 操作——个人理解

之前一直Java的IO操作一知半解。今天看到一个便文章觉得很有道理( 原文章),记录一下。 首先,理解Java的IO操作到底操作的什么内容,过程又是怎么样子。          数据来源的操作: 来源有文件,网络数据。使用File类和Sockets等。这里操作的是数据本身,1,0结构。    File file = new File("path");   字

MySQL——表操作

目录 一、创建表 二、查看表 2.1 查看表中某成员的数据 2.2 查看整个表中的表成员 2.3 查看创建表时的句柄 三、修改表 alter 3.1 重命名 rename 3.2 新增一列 add 3.3 更改列属性 modify 3.4 更改列名称 change 3.5 删除某列 上一篇博客介绍了库的操作,接下来来看一下表的相关操作。 一、创建表 create

封装MySQL操作时Where条件语句的组织

在对数据库进行封装的过程中,条件语句应该是相对难以处理的,毕竟条件语句太过于多样性。 条件语句大致分为以下几种: 1、单一条件,比如:where id = 1; 2、多个条件,相互间关系统一。比如:where id > 10 and age > 20 and score < 60; 3、多个条件,相互间关系不统一。比如:where (id > 10 OR age > 20) AND sco

PHP7扩展开发之流操作

前言 啥是流操作?简单来讲就是对一些文件,网络的IO操作。PHP已经把这些IO操作,封装成流操作。这节,我们将使用PHP扩展实现一个目录遍历的功能。PHP示例代码如下: <?phpfunction list_dir($dir) {if (is_dir($dir) === false) {return;} $dh = opendir($dir);if ($dh == false) {ret

浙大数据结构:树的定义与操作

四种遍历 #include<iostream>#include<queue>using namespace std;typedef struct treenode *BinTree;typedef BinTree position;typedef int ElementType;struct treenode{ElementType data;BinTree left;BinTre