软件架构与思考

👉 所有文章
高性能 高性能设计模式
数据库 数据库分库分表指南 MySQL 建表参考 MySQL 初始化数据的一些方案 数据版本号
分布式 ID 分布式 ID 生成方案探讨
缓存 缓存 使用数据版本号保证缓存是最新数据 基于redis的二级缓存
微服务 如何实现远程调用 RPC 协议中的数据签名验签和加解密方案探讨 关于服务间调用循环依赖的一些思考 我所理解的负载均衡 一致性哈希 基于Redis的分布式会话管理系统 如何部署服务 灰度发布 如何区分上游和下游 日志级别
算法与协议 一个可扩展的 MQ 消息设计 Dynamo涉及的算法和协议 写时复制
任务分发 Gearman入门 如何使用redis构建异步任务处理程序
安全 关于对账的一些理解 一个简单可靠的 Dubbo 请求/响应数据签名方案
其他 使用卫语句减少 if else 嵌套

如何部署服务


服务有了新版本,我们需要重新发布该服务,有哪些方式呢 ?

假设该服务有10个实例,可以有以下发布模式。

蓝绿部署 (Blue-green Deployment)

  1. 旧版本的10个实例保持运行状态
  2. 为新版本生成10个实例
  3. 将旧版本的流量直接切换到新版本

金丝雀发布 (Canary Release)

也叫灰度发布。流程如下:

  1. 旧版本的10个实例保持运行状态
  2. 为新版本生成10个实例
  3. 将旧版本的流量逐步切换到新版本,比如以5%的步长进行切换,切换过程中注意观察服务

或者是:

  1. 旧版本的10个实例保持运行状态
  2. 为新版本生成1个实例
  3. 将旧版本的部分流量切换到新版本服务的实例中,观察无问题,则继续为新版本生成实例、切换流量,至旧版本无流量位置。

( 本文完 )

文章目录