《Google SRE》读后感
注:这是去年国庆时的一篇读书笔记,最近线上故障频繁,重新读了下这篇读书笔记,觉得《Google SRE》非常棒,遂从简书再搬家到博客园,希望大家受益。我的简书地址:daoqidelv
国庆长假,出门太堵,遂待在魔都,花了三天时间将《Google SRE》中文版翻了一遍,好书一本,不管是开发人员、运维人员还是架构师,都可以读一读,受益匪浅的。
鉴于自己是做开发的,所以对于运维相关流程化的内容没有涉猎。不过这部分内容对于运维leader应当是大有裨益的。
SRE是个全能手,DevOps的实践者
SRE全称:Site Reliability Engineering,翻译过来就是:站点可靠性工程师。SRE的职责确保站点的可用,为了达到这个目的,他需要对站点涉及的系统、组件熟悉,需要关注生产运行时的状态,为此,他需要有很多工具和系统支撑其完成上述工作,比如自动化发布系统,监控系统,日志系统,服务器资源分配和编排等,这些工具需要他们自己完成开发和维护。
SRE是一个综合素质很高的全能手,需要懂服务器基础架构、操作系统、网络、中间件容器、常用编程语言、全局的架构意识、非常强的问题分析能力、极高的抗压能力(以便沉着高效地排障),他们还需要懂性能调优理论...
SRE的工作是Develop+Operate的结合,SRE是DevOps的实践者,他们的工作内容和职责和传统运维工程师差不多:发布、部署、监控、排障,目标一致。但是SRE的手段更加自动化,更高效,这种高效来源于自动化工具、监控工具的支撑,更因为其作为这些工具的开发者,不断优化和调整,使整个工具箱使起来更加得心应手,这也是DevOps的魅力所在。
分布式环境运维大不同于传统运维
我的理解:在分布式环境下,系统的复杂度增大、维护目标增多,按照传统的手工或者半自动维护来做,是不行的。所以,需要转变思路:
事务性的工作工具化。比如:版本发布、服务器监控;
让系统自反馈。完善的监控告警机制,完善的日志记录和分析体制,可视化系统的健康状态,使得系统变得可追踪和调校;
分布式策略应对巨量运维对象。负载均衡、流控、数据完整性、批处理的变得不一样,需要重新设计和实践。同时,更要重视连锁式故障。
分布式系统的核心——分布式共识
分布式共识问题是指“在不稳定的通信环境下一组进程之间对某项事情达成一致的问题”。
分布式共识系统可以用来解决:领头人选举、关键共享状态、分布式锁等问题。或者绝对点,所有的分布式问题都应当考虑到分布式共识的问题。
分布式共识的理论基础和实现都不是很好理解,抽时间搞清楚是大有裨益的,这里罗列一下几个关键词:
拜占庭问题
可复制状态机
Paxos算法
Zookeeper
Chubby
监控很重要!很重要!很重要!
监控是SRE眼睛的延伸。
监控系统应当解决两个问题:现象(什么东西出故障了?),原因(为什么出故障?)
现象—— 用户可感知的现象,比如:登陆不了、支付订单变慢;
原因—— 造成现象的潜在因素,可能只是中间因素或者相关因素,并非根本原因,根本原因需要SRE介入分析并确定。比如:login 服务CPU超过警戒值,订单服务器的CLOSE_WAIT状态的TCP链接数猛增等等。
四个黄金指标:时延、流量(PV)、错误、饱和度(服务器资源使用情况)。前三个是对服务进行监控,后一个是对服务器进行监控,当然也可以包含容器的状态监控,比如线程池、GC等。
几条箴言:
指标简化到不能再简化
关注长尾现象,要时延分布,而不是平均时延
慎重发出紧急警报,预防“狼来了”现象,紧急警报都是课操作的,且不能惯性得出结论的问题
警报不要重复,避免浪费SRE的注意力
排障
定位故障点。合理判定问题的严重程度,尝试尽快恢复服务或者缓解问题。
借助监控工具和日志工具检查系统或者服务状态。服务时延和错误率、系统资源使用状态情况、日志统计分析
逐层检查和分解问题,解析问题现象,不断假设/验证地进行诊断,找到根本原因
发布
自动化发布应当作为基础设施,第一优先级建设,他的重要性和自动化测试一样。之前参加的“软件工程的精益化管理”课程实验中,实践证明了自动化工具的威力很大,能够明显提升整个团队的生产力。
关于自动化发布的内容和分享网上非常多,而且国内各大互联公司分享出来的材料也是汗牛充栋,用到是可以学习。
反思 and 总结
这两个优点对于SRE很是重要,反思使得SRE从失败中学习教训,总结使SRE从时间中获得经验,个人和团队需要学习和践行这种精神,但是对事不对人。
Google的做法是:时事后总结机制。
避免指责,提供建设性意见,充满正能量
事后总结报告需要评审,避免低质量的事后总结带来负面影响
google的事后总结模板
追本溯源、怀疑一切
SRE是天生怀疑论者,怀疑一切,眼见为实,追本溯源是本性,感觉自己的性格还蛮适合的~
拥抱风险
传统运维是厌恶风险的,但是开发和产品却更关注变化速度,他们都希望迭代速度越快越好,但是这回给系统运行带来风险,所以这天生是矛盾。
为了解决风险和变化的矛盾,google提出了SLI-->SLO-->SLA的机制。
SLI——服务质量指标,如:延时、吞吐量、错误率、可用性等
SLO——服务质量目标,服务的某个SLI的目标值,或者目标范围。比如:SLI<=目标值,min=
SLA——服务质量协议(Agreement),服务(SRE)和用户(开发、产品)之间的一个明确的、或者不明确的协议,描述了在达到或者没有达到SLO之后的后果。或者可以转化为先行的KPI,比如系统可用性99.99%等。
开发和运维针对某个系统协商好一个SLA后,大家有一个量化的指标,一旦出现冲突时,算一下,看看是否违反SLA,如果违反,那么就升级走流程。这样既灵活,也有章可循。如果开发团队牛逼,代码质量高或者运气好,你可以迭代快,反之你需要慢点来,间接地,大家都对线上系统负责了。
反直觉的真理
1、不要承诺你的系统100%可靠。
因为这样会要其他人过分依赖于你,一旦你出问题,那么将成为众矢之的,相反的,你应当对自己的系统了如指掌,比如能承受的压力,可用性目标,一些明显的坑,一些不支持的属性等,广而告之。
2、有意识地破坏你的系统
不同于演练,而是真实生产系统,在可控范围内,人为制造故障,然后在有人值守的情况下,找到系统的短板和问题。这样等到真正的故障来临时,可以有章可循,快速解决问题。
主动暴露自己的不足好于别人突然揭发你,当然更重要的是要及时纠正不足。
线上排障实践
《Google SRE》读后感的更多相关文章
- 《DevOps软件架构师行动指南》读后感
从软件架构师视角讲解了引入DevOps实践所需要拥有的技术能力,涵盖运维.部署流水线.监控.安全与审计以及质量关注,这是本书一开始内容简介的开头,本书的作者是伦恩·拜斯(Len Bass).英戈·韦伯 ...
- nodejs开发指南读后感
nodejs开发指南读后感 阅读目录 使用nodejs创建http服务器; supervisor的使用及nodejs常见的调式代码命令了解; 了解Node核心模块; ejs模板引擎 Express 理 ...
- DevOps:软件架构师行动指南(文摘)
第一部分 背景 第1章 DevOps是什么 第二部分 部署流水线 第三部分 横切关注点 第四部分 案例研究 第五部分 走向未来
- 2020年DevOps工程师入门指南
DevOps兴起于2010年代,到现在DevOps已经在行业中拥有了一席之地,并在继续发展壮大. 有兴趣成为一名DevOps工程师吗?如果想要成为一名DevOps工程师,需要做到以下五点: 要有开发者 ...
- 5月29日 Java性能调优指南 读后感
并行垃圾收集器 串行垃圾收集器 并发标记清除(CMS)垃圾收集器 Garbage First(G1)垃圾收集器 没有深入的学习G1的原理,只是看了大概的思想; SA工具:待学习
- 敏捷开发、DevOps相关书籍——书单
自己瞎整理的一些书单,都是豆瓣评分比较高的书,可以作为选择的一个参考. 书名 豆瓣链接 持续交付:发布可靠软件的系统方法 https://book.douban.com/subject/6862062 ...
- 有奖试读—Windows PowerShell实战指南(第2版)
为什么要学PowerShell? Windows用户都已习惯于使用图形化界面去完成工作,因为GUI总能轻易地实现很多功能,并且不需要记住很多命令.使得短时间学会一种工具成为可能. 但是不幸的是,GUI ...
- [转载]你所不了解的DevOps
DevOps开发运维训练营 一旦建立了创新的文化,即使那些并非科学家或者工程师的人——诗人.演员.记者——也能以团体的形式,接受科学文化的意义.他们信奉创新文化的概念.他们以促进这种文化的方式投票.他 ...
- 给 DevOps 初学者的入门指南
当我们谈到 DevOps 时,可能讨论的是:流程和管理,运维和自动化,架构和服务,以及文化和组织等等概念.那么,到底什么是"DevOps"呢? 什么是DevOps 随着软件发布迭代 ...
- CI Weekly #3 | 关于微服务、Docker 实践与 DevOps 指南
CI Weekly 围绕『 软件工程效率提升』 进行一系列技术内容分享,包括国内外持续集成.持续交付,持续部署.自动化测试. DevOps 等实践教程.工具与资源,以及一些工程师文化相关的程序员 Ti ...
随机推荐
- uvalive 3029 City Game
https://vjudge.net/problem/UVALive-3029 题意: 给出一个只含有F和R字母的矩阵,求出全部为F的面积最大的矩阵并且输出它的面积乘以3. 思路: 求面积最大的子矩阵 ...
- Java并发/多线程系列——线程安全篇(1)
创建和启动Java线程 Java线程是个对象,和其他任何的Java对象一样.线程是类的实例java.lang.Thread,或该类的子类的实例.除了对象之外,java线程还可以执行代码. 创建和启动线 ...
- The Nerd Factor SPOJ - MYQ5
The Nerd Factor Time Limit: 1000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu [Submi ...
- hdu1698线段树的区间更新区间查询
Just a Hook Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- Elixir游戏服设计一
在Erlang游戏服设计总结http://www.cnblogs.com/rubyist/p/5530575.html里, 我提到我想要的游戏服设计方法,希望以应用做为基础构建块.最近我在学习elix ...
- python检查IP地址正确性
一.自动动手,丰衣足食 #encoding=utf-8 import os,sys def check_ip(ipaddr): addr = ipaddr.strip().split('.') #切割 ...
- git忽略文件并删除git仓库中的文件
问题描述 不慎在创建.gitignore 文件之前的时候将文件push到了 git仓库,即使之后在.gitignore文件中写入新的过滤规则,这些规则也不会起作用的,git依然会对所有git仓库中的 ...
- 改变ListBoxItem选中的颜色
改变ListBoxItem主要是改变的style 下面直接看代码吧!!! <Style TargetType="{x:Type ListBoxItem}"> <S ...
- NDK Jni 开发(1)
1. 学习地址 http://my.oschina.net/lifj/blog/177087 http://www.cnblogs.com/devinzhang/archive/2012/02/29/ ...
- 59、jQuery初识
jQuery是由原生js写的所以说所有jQuery制作出来的效果都可以使用js做出来,jQuery出现的目的是为了优化代码,提高码代码的效率它将很多功能封装. 一.jQuery的认识 1.何为jque ...