本地或云端:选择合适的开发环境

150 阅读10分钟

云原生开发选本地还是云端?文章对比本地、远程个人和共享环境,强调优化云开发“人体工程学”,降低认知负荷。推荐mirrord等工具,实现本地开发无缝对接远程Kubernetes集群,解决复杂性、资源消耗、协作和迭代周期等痛点,提升Developer Experience,降低云成本,保障安全性。

译自:Local or Cloud: Choosing the Right Dev Environment

作者:Anita Ihuman

随着开发团队向云原生应用程序迁移,对优化的云开发工作流程的需求也急剧增长。事实上,截至 2022 年,93% 的组织主要基于云。但问题是:迁移到云原生开发,以及其迷宫般的分布式容器和微服务,并非完全一帆风顺。这种转变带来了新的挑战:平衡可扩展性、灵活性和开发者体验。

开发者经常感到不知所措,需要兼顾多个接口、逻辑和工作流程。为了真正发挥云原生的力量,组织需要的不仅仅是云基础设施;他们需要一个适合他们并符合他们需求的开发工作流程。这意味着投资合适的工具,构建智能流程,并建立强大的系统,从而简化开发团队的工作。

本文深入探讨了云开发的人体工程学,比较了各种工作流程,并展示了如何克服权衡,从而实现更顺畅、更高效的开发过程。

什么是云开发中的人体工程学?

在云原生开发中,人体工程学不仅仅是关于便利性,而是关于设计工作流程、工具和基础设施,以减少认知负荷、提高效率并加速软件交付。

与传统软件的人体工程学、数据存储、IDE、网络和语法简化不同,云开发的人体工程学扩展到临时环境、自助服务基础设施、流畅的测试和调试体验。此外,它还解决了现代云原生开发的挑战,例如管理配置漂移、导航多集群部署、处理微服务蔓延以及支持大规模并发使用。

优化云开发的人体工程学是为了最大限度地减少运营开销,并使开发人员能够像与本地环境一样无缝地与云资源交互。这意味着:

  1. 轻松的环境设置:开发人员应该能够开始编码,而无需与复杂的配置或冗长的设置过程作斗争。无摩擦的入门体验可以让他们更专注于开发而不是工具。
  2. 逼真的测试环境:可靠的测试需要访问类似生产的环境,包括数据库和文件系统,而无需手动配置或维护的负担。
  3. 与其他开发人员协作:无论是在同一办公室还是跨时区工作,开发人员都需要直观的方式来共享代码、审查更改和实时运行测试。
  4. 高效的调试和测试:现代云架构引入了复杂性。开发人员应该可以使用工具来快速排除故障并解决问题,即使在复杂的云设置中也是如此。

云开发工作流程比较

软件开发工作流程发生了很大变化。这是由复杂性的增加以及对效率、可扩展性和伴随云的安全性的日益增长的需求驱动的。如今,组织通常从三种主要工作流程中进行选择:本地开发以及远程个人和共享开发。每种方法都提供独特的优势和权衡,从而影响开发过程

  • 仅限本地开发: 开发人员在安装了工具、应用程序和依赖项的本地计算机上工作。Skaffold、Tilt 或 Docker Compose 等工具经常被使用。
  • 远程个人环境: 开发人员可以访问个性化的、持久的或临时的云环境。Okteto、Release 和 Bunnyshell 等工具可帮助设置这些环境。
  • 远程共享环境: 在这种方法中,开发人员在一个共享的、类似生产的环境中协同工作,该环境包含应用程序的所有资源(第三方服务、数据库、微服务),从而构成理想的测试环境。Telepresence、CodeZero 和 mirrord 等工具属于这一类。
环境位置本地计算机基于云,每个开发人员隔离具有对共享云环境访问权限的本地计算机
一致性容易出现由于依赖漂移和不匹配的本地设置导致的不一致隔离,环境之间存在很高的配置漂移可能性团队之间高度一致
计算分配高本地资源消耗按需为每个开发人员分配资源共享云资源
迭代速度迭代速度快,但取决于本地机器的性能和配置由于完整的环境启动,速度较慢更快,共享访问实时服务
入门和访问简单,熟悉的设置学习曲线陡峭,具有独立访问权限最小设置,共享访问

哪种方法适合您的组织

选择合适的开发环境取决于您团队的工作流程、项目复杂性和运营约束。每种方法(本地、远程个人和远程共享开发)都提供独特的优势和权衡,这些优势和权衡会影响生产力、协作和资源管理。让我们分解一下如何确定哪种环境最符合您团队的工作流程和优先级:

团队规模

对于小型团队(1-10 名开发人员)来说,本地开发是一种实用的选择,因为他们处理的是轻量级应用程序,因为它简单且成本低。但是,随着团队的扩展,维护协作和一致的环境变得越来越具有挑战性。对于处理更复杂的项目或需要访问专用资源的中型团队(10-50 名开发人员),远程个人环境提供了一个平衡的解决方案。

相比之下,远程共享环境更适合管理复杂基础设施或执行资源密集型构建和测试的大型团队(50+ 名开发人员)。这些设置能够自动扩展以处理不同的工作负载,而无需额外的硬件投资。

预算

对于预算紧张的组织来说,本地开发环境具有成本效益,只需要最少的预先投资。开发人员可以使用他们的个人计算机和现有工具来降低基础设施成本。相比之下,远程个人环境会产生 云基础设施和管理 的持续费用,使其预算不太友好。

远程个人和远程共享环境更适合具有灵活预算的组织。虽然这些选项涉及更高的前期成本,但它们通过改善协作、可扩展性和系统性能来获得回报,特别是对于更大或更复杂的项目。

规模

本地开发方法为较小的项目或当服务数量和整体基础设施最小时提供速度和简单性。它简单、经济高效且设置快速。但是,随着应用程序的增长和服务数量的增加,这种方法变得具有限制性。它在复杂的构建、大型数据库和微服务方面存在困难,使得维护一致性和可扩展性变得更加困难。

对于更大、分布式的应用程序,远程个人或共享环境提供了管理增加的工作负载并随着项目的发展保持效率所需的灵活性和可扩展性。

克服云开发权衡

mirrord 这样的远程共享开发工具弥合了本地和远程开发环境之间的差距,因此开发人员可以在本地工作,同时与他们的环境无缝交互。这种类型的开发人员体验解决了与所有本地和所有远程开发相关的许多挑战,为以下问题提供了解决方案:

  • 复杂的开发体验: 传统的本地开发通常需要开发人员模拟或模仿复杂的托管服务,从而导致不一致和不可靠的结果。借助远程共享环境,开发人员可以在类似生产的环境中与实际服务进行交互,从而确保更高的一致性和可靠性,而无需创建繁琐的本地副本。
  • 资源消耗: 本地开发环境需要大量的计算能力,从而给硬件和网络带宽带来压力。远程个人环境将此负担转移到云端,但通常需要完整的每个开发人员设置。远程共享环境通过将环境变量和数据库保留在远程环境中,同时仅在本地运行必要的子集来优化资源使用,从而减少了基础设施开销和本地机器的限制。
  • 糟糕的协作: 远程个人环境会隔离每个开发人员,从而限制了实时协作。同时,远程共享开发允许多个开发人员同时处理同一云服务,同时保持单独的交互。开发人员还可以连接到不同的远程 pod 以执行并行任务,从而提高工作流程效率而不会中断操作。
  • 迭代周期缓慢: 在远程个人环境中设置开发环境或上下文切换任务是一个耗时的过程,通常会导致工作流程中的延迟和效率低下。TideLift 在 2023 年进行的一项调查显示,超过 50% 的开发人员的时间都花在维护、复杂的配置和运营任务上。但是,借助远程共享环境,启动大约需要 15 秒,因此开发人员不会浪费时间等待推送-等待-查看周期,无论他们是使用 CLI 还是 IDE 扩展
  • 高昂的云成本: 使用云基础设施和资源的成本可能很高。使用远程个人环境的组织面临着巨大的成本,因为他们投资 Kubernetes 集群并为每个团队成员设置单独的环境。但是,借助远程共享环境,开发人员和组织可以享受共享环境,并为云提供商支付更少的费用
  • 安全性: 云开发通常会引起安全问题,尤其是在涉及敏感数据时。为了克服这个问题,组织可以采用混合方法,即开发人员在本地工作,但使用 mirrord policies 安全地访问集群资源。这将确保团队仅有权与暂存的特定部分进行交互

适应更好的开发者体验

最终,云开发的人体工程学就是优化关键的开发要素以减少认知负荷、最大限度地减少上下文切换、增强自助服务能力并全面改善开发者体验。

mirrord 将所有这些结合在一起,使开发人员能够在本地工作,同时无缝连接到远程资源。它允许团队在云测试中左移,同时避免了漫长的 CI/CD 管道,减少了设置时间,并允许直接从其 IDE 访问实时云条件。无论您是拥有简单应用程序的小型团队还是拥有复杂微服务的大型企业,选择正确的开发环境都至关重要。借助 mirrord,您可以跳过通常的权衡,提高团队的生产力,并采用一种混合方法,该方法可以根据您的需求轻松扩展,而不会产生通常的开销。