ThinkSSL🔒 一键申购 5分钟快速签发 30天无理由退款 购买更放心 广告
[TOC] ## 概述 互联网系统的灰度发布一般通过两种方式实现: 1. 通过分批次部署实现灰度发布 2. 通过业务规则进行灰度发布 ## 分批次部署实现灰度发布 假如服务部署在15个实例(可能是物理机,也可能是容器)上,我们把这15个实例分为四组,按照先后顺序,分别有1-2-4-8台机器,保证每次扩展时大概都是二倍的关系 **为什么使用2倍** 1. 这样能够保证我们不管有多少台机器,都不会把组划分得太多。例如1024台机器,也就只需要1-2-4-8-16-32-64-128-256-512部署十次就可以全部部署完毕 2. 减少最开始用户的影响,比如1000台机器的服务,我们上线后如果出现问题,也只影响1/1000的用户。如果10组完全平均分,那一上线立刻就会影响1/10的用户 上线后如果出现程序的错误,日志滚动会非常明显,可通过日志情况查看异常 ## 业务规则进行灰度发布 可以用用户id、手机号、用户设备信息,等等,来生成一个简单的哈希值,然后再求模 伪代码 ``` func passed() bool { key := hashFunctions(userID) % 1000 if key <= 2 { return true } return false } ``` **可选规则** 1. 按城市发布 2. 按概率发布 3. 按百分比发布 4. 按白名单发布 5. 按业务线发布 6. 按UA发布(APP、Web、PC) 7. 按分发渠道发布 **4.按白名单发布** 按白名单发布比较简单,功能上线时,可能我们希望只有公司内部的员工和测试人员可以访问到新功能,会直接把账号、邮箱写入到白名单,拒绝其它任何账号的访问 ``` func isTrue() bool { return true/false according to the rate provided by user } ``` **3. 按百分比发布** ``` func isTrue(phone string) bool { if hash of phone matches { return true } return false } ```