站点可靠性工程之旅

SRE经过谷歌的实践和推广,已经被很多互联网公司所采用。如果想要实践SRE,成为SRE工程师,需要做好哪些方面的知识储备?本文介绍了SRE相关的技术,提供了大量有益的资源,有志于这一方向的同学可以以此作为技术发展路线图。原文:A Journey To The Site Reliability Engineering[1]

Mukuko Studio @ Unsplash

很多组织都已经开始采用站点可靠性工程(SRE,Site Reliability Engineering)实践来代替传统的运维。LinkedIn上最新的工作搜索显示,全球范围内有超过19万个SRE工程师职位空缺。

LinkedIn职位搜索

如果你还不熟悉SRE,那么可以看看谷歌是如何描述的~

SRE是当你要求软件工程师设计一个运营团队时所发生的事情。

SRE由7个重要原则定义 --

  • 运维是一个软件问题(Operations is a software problem)
  • 按服务水平目标管理(Managed by Service Level Objectives)
  • 尽量减少工作量(Work to minimize the toil)
  • 把今年的工作自动化(Automate this year’s job away)
  • 通过减少失败的代价来快速行动(Move fast by reducing the cost of failure)
  • 与开发者分享所有权(Share ownership with the developers)
  • 无论是什么职能或职位,都使用相同的工具(Use the same tooling, regardless of function or job title)

对于拥有运维支持、系统管理、基础架构、DevOps工程师等背景的人来说,SRE工程是一个很好的职业发展方向。

在本文中,我将提供各种资源,帮助你开始SRE工程师之旅。


掌握SLO的艺术(Mastering the Art of Service Level Objectives(SLOs))

为了旅程顺利,我们有必要从理解服务水平指标(SLIs, Service Level Indicators)服务水平目标(SLOs, Service Level Objectives)的概念开始。

SLI: 服务可靠性可量化度量
SLO: 为SLI设置可靠性目标

有很多关于SLI和SLO的资源,但我建议通过SLO艺术工作坊[2]来深入理解这一概念。

如果你是某个尝试采用SRE实践的组织的一员,那么我建议在组织内为有抱负的SRE开展这个工作坊。

工作坊旨在向你介绍如何以数据驱动、客观和以用户为中心的方式通过SLO和错误预算(Error Budgets)来度量和管理服务的可靠性。

工作坊可以指导我们选择正确的SLI,并通过案例帮助我们获得定义SLI/SLO的实践经验。

在学习的过程中,请保持开放的思维和新鲜的视角,因为我看到很多人认为SLI/SLO类似于他们使用的APM工具所做的基础设施监控,但事实并非如此!


云技术(Cloud Expertise)

根据Gartner的报告[3],超过75%的企业都有云优先战略。

来源-https://www.gartner.com/en/information-technology/insights/cloud-strategy

因此,熟悉AWS、GCP和Azure等云服务是非常必要的。

许多组织都在积极使用云技术进行应用程序现代化转型之旅,SRE被要求在这一转变过程中发挥重要作用。

在互联网上有很多像Udemy, PluralSight, Coursera, CloudGuru等网站来提升我们的知识储备。


基础设施即代码(Infrastructure as Code(IaC))

随着组织在云中迁移工作负载,高效、动态的管理基础设施的需求就更加突出了。因此,SRE应该拥有下面这样的IaC工具:

  • Terraform
  • Ansible
  • Chef
  • 等等

即使所有云服务提供商都有自己的SDK/Shell来管理服务,使用IaC工具仍然有很多好处。

下面的内容引用自《Quickly Deploy Applications Using Terraform With Kubernetes on GCP[4]》:

Terraform能够显示当前状态和期望状态之间的差异,这意味着一旦我们编辑了Terraform配置文件,就能看到将要做的改变。

Terraform不仅负责初始部署,还负责维护。我们可以使用命令轻松的创建、更新和删除跟踪的资源。

清理Terraform构建的所有东西非常容易。如果使用脚本,我们还必须编写一个清理脚本。但对于Terraform,可以简单的通过“terraform destry”命令来实现。

Terraform能够检查配置文件中声明的动作的顺序。这意味着,如果我们想运行基于Kubernetes的服务或部署,即使我们错误的声明了操作的顺序,Terraform仍然将首先创建集群。

你可以查看以下链接来了解关于这个主题的更多信息。

  1. https://learn.hashicorp.com/terraform
  2. https://www.ansible.com/resources/get-started

容器及容器编排平台(Containers & Container Orchraction Platforms)

由于SRE在应用程序部署中扮演着关键角色,所以了解容器和容器编排平台非常重要。

许多组织使用Docker和Kubernetes平台进行服务部署,可以在网上找到大量关于这个话题的资源。

这里有一些可以作为开始的链接:

  1. https://www.docker.com/101-tutorial
  2. https://kubernetes.io/training/

持续集成及持续部署(Continuous Integration & Continous Deployment(CI/CD))

SRE需要将尽可能多的工作自动化,为应用程序提供适当的CI/CD流水线是快速交付的重要部分。许多组织使用下面这样的平台:

  • GitLab
  • GitHub
  • Azure DevOps
  • Jenkins
  • 等等

因此,拥有建立CI/CD流水线的专业知识是一项基本技能。这些平台中有很多都支持免费服务,可以不用花一分钱就能自学。

这里有一些学习资源:

  1. https://about.gitlab.com/learn/
  2. https://lab.github.com/
  3. https://azure.microsoft.com/en-us/overview/devops-tutorial/

发布策略(Release Strategies)

来源-https://sre.google/workbook/canarying-releases/

作为SRE角色的一部分,我们需要不断为用户部署新特性。这么做的同时,还需要确保在部署新特性时没有消耗错误预算(Error Budget),因此需要熟悉如下发布策略:

  • 金丝雀发布[5]
  • 蓝绿发布[6]
  • 等等

熟悉特性标记(feature-flag)[7]的开发策略将增加优势。如果使用像Kubernetes这样的容器编排平台,可以使用Kubernetes的定义文件描述这些策略[8]

在谷歌的SRE工作手册中深入介绍了金丝雀发布的过程[9]


事故响应和非指责的事后剖析(Incident Response & Blameless Postmortems)

随叫随到是SRE的另一个重要职责。因此,SRE需要对事故响应流程有非常好的理解。

PagerDuty事故响应课程[10]涵盖了如下话题:

  • 什么是事故?
  • 事故级别
  • 事故管理的各种角色
  • 事故电话礼仪
  • 等等

将事故响应过程记录下来是很重要的,因为如果人们知道事故发生时如何应对,就能更好的管理突发事故。

PagerDuty还有另一个关于如何在SRE团队中培养非指责文化的课程[11],其中提供了一些非常详细的模板,可以用来执行无指责的事后分析。

强烈推荐这两门课程。


安全(Security)

因为SRE负责整个应用,对应用安全性有基本的了解总是好的。

强烈建议你熟悉下面提到的概念:

  1. OWASP Top 10[12]
  2. Application Threat Modelling[13]

对于自动化部署,SRE需要管理各种服务凭证,因此应该熟悉凭证管理工具,如HashiCorp Vault[14]或云原生加密管理解决方案,如Azure密钥库、谷歌加密管理器等。


文档(Documentation)

SREs需要确保所有重要的文件都定期更新,易于遵循,因此应该专注于制作高质量的文档,比如:

  • 运维操作手册(Operation Runbooks)
  • 发布/回滚文档(Release & Rollback documents)
  • 等等

谷歌提供免费的技术写作课程[15],建议大家在日常生活中学习并运用其中的原则,当然如果你有时间的话也可以报名参加有导师指导的培训课程。

另外,我也写过一篇关于工程师技术写作最佳实践的文章《软件工程师文档写作最佳实践[16]


灾难恢复测试/混沌工程(Disaster Recovery Testing / Chaos Engineering)

为了测试平台的健壮性,SRE还负责执行灾难恢复测试。谷歌将灾难恢复测试作为其健壮服务的一部分,《Weathering the Unexpected》[17]是一篇关于谷歌DiRT项目的详细文章。

最近Netflix的混沌工程理念变得非常流行,我在《Why Every Software Developer Needs to Learn Chaos Engineering》[18]里也写过关于混沌工程的内容。


非抽象大规模设计(Non-Abstract Large Scale Designs(NALSD))

当我们开始讨论大型、复杂、分布式系统时,谷歌已经设计了一个流程[19],可以帮助SRE发展评估、设计和衡量大型系统的能力。

NALSD过程包含了问题陈述、需求收集,以及帮助评估大规模系统对不同故障模式的容忍度的迭代系统设计。

谷歌还提供了一个工作坊,带领我们了解分布式消息队列(如pub/sub)的系统设计,并解释如何对其实现NALSD原则。

我个人从中学到了很多。


社区

为了更多的向他人学习,并了解行业最新动态,建议加入以下在线社区:


结论

总的来说,SRE工程流程非常有趣,并且正在被许多组织所采用。

References:
[1] A Journey To The Site Reliability Engineering: https://deshpandetanmay.medium.com/a-journey-towards-site-reliability-engineering-7c893dae23ab
[2] The Art of SLOs: https://sre.google/resources/practices-and-processes/art-of-slos/
[3] The Latest Cloud Computing Technology and Security: https://www.gartner.com/en/information-technology/insights/cloud-strategy
[4] Quickly Deploy Applications Using Terraform With Kubernetes on GCP: https://medium.com/google-cloud/quickly-deploy-applications-using-terraform-with-kubernetes-on-gcp-6a4d7d142839
[5] Canary Release: https://martinfowler.com/bliki/CanaryRelease.html
[6] Blue Green Deployment: https://martinfowler.com/bliki/BlueGreenDeployment.html
[7] Feature Toggles: https://martinfowler.com/articles/feature-toggles.html
[8] Kubernetes Deployment: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/
[9] Canarying Releases: https://sre.google/workbook/canarying-releases/
[10] PagerDuty Incident Response: https://response.pagerduty.com/
[11] PagerDuty Postmortems: https://postmortems.pagerduty.com/culture/blameless/
[12] OWASP Top 10: https://owasp.org/www-project-top-ten/
[13] Application Threat Modelling: https://deshpandetanmay.medium.com/threat-model-what-is-that-b45eac2c4104
[14] Vault: https://www.vaultproject.io/
[15] Technical Writing Courses for Engineers: https://developers.google.com/tech-writing/
[16] Best Practices When Documenting Your Code for Software Engineers: https://betterprogramming.pub/best-practices-when-documenting-your-code-for-software-engineers-941f0897aa0
[17] Weathering the Unexpected: https://queue.acm.org/detail.cfm?id=2371516
[18] Why Every Software Developer Needs to Learn Chaos Engineering: https://betterprogramming.pub/why-every-software-developer-needs-to-learn-chaos-engineering-ef08992f4354
[19] Introducing Non-Abstract Large System Design: https://sre.google/workbook/non-abstract-design/

你好,我是俞凡,在Motorola做过研发,现在在Mavenir做技术工作,对通信、网络、后端架构、云原生、DevOps、CICD、区块链、AI等技术始终保持着浓厚的兴趣,平时喜欢阅读、思考,相信持续学习、终身成长,欢迎一起交流学习。
微信公众号:DeepNoMind

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,430评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,406评论 3 398
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,834评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,543评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,547评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,196评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,776评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,671评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,221评论 1 320
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,303评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,444评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,134评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,810评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,285评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,399评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,837评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,455评论 2 359

推荐阅读更多精彩内容