SRE Google运维解密 28-34章

news/发布时间2024/8/25 18:59:46

第四部分 管理

第二十八章 迅速培养SRE加入on-call

如何给新手带上喷气背包,同时保证老手的速度不受影响?

成功的 SRE 团队离不开信任一一为了维持全球化服务的正常运转,我们必须信任 on-call团队了解系统如何运行,可以诊断系统的异常情况,善于利用资源和寻求帮助,以及可以在压力下保持镇静快速解决问题。那么,仅仅考虑“新手需要学习哪些知识才能参与 "on-cal1” 是不够的,根据上述需求,我们还需要考虑以下问题:

  • 现有的 on-call 工程师如何能够评估新手是否已经准备好参加on-call?
  • 我们如何能够更好地利用新员工带来的激情与好奇心,使老员工也能从中获利?
  • 组织哪些活动不仅可以丰富团队知识,还能够获得大家的喜爱?
    image
    image
  • X 轴代表工作类型的范围,从抽象的,一直到具体的工作。
  • Y轴代表时间。从上至下,新加人的 SRE 通常对系统和服务知识了解很少,阅读之前故障的事后总结对他们很有帮助。新的 SRE 也可以试图从基本元素出发反向工程整个系统,因为他们本来对系统也没有任何了解。当学员对系统有一定程度的了解,并且已经进行了一些实际操作时,SRE 就可以参与见习 on-call了,同时可以修订文档中不完善或者过时的部分。

阅读上述图表的一些建议:

  • 正式参加on-call是SRE新员工的一个重要里程碑,在这之后,学习过程将基本靠自己主导,是未定义的——所以SRE 参与on-call之后的培训计划都是用虚线标注的。
  • 三角形的“项目工作”意味着新项目刚开始都很小,随着时间推移,复杂程度逐渐增大,所需投入也在增加,很有可能在参与on-call之后还会继续。
  • 这里的某些活动是抽象性的,还有些是被动性的。其他的一些活动,则是非常具体和非常具有主动性的。还有一些活动是混合型的。这样的安排是为了满足不同学习方式的人,让他们都能找到适合自己的活动。
  • 为了使培训效果最优,培训课程应该节奏合理:有些可以立即开始,有些则应该在SRE 正式参见on-call之前开始,而其他的则应该是持续性的,同时要求SRE老员工也参与的。在SRE正式参加on-call之前,应该处于持续不断的学习过程中

培训初期:重体系,而非混乱

SRE学员肯定会存在以下问题

  • 我现在正在做的是什么工作?
  • 我现在的进度如何?
  • 什么时候我能积累到足够的经验参加on-call?

系统性、累积性的学习方式

在系统中加入某种顺序性,以便新的 SRE 成员可以建立某种学习路径。任何类型的系统性培训都要比直接处理随机出现的工单和琐事要好,但是我们应该有选择地将一些理论性和实践性的学习组合到一起:一些新成员经常会用到的、系统的抽象概念应该优先而学员也应该尽早进行真实的实践操作.

了解任何一个技术栈,或者任何一个子系统都需要一个起始点。我们应该考虑将培训按照类似作用分组,还是按照常用的执行顺序分组。

目标性强的项目工作,而非琐事

常见的新手项目类似于:

  • 在服务技术栈中增加一个小的,但是用户可见的功能修改,接下来跟随这个修改直到发布到生产环境中。了解开发环境的配置和二进制文件的发布流程可以确保他们和开发团队联系密切
  • 针对现有的服务监控盲点增加新的监控。新手需要了解监控逻辑,同时将这些异常情况与系统知识相结合。
  • 选择一个还没有被自动化的痛点进行自动化,使得新的SRE 可以给团队成员减轻一些日常负担,从而受到团队的欣赏

培养反向工程能力和随机应变能力

反向工程:弄明白系统如何工作

统计学和比较性思维:在压力下坚持科学方法论

随机应变的能力:当意料之外的事情发生时怎么办

将知识串联起来:反向工程某个生产环境服务

有抱负的 on-call 工程师的5哥特点

对事故的渴望:事后总结的阅读和书写(事后总结如果被束之高阁是没有什么用的。每个团队必须收集,并目整理有价值的事后总结文档,将它们用于未来新手的教育材料。某些事后总结文档就是需要死记硬背的,某些事后总结文档可以作为“课程”进行教授,可以让学员了解大型系统的结构性弱点,或者新奇的故障方式,这些都是非常有价值的)

故障处理分角色演习(SRE成员身陷于各种监控图表组成的迷宫中,必须要解决用户请求延迟过高的问题,或者是防止数据中心崩溃,又或者是防止某个错误的 Google Doodle 被显示在网页上。)

破坏真的东西,并且修复它们

维护文档是学徒任务的一部分

对学员来说:

  • 这个文档可帮助学员了解运维系统的边界
  • 通过学习这个文档,学员可以了解系统的重要组件,以及背后的原因。当他们掌握了这些系统的知识之后,可以去了解其他更广泛的知识,而不是纠结于一些可以通过日后学习得来的细节问题。

对导师和管理者来说:

  • 学员的学习进度可以通过检查列表来反映,检查列表可以回答以下问题:
    一学员今天学习的是哪一节?
    一哪一节是最让人困惑的?
  • 对其他团队成员来说:文档成为一种社会契约,只有掌握这个文档的员工才能加入 on-call。这个学习检查列表成为一个知识的标准,所有的团队成员都必须符合这个标准。

在快速变化的环境中,文档可能很快就过期了。当学员开始熟悉学习列表的规范和格式后,会要求他们提供某一章节的修改部分这些修改必须经过列在表上的资深SRE的评审才能提交。

尽早、尽快见习 on-call(当一个报警发生时,新手SRE 并不是问题解决的负责人,这样可以让他们在没有任何压力的情况下进行操作。他们现在可以亲眼观察故障发展,而不是在事后学习。学员可以和主 on-call 共享一个终端,或者仅仅是坐在一起讨论。在故障解决后的某个合适时机on-call 可以和学员一起讨论背后的处理逻辑和过程。这种活动可以帮助见习学员记住更多细节。)

第二十九章 处理中断性任务

紧急警报、工单,以及其他的持续性运维活动

第三十章 通过嵌入SRE的方式帮助团队从运维过载中恢复

第一阶段:了解服务,了解上下文

第二阶段:分享背景知识

第三阶段:主导改变

第三十一章 SRE与其他团队的沟通与协作

只有在不得已的情况下才应该跨地域开发项目,但是这同时也会带来一定的好处。跨地域工作需要更多的沟通,工作完成得也更慢;但是好处是一一如果你能协调好的话——则会有更高的产能。单地项目其实也可能会导致其他人不知道你正在做什么,所以这两种做法其实都有一定成本。

第三十二章 SRE参与模式的演进历程(略)

第三十三章 其他行业的实践经验

灾难预案与演习

从组织架构层面坚持不懈地对安全进行关注

关注任何细节

冗余容量

模拟以及进行线上灾难演习

培训与考核

对详细的需求收集和系统设计的关注

事后总结的文化

将重复性工作自动化

我们所调研的各个行业在对待自动化的问题上各有不同。某些行业信任人多过自动化。美国核动力海军通过一系列交叉管理流程来避免自动化。例如,根据 Jeff Stevenson的经历,操作某个阀门需要一个操作员、一个监督员,以及一个船员与负责监控该操作的工程负责人保持通话。这些操作过程是极为人工化的,因为担心自动化系统可能不会发现人能注意到的问题。潜艇上的操作是由一条信任的人工决策链管理的一一一系列人而非单独一个人。核动力海军同时担心自动化和计算机运行速度太快,以至于它们可能造成非常严重且无法挽回的问题。当面对核反应堆时,缓慢而稳健的方法比快速完成任务更重要

第三十四章 结语

为什么飞行过程中的所有其他元素一一安全性、容量、速度、可靠性一一都发生了翻天覆地的变化,而仍然只有两名飞行员呢?这里的答案与Google SRE 运维大规模、超复杂的系统的方法是一致的。飞机操作系统的人机接口都是精心设计过的,简单易用、易于学习,使得飞行员可以正常操纵飞机飞行。同时,这些界面又提供了足够的灵活性飞行员也经过了大量训练,使得他们可以很快、很可靠地应对紧急情况。飞机驾驶舱是由理解复杂系统的人设计的,他们知道如何用一种可扩展的、易于理解的方式给飞行员提供数据。飞机中的系统都具有很多本书中提到的各种特性:高可用性、性能极度优化变更管理、监控与报警、容量规划,以及应急处理。

最终,SRE的目标也是如此。SRE 团队应该越精简越好,他们所操作的东西应该更抽象而非更具体。SRE 团队依赖各种后备系统和精心设计的 API来运维。同时,SRE也应对系统的运作原理、运维方式、故障模式以及应急处理方式非常了解一一这些都是在日常工作中学到的。

附录F 生产环境会议记录示范

image
image
💮💮💮完结撒花💮💮💮

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

如若内容造成侵权/违法违规/事实不符,请联系连锁易网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

Java反序列化漏洞-URLDNS链分析

目录一、前置知识反射二、分析1. URL2. HashMap3. 解决一些问题反射修改字段值三、POC四、利用链 一、前置知识 菜鸟教程 Java 序列化 Java安全-反射 URLDNS链的作用就是在目标主机中可能存在反序列化输入的数据的地方,传入序列化后的URLDNS利用链,如果目标主机解析了这个URL…

每日一图——2023/12/29

每日一图——终于放假了本文来自博客园,作者:{Mr Q},转载请注明原文链接:https://www.cnblogs.com/Layout-QJS/p/17935799.html

JavaWebDay6

数据库:存储和管理数据的仓库 数据库管理系统:DataBase Management System(DBMS),操纵和管理数据库的大型软件 SQL:Structer Query Language,操作关系型数据库的编程语言,定义了一套操作关系型数据库的统一标准 关系型数据库 SQL简介 注意-- 注释内容 --与注释内容之间…

Volcano 原理、源码分析(一)

0. 总结前置 1. 概述 2. Volcano 核心概念2.1 认识 Queue、PodGroup 和 VolcanoJob 2.2. Queue、PodGroup 和 VolcanoJob 的关系3. Volcano 调度框架概览 4. 源码分析4.1 Action 实现在哪里? 4.2 从 main 函数入手看调度器启动过程4.2.1 入口逻辑 4.2.2 NewScheduler() 方法 4…

记录--经常被cue大文件上传,忍不住试一下

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助大文件上传主要步骤:获取文件对象,切分文件 根据文件切片,计算文件唯一hash值 上传文件切片,服务端保存起来 合并文件切片,前端发送合并请求,服务端将文件切片合并为原始文件 秒传,对于已经存在的分片,可…

debezium+kafka实现mysql数据同步(debezium-connector-mysql)

1.情景展示 在企业当中,往往会存在不同数据库之间的表的数据需要保持一致的情况(数据同步)。 如何将A库a表的数据同步至B库a表当中呢?(包含:新增、修改和删除) 往往不仅仅需要保持数据的一致性,还要保证数据的即时性,即:A库a表的数据发生变化后,B库a表也能立刻同步变…

数据结构实验代码分享 - 3

哈夫曼编码/ 译码系统(树应用) [问题描述] 任意给定一个仅由 26 个大写英文字母组成的字符序列,根据哈夫曼编码算法,求得每个字符的哈夫曼编码。 要求: 1)输入一个由 26 个英文字母组成的字符串,请给出经过哈夫曼编码后的编码序列及其编码程度。(编码) 2)采用上一问题…

leetcode 2706 购买两块巧克力

leetcode 2706 购买两块巧克力题目: 2706 购买两块巧克力 思路:找两个最小值。 分情况讨论代码 class Solution:def buyChoco(self, prices: List[int], money: int) -> int:# 遍历一遍,找2个最小值# 找一个最小值我们都会。# 找次小值,就分两种情况,假设minPrice是最小…

开发商城小程序具有哪些模块和功能?(临沂软件定制开发-艾思软件)

随着移动互联网的发展,微信小程序已经成为了企业、商家和开发者的重要工具。商城小程序作为微信小程序的一种类型,为商家提供了一个全新的销售渠道。本文将详细介绍商城小程序的模块和功能,并附带相关代码。 一、商城小程序的模块首页模块:展示商城的热门商品、优惠活动等信…

01.Shiro基础概念以及快速入门

概述 Apache Shiro 是一个功能强大且灵活的开源安全框架,可以干净地处理身份验证,授权,企业会话 Management 和加密。 Apache Shiro 的首要目标是易于使用和理解。安全有时可能非常复杂,甚至会很痛苦,但不一定如此。框架应尽可能掩盖复杂性,并公开干净直观的 API,以简化…

H5前端特殊艺术字体文件太大,可通过font-spider压缩

原理: 1.爬行本地 html 文档,分析所有 css 语句 2.记录@font-face语句声明的字体,并且记录使用该字体的 css 选择器 3.通过 css 选择器的规则查找当前 html 文档的节点,记录节点上的文本 4.找到字体文件并删除没被使用的字符 5.编码成跨平台使用的字体格式 简而言之:就是爬…

H-ui JQuery 给单选按纽赋值不生效

H-ui JQuery 给单选按纽赋值不生效 $("#sex-1").attr(checked,true)原因,iradio-blue 样式的原因 把下面代码注释掉就可以了 $(.skin-minimal input).iCheck({checkboxClass: icheckbox-blue,radioClass: iradio-blue,increaseArea: 20% });<div class="fo…

dockerfile多阶段构建最小镜像

如何将Go项目与Docker结合实现高效部署 原创 云原生Go 源自开发者 2023-12-29 07:00 发表于广东 听全文源自开发者 专注于提供关于Go语言的实用教程、案例分析、最新趋势,以及云原生技术的深度解析和实践经验分享。 56篇原创内容公众号在现代软件开发中,使用Docker部署应用程…

Spring Boot邮件发送教程:步步为营,轻松实现图片附件邮件!

通过Spring Boot构建一个功能强大的邮件发送应用程序,重点是实现发送包含图片附件的邮件。我将逐步介绍添加必要的依赖、创建邮件服务类和控制器的步骤,并提供了具体的示例源代码。跟随这个简单而清晰的教程,您将能够轻松地集成邮件发送功能到您的Spring Boot应用中。 步骤 …

汇编-压缩BCD的算术运算

(这里讨论的指令仅适用于32位模式下的编程。)压缩二进制编码的十进制整数,或者称为压缩的BCD整数, 在每个字节中存放两个十进制数字。回忆一下在第1章中讲到的关于二进制编码的十进制整数的内容。为了简化代码编写, 我们只使用无符号BCD数。数值以小端序存放,最低十进制数字…

InterSystems 数据库的存储过程存在哪里

我们都知道 InterSystems 的 Studio 可以创建存储过程。但这个存储过程我们保存的时候是保存在哪里? 存储逻辑 如果我们在 Studio 创建存储过程的话,存储过程是存储在数据库上面的。 本地文件夹中是没有存储的。 选择系统下面的存储过程,然后选择 Go 去查看系统中存储的存储…

自动查询12306余票,结果以txt形式放到nginx网站目录下

1 #!/bin/bash2 3 # yum install glibc-common jq4 5 6 date=2024-01-017 from=BJP8 to=HBB9 10 echo -en "$date from $from to $to \n查询时间:$(date)\n\n" > /usr/share/nginx/html/tmp.txt 11 echo -en "1(硬座) | 2(软座) | 3(硬卧) | 4…

羽毛球比赛规则

from random import random print(学号后两位:47) print(22信计1晁丽 ,2022310143047) def first(): print("这个程序模拟两个选手A和B的羽毛球竞技比赛") print("程序运行需要A和B的能力值(以0到1之间的小数表示)") def second(): a = float(input(&q…

西游记jieba分词

import jiebatxt = open("西游记.txt", "r", encoding=utf-8).read()words = jieba.lcut(txt) # 使用精确模式对文本进行分词counts = {} # 通过键值对的形式存储词语及其出现的次数for word in words:if len(word) == 1:continueelif word in ["大…

ArcGIS打开工具箱未响应问题

有时,打开工具箱的工具时,出现未响应的情况,主要以下规律: (1)所有工具都可能出现这种情况,与工具的功能无关; (2)不是每一次都会出现这样的情况; (3)从目录窗口中打开工具会出现这种情况,从ArcToolbox窗口打开不会出现。不知道是什么原因,遇到这种情况,一般把…
推荐文章