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

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

减少人工操作

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

配置变更

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

传统的做法是配置变更可以通过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

相关文章

Mysql表的简单操作(基本技能)

《Mysql表的简单操作(基本技能)》在数据库中,表的操作主要包括表的创建、查看、修改、删除等,了解如何操作这些表是数据库管理和开发的基本技能,本文给大家介绍Mysql表的简单操作,感兴趣的朋友一起看... 目录3.1 创建表 3.2 查看表结构3.3 修改表3.4 实践案例:修改表在数据库中,表的操作主要

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

Python使用DrissionPage中ChromiumPage进行自动化网页操作

《Python使用DrissionPage中ChromiumPage进行自动化网页操作》DrissionPage作为一款轻量级且功能强大的浏览器自动化库,为开发者提供了丰富的功能支持,本文将使用Dri... 目录前言一、ChromiumPage基础操作1.初始化Drission 和 ChromiumPage

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

Redis中管道操作pipeline的实现

《Redis中管道操作pipeline的实现》RedisPipeline是一种优化客户端与服务器通信的技术,通过批量发送和接收命令减少网络往返次数,提高命令执行效率,本文就来介绍一下Redis中管道操... 目录什么是pipeline场景一:我要向Redis新增大批量的数据分批处理事务( MULTI/EXE

使用Python高效获取网络数据的操作指南

《使用Python高效获取网络数据的操作指南》网络爬虫是一种自动化程序,用于访问和提取网站上的数据,Python是进行网络爬虫开发的理想语言,拥有丰富的库和工具,使得编写和维护爬虫变得简单高效,本文将... 目录网络爬虫的基本概念常用库介绍安装库Requests和BeautifulSoup爬虫开发发送请求解

Oracle存储过程里操作BLOB的字节数据的办法

《Oracle存储过程里操作BLOB的字节数据的办法》该篇文章介绍了如何在Oracle存储过程中操作BLOB的字节数据,作者研究了如何获取BLOB的字节长度、如何使用DBMS_LOB包进行BLOB操作... 目录一、缘由二、办法2.1 基本操作2.2 DBMS_LOB包2.3 字节级操作与RAW数据类型2.

JDK多版本共存并自由切换的操作指南(本文为JDK8和JDK17)

《JDK多版本共存并自由切换的操作指南(本文为JDK8和JDK17)》本文介绍了如何在Windows系统上配置多版本JDK(以JDK8和JDK17为例),并通过图文结合的方式给大家讲解了详细步骤,具有... 目录第一步 下载安装JDK第二步 配置环境变量第三步 切换JDK版本并验证可能遇到的问题前提:公司常