From cadf1ee11015c3c3049b78fe15c438e551ff9fcd Mon Sep 17 00:00:00 2001 From: Xargin Date: Sun, 10 Jun 2018 17:54:22 +0800 Subject: [PATCH] update gl --- ch5-web/ch5-09-gated-launch.md | 69 +++++++++++++++++++++++++++++++++- 1 file changed, 68 insertions(+), 1 deletion(-) diff --git a/ch5-web/ch5-09-gated-launch.md b/ch5-web/ch5-09-gated-launch.md index f6509c2..c749273 100644 --- a/ch5-web/ch5-09-gated-launch.md +++ b/ch5-web/ch5-09-gated-launch.md @@ -47,7 +47,74 @@ func passed() bool { ### 可选规则 -按城市发布、按百分比随机发布、按百分比固定发布、按白名单发布、按业务线发布、按设备发布、按用户端类型(app、web)发布: +常见的灰度发布系统会有下列规则提供选择: + +1. 按城市发布 +2. 按概率发布 +3. 按百分比发布 +4. 按白名单发布 +5. 按业务线发布 +6. 按 UA 发布(app、web、pc) +7. 按分发渠道发布 + +因为和公司的业务相关,所以城市、业务线、UA、分发渠道这些都可能会被直接编码在系统里,不过功能其实大同小异。 + +按白名单发布比较简单,功能上线时,可能我们希望只有公司内部的员工和测试人员可以访问到新功能,会直接把账号、邮箱写入到白名单,拒绝其它任何账号的访问。 + +按概率发布则是指实现一个简单的函数: + +```go +func isTrue() bool { + return true/false according to the rate provided by user +} +``` + +其可以按照用户指定的概率返回 true/false,当然,true 的概率 + false 的概率 = 100%。这个函数不需要任何输入。 + +按百分比发布,是指实现下面这样的函数: + +```go +func isTrue(phone string) bool { + if hash of phone matches { + return true + } + + return false +} +``` + +这种情况可以按照指定的百分比,返回对应的 true 和 false,和上面的单纯按照概率的区别是这里我们需要调用方提供给我们一个输入参数,我们以该输入参数作为源来计算哈希,并以哈希后的结果来求模,并返回结果。这样可以保证同一个用户的返回结果多次调用是一致的,在下面这种场景下,必须使用这种结果可预期的灰度算法: + +```shell + +--------+ + | user_2 | + +--------+ + + +--------+ +--------+ + | user_1 | | set.V2 |---------------------+ + +--------+ +--------+ | + | | + +--------+ | | + +--------------| set.V2 | | | + | +--------+ | | + | | | | + v | | v ++-------------+ | | +-------------+ +| storage_v1 | | | | storage_v2 | ++-------------+ | | +-------------+ + | | | | + | | | | + | | | | + | v | | + | +--------+ | | + +------------->| get.V2 | | | + +--------+ | | + | | + v | + +--------+ | + | get.V2 |<--------------------+ + +--------+ +``` ## 如何实现一套灰度发布系统