云端开发是个坑!4 年后,我们又回到了本地环境( 二 )


 
在 Lyft,大多数后端服务是用 Python 或 Go 语言开发的,而前端服务是用 Node 开发的:
 

  • 对于 Python 服务,通过使用不可变的虚拟环境进行隔离 。每次 requirements.txt 文件发生变化,都会构建一个新的虚拟环境 。
  • Go 服务利用 Go 模块工具链在 go run 或 go test 命令执行时自动下载和链接所有依赖项 。
  • 他们基于 nodeenv 构建了一个包装器,用于根据每个 Node 服务的元数据为其创建合适的环境 。
 
一些专门的服务,如数据存储,也在本地运行,通常会使用容器 。数据存储在启动时使用由服务所属团队维护的脚本来加载新数据 。
 
因此,在本地启动服务需要多个步骤 。通过手动来执行它们既乏味又容易出错 。Lyft 使用 Tilt 来协调服务的生命周期及其环境,避免通过手动执行所有的步骤 。每个服务都有一个 Tiltfile,用于描述在本地运行服务所需的步骤 。当工程师在 IDE 中修改了代码时,运行中的服务也会重新加载自己,从而进一步缩短内部开发循环 。
 
除了运行服务之外,还需要与服务发生交互 。由于 Lyft 使用了不同的传输格式,比如 gRPC、JSON/HTTP 和 protobuf/HTTP,因此向服务发出请求并不是那么简单 。工程师们使用 Lyft 开发的一个工具向本地服务发送请求 。这个工具可以与服务的 IDL 集成,因此可以利用工具的自动补全功能 。
 
最终结果 
自从将这个工具推广到整个公司以来,Lyft 工程师反馈非常积极 。
 
开发人员喜欢无需任何远程环境即可在笔记本电脑和 IDE 中运行测试的能力 。创建一个新的 Onebox 环境通常需要大约一个小时,但现在笔记本电脑环境始终可以运行测试,使用 Tilt 在本地启动服务只需几分钟 。
 
负责基础架构的高级软件工程师 Scott Wilson 说:“我们还观察到开发人员的行为转变,因为他们花费更多时间专注于测试他们的服务 。在测试本地服务时,用户可以直接向服务 API 发送请求,而不是通过移动应用程序与公共 API 对话 。这增加了开发人员对服务 API 的熟悉程度,并缩小了在出现错误时的调试范围 。”
 
而且让用户在他们的笔记本电脑上单独运行服务意味着真正减少所需的总计算资源 。“虽然成本不是这个项目的主要驱动因素,但不再为每个开发人员支付 Onebox 的 AWS 实例,我们最终节省了大量资金 。”
 
总的来说,对于开发者来说,因开发环境而导致正常工作停滞不前是特别让人不可忍受的 。不好的开发环境会严重影响大家的生产力,而一个好的本地开发环境,允许开发人员在没有破坏共享环境或干扰面向客户的环境的风险的情况下运行和测试代码 。而且,它通常是低成本的,依赖于已经支付的资产,比基于云的环境更高效、更便宜 。
 
另外,Scott Wilson 表示他们也正在密切观望完全远程的开发环境,例如 Github Codespaces,以了解它们成熟后是否适合自己 。
 
参考链接:
 
https://eng.lyft.com/scaling-productivity-on-microservices-at-lyft-part-1-a2f5d9a77813
 
https://eng.lyft.com/scaling-productivity-on-microservices-at-lyft-part-2-optimizing-for-fast-local-development-9f27a98b47ee
 
【云端开发是个坑!4 年后,我们又回到了本地环境】https://eng.lyft.com/scaling-productivity-on-microservices-at-lyft-part-3-extending-our-envoy-mesh-with-staging-fdaafafca82f
 
https://eng.lyft.com/scaling-productivity-on-microservices-at-lyft-part-4-gating-deploys-with-automated-acceptance-4417e0ebc274
 
https://github.com/readme/guides/developer-onboarding
了解更多软件开发与相关领域知识,点击访问 InfoQ 官网:https://www.infoq.cn/,获取更多精彩内容!




推荐阅读