云原生开发涅槃之路

针对下一代开发者提升体验的云原生开发成熟度模型。

译自 A Roadmap to Cloud Native Development Nirvana,作者 Eythor Magnusson 是Garden的CTO和联合创始人,Garden制造了一个开源工具来加速Kubernetes上的开发和测试。Eythor通过交易是一名全栈开发人员,拥有十年的行业经验,他正在努力将......

云原生技术使我们能够在大规模下运行越来越大、越来越复杂的系统。容器确保了部署单元被整洁地封装并且在不同的运行时之间保持一致。Kubernetes 帮助确保这些容器在不同负载下都是健康和可用的。监控组件为系统的性能和行为提供了惊人的可见性。

但是,当公司投入资源采用这些技术时,开发者体验(DevEx)通常被忽略了。

公司正在意识到,虽然他们的生产系统更强大,但他们的交付流程已经放缓。“开发者体验负责人”现在是一个常见的头衔,而更大的公司甚至有整个开发者体验团队(通常但不总是与平台团队重叠)。

这就提出了一个问题,这些团队应该努力实现什么目标?云原生开发的开发者体验的新黄金标准是什么?他们拿谁来比较?有哪些工具可用?

Garden,我们从零开始就一直在考虑 Kubernetes 的开发者体验,即使它有时被认为是“第二天的问题”。根据我们学到的和我们合作过的团队的经验,我们为在生产中运行 Kubernetes 的团队开发了一个云原生开发成熟度模型。每个级别都有利弊,团队需要决定他们的最佳点是什么。

级别 0: 您没有类生产环境(在生产环境之前)

也许你全心全意相信紧密的 API 合同。或者你还没有达到那个阶段。无论哪种情况,你都应该有全部资源将你的技术栈部署到一个类生产环境中——毕竟这就是它在生产中的运行方式。

现在是思考将这些资源左移并赋予团队在沙箱环境中与完全运行的系统进行交互的好时机。

级别 1: 您有单个预发布环境

您有一个单独的预发布或用户验收测试(UAT)环境,在这里对变更进行部署然后再投入生产。这是一个很好的第一步,但问题在于维护负担很重,团队要么互相争抢资源,要么变更被排队从而拖慢了交付过程。

这种情况出奇地普遍,我们与许多非常有能力的团队合作过,他们最大的痛点就是排队等待的预发布环境。或者更糟的是,没有队列而是不同版本相互覆盖。

这可能是一个很大的瓶颈,对于大多数团队来说,推进到下一个级别是值得的。

级别2: 您在 CI 中有隔离的预览环境

在这个级别,每个拉取请求都会创建一个与生产环境类似的隔离预览环境。这些环境可以与利益相关者共享并由质量保证(QA)工程师进行测试。

一个主要好处是这为运行适当的集成和端到端测试开启了大门。这些测试需要隔离的类生产环境,在这个级别您就有了它们。

这非常有用,但你的开发人员可能很沮丧,陷入无休止的提交-推送-等待循环中。如果端到端测试不稳定(如它们经常是的那样),你的开发人员正在推送空提交以重新触发流水线。

如果它坏了,他们正在作出最佳猜测努力去修复事情,并希望最好的结果。根据你的流水线速度,整天可能就因推送-祈祷周期而丢失。

鉴于缓慢的反馈循环,工程师也可能在编写和维护集成和端到端测试时遇到困难。

级别 3: 您可以按需获取隔离的预览环境进行开发和测试

这与前一步类似,只是创建环境的步骤进一步左移了。

现在任何人都可以按需创建隔离环境,而不需要触发 CI 流水线。这使得开发人员可以在编写代码时检查和与他们的系统进行交互。更重要的是,他们可以按需运行集成和端到端测试,从而消除了工作流程中的许多摩擦。

我们正在取得巨大进步,但这个工作流程的问题是启动环境需要一段时间,特别是代码更改可能需要完全重建。你可以通过 shell 进入运行的服务并在那里进行更改来解决这个问题,但这是次优的开发者体验,如果 pod 重新启动,更改将会丢失。

与通过 CI 还是有改进,但我们可以做得更好。

级别 4: 您可以针对远程环境进行开发

在这一级别上,工程师针对一个完全远程的、隔离的、类生产环境进行开发。他们在本地做代码更改,而这些更改会实时同步到运行的服务上,无需重建或重新部署。

通常在实用性和反馈循环的速度之间存在权衡——但在这里你可以两全其美。

开发实例的 URL 也是唯一的,因此开发人员可以快速共享他们正在进行的工作或者看看其他人在做什么。这对协作非常有好处,因为开发人员可以检查其他命名空间中的资源和日志,并帮助他们的队友。

要达到这个级别需要付出努力,但它为一些非常有趣的工作流程打开了大门,并为团队中的每个人提供了以前只有运维人员才拥有的工具和功能。

我们目前就是处于这个阶段——Garden 的 DevOps 自动化平台帮助您实现这一目标。您可以在我的有关 Kubernetes 远程开发的文章中阅读到更多经验教训。

级别 5: 您在远程环境中进行开发

现在您正在做一些非常高级的事情。一切都是远程的,包括您正在编写的代码。您可以从任何设备,任何地方工作,而您的整个环境都经过精心策划。

有很多非常有趣的产品如 Coder、Gitpod 和 GitHub Codespaces 用于远程开发。但它们缺乏构建、部署和测试分布式系统和微服务的自动化。

将第4级的工作流与Garden等工具以及Coder等远程开发工具相结合,您可能就达到了Kubernetes开发者体验的启示。

实现云原生开发涅槃

实现云原生开发极乐与目的地一样重要的是过程,但像Garden这样的工具可以比您想象的更容易达到美好部分。

如果您想要快速达到第5级,我们使用Garden和Coder创建了一个示例项目,这样您就可以同时使用Garden按需的生产环境和Coder的自托管远程开发平台。这意味着您将能够完全远程开发任何复杂度的系统,并拥有即时的本地反馈。

使用您已经在生产和CI中拥有的相同工具和功能来赋能您的开发团队,不仅可以加快交付速度,还可以传播启发。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注