如何部署服务

部署或升级服务是有风险的。在这篇文章中,我们探讨风险缓解策略。

下图说明了常见的部署策略。

多服务部署

在这种模式中,我们同时部署新变更到多个服务。这种方法易于实现。但由于所有服务同时升级,很难管理和测试依赖关系。安全回滚也很困难。

蓝绿部署

使用蓝绿部署,我们有两个相同的环境:一个是预发布(蓝),另一个是生产(绿)。预发布环境比生产环境领先一个版本。一旦在预发布环境中完成测试,用户流量切换到预发布环境,预发布变成生产。这种部署策略回滚简单,但拥有两个相同的生产质量环境可能很昂贵。

金丝雀部署

金丝雀部署逐步升级服务,每次针对一部分用户。它比蓝绿部署便宜且易于回滚。然而,由于没有预发布环境,我们必须在生产环境测试。这个过程更复杂,因为我们需要在逐步迁移越来越多用户远离旧版本时监控金丝雀。

A/B 测试

在 A/B 测试中,不同版本的服务同时在生产中运行。每个版本为一部分用户运行”实验”。A/B 测试是一种在生产中测试新功能便宜的方法。我们需要控制部署过程,以防某些功能意外推送给用户。

Google Docs 设计

一图胜千言。在这篇文章中,我们看看如何设计 Google Docs。

  1. 客户端将文档编辑操作发送到 WebSocket 服务器
  2. 实时通信由 WebSocket 服务器处理
  3. 文档操作持久化在消息队列中
  4. 文件操作服务器消费客户端产生的操作,并使用协作算法生成转换后的操作
  5. 存储三种类型的数据:文件元数据、文件内容和操作

最大的挑战之一是实时冲突解决。常见算法包括:

  • 操作转换(OT)
  • 差分同步(DS)
  • 无冲突复制数据类型(CRDT)

根据其 Wikipedia 页面,Google Docs 使用 OT,而 CRDT 是实时并发编辑的活跃研究领域。

本文为学习目的的个人翻译,译文仅供参考。

原文链接:How to design Google Docs (Episode 4)

版权归原作者或原刊登方所有。本文为非官方译本;如有不妥,请联系删除。