部署或升级服务存在风险。在这篇文章中,我们将探讨风险缓解策略。
下图说明了常见的。
在这个模型中,我们同时将新的更改部署到多个服务。这种方法很容易实现。但是由于所有服务都是同时升级的,因此很难管理和测试依赖项。安全回滚也很困难。
使用蓝绿部署,我们有两个相同的环境:一个是暂存环境(蓝色),另一个是生产环境(绿色)。暂存环境比生产环境早一个版本。在暂存环境中完成测试后,用户流量将切换到暂存环境,暂存成为生产环境。此部署策略易于执行回滚,但拥有两个相同的生产质量环境可能会很昂贵。
金丝雀部署会逐步升级服务,每次都升级给一部分用户。它比蓝绿部署更便宜,并且易于执行回滚。但是,由于没有暂存环境,我们必须在生产环境中进行测试。这个过程比较复杂,因为我们需要监控金丝雀,同时逐渐将越来越多的用户从旧版本迁移出去。
在 A/B 测试中,不同版本的服务同时在生产环境中运行。每个版本都会为一部分用户运行一个 “实验”。A/B 测试是在生产中测试新功能的一种廉价方法。我们需要控制部署过程,以防某些功能被意外推送给用户。
有效的系统设计是一场权衡取舍的游戏,需要广泛的知识库才能做出最佳决策。此主题图根据类别对基本系统设计主题进行分类。
SQL 联接根据相关列合并两个或多个表中的行。以下是您可以使用的不同类型的联接:
仅返回两个表之间的匹配行。它只保留公共数据。
返回左表中的所有行和右表中的匹配行。如果左表中的行与右表中的行不匹配,则右表中的列将在该行中包含 NULL 值。
返回右表中的所有行和左表中的匹配行。如果左表中不存在与右表中的记录匹配的记录,则结果中左表中的列将包含 NULL 值。
返回两个表中的所有行,为缺少的匹配项填充 NULL。