规划、自动化与单一代码库:Monzo如何跨越2800个微服务进行代码迁移

Monzo 的微服务平台与代码迁移策略

Monzo 的产品依赖于一个包含超过2800个微服务的广泛平台。为了应对大规模代码迁移的挑战,Monzo 采用了集中化的迁移管理高度自动化的策略,以确保一致性和效率。迁移工作由一个中央团队负责,而不是由各个服务所有者团队执行,以避免延迟和不一致性。

代码迁移的核心原则

Monzo 的迁移团队制定了以下原则,以应对大规模变更的挑战:

  1. 透明性:迁移过程对服务所有者保持透明。
  2. 避免停机:确保迁移过程中服务不中断。
  3. 逐步推出:通过逐步推出减少影响范围。
  4. 80/20 自动化规则:自动化处理80%的常见用例,避免在特殊用例上投入过多资源。

技术栈的标准化

Monzo 在技术栈上进行了高度标准化,选择了 Go 作为主要编程语言,并采用 monorepo 来管理所有源代码。这种标准化不仅简化了开发过程,还提高了代码库的一致性。

迁移过程的实施

以从 OpenTracing 迁移到 OpenTelemetry 为例,Monzo 的迁移过程包括:

  1. 提案与反馈:在 Slack 或架构评审会议上提出迁移提案,征求工程团队的反馈。
  2. 自动化与手动更新:使用语言特定的代码替换工具进行自动更新,手动处理特殊用例。
  3. 逐步切换:通过配置服务逐步切换库的实现,首先在所有服务中部署包装器,然后逐步切换特定用户或请求的库实现。

monorepo 的优势

Monzo 的 monorepo 策略带来了以下好处:

  1. 一致的依赖版本:所有服务使用一致的内部和外部库版本,减少了工程师在切换服务时的认知负担。
  2. 全局变更的便利性:在进行全局变更(如库更新或添加新的 CI 检查)时,可以轻松地重新运行整个代码库的测试。
  3. RPC 客户端的优势:RPC 客户端导入服务器生成的 protobuf 代码,提供编译时的反馈,并增强了开发体验。

对微服务管理的建议

Monzo 的工程师 Will Sewell 提出了以下建议:

  1. 技术栈的一致性:在所有服务中使用一致的语言、库和基础设施,并通过自动化维护这种一致性。
  2. 成熟的平台:服务运行在成熟的平台上,基础设施(如数据库、队列、指标、日志等)无需单独配置,简化了服务的实现和操作。
  3. 逐步改进:这些改进无法一蹴而就,但可以通过逐步实施来接近这一目标。

未来的改进方向

Monzo 计划进一步改进代码迁移的工具化,将多次使用的迁移模式抽象为平台级框架,供所有工程师使用。虽然目前尚未开始实施,但这被认为是未来的一个重要方向。

阅读 26
0 条评论