站点可靠性工程之旅

2022-03-05  本文已影响0人  DeepNoMind

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工具:

即使所有云服务提供商都有自己的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流水线是快速交付的重要部分。许多组织使用下面这样的平台:

因此,拥有建立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),因此需要熟悉如下发布策略:

熟悉特性标记(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需要确保所有重要的文件都定期更新,易于遵循,因此应该专注于制作高质量的文档,比如:

谷歌提供免费的技术写作课程[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

上一篇下一篇

猜你喜欢

热点阅读