来自 Gene Kim 的 7 个 DevOps 技巧

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

在过去的几周里,New Relic 在全国各地的城市举办了一系列 DevOps 路演,由 DevOps 专家 Gene Kim 领衔,他是 The Phoenix Project 的合著者, 也是 Tripwire 的创始人。 Gene 向与会者讲述了为什么 DevOps 如此重要,DevOps 如何在最大的企业中找到归宿,以及 DevOps 中运维部分的重要性。他还分享了自己得来不易的关于如何在各种组织中成功实施 DevOps 的技巧。

DevOps 技巧 #1:更频繁地部署较小的更改

根据 Gene 的说法,练习快速、简单、多次部署“使我们摆脱了部署复杂而痛苦的习得行为。我们的共同经验告诉我们,我们在生产中推动的变革越大,落地时造成的弹坑就越大。”为了使较小的部署工作,重要的是

  • 将功能发布与代码部署分离。
  • 使用功能标志在禁用状态下部署功能。
  • 要求所有开发人员每天(至少)将代码检查到主干中。
  • 练习部署较小的更改,这会显着降低风险并提高 MTTR

DevOps 技巧 #2:大胆地在生产中启用测试

关于生产测试的传统智慧是“这就是开发人员对操作人员所做的,因为他们讨厌我们。”但 Gene 说这实际上是一个游戏规则的改变者:

  • 当我们可以持续将禁用代码部署到生产中时,我们可以在功能发布之前很久就在类似生产的负载下进行测试。
  • 当我们使用弹性设计模式构建代码和环境时,我们可以排练和模拟大规模故障,以便我们做好准备(就像 Chaos Monkey

正如阿德里安·科克罗夫特 (Adrian Cockcroft) 所说的那样,“排练很关键,否则人们不知道该做什么。是的,当你站在停车场等待结束时,消防演习很烦人。但当建筑物真的着火时,当你站在停车场并且每个人都和你在一起时感觉很好,没有人被困在充满烟雾的房间里。”

DevOps 技巧 #3:构建一步式环境创建流程

  • 在开发过程的早期使环境可用。
  • 确保开发人员同时构建代码和环境。
  • 创建通用的开发、QA 和生产环境创建流程。

DevOps 技巧 #4:同步开发和运维的时间表

根据 Gene 的说法,将更新安排在一天的中午很重要,因为这时两个团队都在工作。不是在晚上、周末和节假日,当开发人员不在办公室而运维人员承担全部负担时。

DevOps 技巧 #5:改变冲刺的工作方式

“如果我有一根魔杖,”吉恩说,“我会改变敏捷冲刺和‘完成’的定义。”在每个冲刺结束时,我们必须拥有可工作且可交付的代码,并在类似于生产的环境中进行演示。”

DevOps 技巧 #6:版本控制对运维比对开发更重要

“使用版本控制的 Ops 比使用版本控制的开发人员对性能更重要,”Gene 说。那是因为环境中的配置设置比代码中的多,而且“大多数失败都与环境错误有关,而不是代码错误。”

DevOps 技巧 #7:分配 20% 的周期用于减少技术债务

根据吉恩的说法,如果你不支付 20% 的债务减免税,你最终将花费 100% 来解决累积的问题。虽然时间紧迫的公司的管理层可能会对他们认为的管理费用犹豫不决,但您需要的不仅仅是产品,您还需要一种能够正常工作且不会一直崩溃的产品。确保专柜知道以后需要多长时间才能解决这些问题,以及这会对业务造成怎样的伤害……您永远不想处于无法运送产品的境地。正如 Gene 所解释的那样,“这是您为获得出色的开发和运营而付出的代价。”