服务灰度发布设计

灰度发布(又叫金丝雀发布)是互联网产品发布常用的一种方式,顾名思义,就是在黑和白之间平滑过渡的一种产品产品发布方式,产品发布者根据某种规则,让一部分用户继续使用原来的产品功能,另一部分用户逐渐启用新功能。在过渡过程中,可能还会对产品做进一步的完善,灰度发布完成后,所有的用户都将使用新的产品功能。[1]

在服务发布的时候很难保证一点问题都不出,出问题在所难免,如何保证在出了问题的时候影响最小呢,灰度发布就可以让我们提前知道发布是否有问题,先用小部分流量看看效果。

灰度发布系统架构

1 配置中心配置,哪些服务进行灰度发布,灰度发布中的流量划分

2 上游服务接收客户端请求之后,根据配置中心的配置将请求转发到新老服务中

3 注册中心负责新老服务的注册

4 下游服务负责处理用户请求的业务服务系统

设计中的难点:灰度发布系统中的协议设计

  • 数据协议
    • 定长header
    • 变长body
    • 设计灰度发布字段
      • uid
      • token
      • ip
      • tag
  • 灰度发布策略
    • 单策略
      • uid/token/ip
    • 基于上下文灰度发布策略
      • 模块AC同时灰度
      • tag

灰度发布场景

只更新下游某服务

上游如果Nginx:

  • 可使用Openresty,Tengine等nginx扩展,可以嵌入lua脚本,进行转发
  • 服务器配置agent进行动态更新nginx配置,比如consul + consul-template。

上游如果是RPC服务:

  • 可集成配置管理平台的客户端SDK,实时更新服务端的配置,执行灰度发布策略,判断是否要开启新版本服务。

下游服务:

  • 新老服务一般都会注册到服务注册中心,服务一般都带有自己的版本号。
同时灰度多个模块

网关层与数据访问层同时进行灰度发布。

根据文中上面提到的协议字段中,给新来的流量进行打标签,所有走到新网关的请求都打上tag,在业务逻辑层根据tag再次转发到不同的数据访问层。

  • 所有经过新gateway的请求都有标签
  • 有标签的请求在业务层都会转发到新的数据访问层

数据库的灰度升级

比如SqlServer迁移到MySQL,或者数据库字段修改。

  • 首先数据全量复制,双写
  • 再双写一段时间
  • 去掉旧版本的DB,只写新数据库

客户端灰度发布

Android灰度发布,不要一次性把包上架到应用市场,如果上架了就不受控制了,可以通过自己的后台接口,尝试更新一批用户,然后逐渐的增加用户比例。等灰度发布完毕之后,再提交到应用市场

IOS的App Store有灰度发布机制,但是又比较严的规则。可以提前终止发布,但是已经更新的用户则无法降级。默认是7天进行全部的灰度升级。

最后

学习记录

参考

转载于:https://juejin.im/post/5d02d881f265da1b695d59f4

### 设计灰度发布管理后台的最佳实践 #### 功能需求分析 为了有效支持灰度发布,管理后台应具备以下核心功能: - **版本控制**:允许管理员定义不同版本的应用程序及其对应的流量比例[^2]。 - **用户分组**:能够创建并维护不同的用户群体,以便精确地向特定用户提供新特性或更新[^1]。 #### 用户界面设计原则 良好的用户体验对于任何管理系统至关重要。针对灰度发布的特殊性质,建议遵循这些UI/UX指导方针: - **直观的操作流程**:确保操作简单明了,减少误操作的可能性;提供清晰的状态反馈机制来告知当前部署情况以及历史记录查询选项[^3]。 ```python def get_user_feedback(deployment_status): """获取用户的反馈""" if deployment_status == "success": message = "部署成功" elif deployment_status == "failed": message = "部署失败,请检查日志." else: message = "正在处理..." return {"status": deployment_status, "message": message} ``` - **可视化监控面板**:通过图表等形式展示各版本之间的切换状况、实时性能指标对比等重要数据,帮助决策者快速理解现状并做出调整. #### 安全性和权限管理 考虑到敏感信息的安全性,在设计时还应当重视访问控制措施: - 实施细粒度的角色授权体系,区分普通员工与高级管理人员所能执行的动作范围; - 对所有变更活动实施严格的审计跟踪制度,保留完整的操作日志供后续审查之用.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值