Monzo 的微服务平台与代码迁移策略
Monzo 的产品依赖于一个包含超过2800个微服务的广泛平台。为了应对大规模代码迁移的挑战,Monzo 采用了集中化的迁移管理和高度自动化的策略,以确保一致性和效率。迁移工作由一个中央团队负责,而不是由各个服务所有者团队执行,以避免延迟和不一致性。
代码迁移的核心原则
Monzo 的迁移团队制定了以下原则,以应对大规模变更的挑战:
- 透明性:迁移过程对服务所有者保持透明。
- 避免停机:确保迁移过程中服务不中断。
- 逐步推出:通过逐步推出减少影响范围。
- 80/20 自动化规则:自动化处理80%的常见用例,避免在特殊用例上投入过多资源。
技术栈的标准化
Monzo 在技术栈上进行了高度标准化,选择了 Go 作为主要编程语言,并采用 monorepo 来管理所有源代码。这种标准化不仅简化了开发过程,还提高了代码库的一致性。
迁移过程的实施
以从 OpenTracing 迁移到 OpenTelemetry 为例,Monzo 的迁移过程包括:
- 提案与反馈:在 Slack 或架构评审会议上提出迁移提案,征求工程团队的反馈。
- 自动化与手动更新:使用语言特定的代码替换工具进行自动更新,手动处理特殊用例。
- 逐步切换:通过配置服务逐步切换库的实现,首先在所有服务中部署包装器,然后逐步切换特定用户或请求的库实现。
monorepo 的优势
Monzo 的 monorepo 策略带来了以下好处:
- 一致的依赖版本:所有服务使用一致的内部和外部库版本,减少了工程师在切换服务时的认知负担。
- 全局变更的便利性:在进行全局变更(如库更新或添加新的 CI 检查)时,可以轻松地重新运行整个代码库的测试。
- RPC 客户端的优势:RPC 客户端导入服务器生成的 protobuf 代码,提供编译时的反馈,并增强了开发体验。
对微服务管理的建议
Monzo 的工程师 Will Sewell 提出了以下建议:
- 技术栈的一致性:在所有服务中使用一致的语言、库和基础设施,并通过自动化维护这种一致性。
- 成熟的平台:服务运行在成熟的平台上,基础设施(如数据库、队列、指标、日志等)无需单独配置,简化了服务的实现和操作。
- 逐步改进:这些改进无法一蹴而就,但可以通过逐步实施来接近这一目标。
未来的改进方向
Monzo 计划进一步改进代码迁移的工具化,将多次使用的迁移模式抽象为平台级框架,供所有工程师使用。虽然目前尚未开始实施,但这被认为是未来的一个重要方向。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。