diff --git a/ch5-web/ch5-09-gated-launch.md b/ch5-web/ch5-09-gated-launch.md index 4804c65..e4fd872 100644 --- a/ch5-web/ch5-09-gated-launch.md +++ b/ch5-web/ch5-09-gated-launch.md @@ -15,14 +15,33 @@ 假如服务部署在 15 个实例(可能是物理机,也可能是容器)上,我们把这 7 个实例分为三组,按照先后顺序,分别有 1-2-4-8 台机器,保证每次扩展时大概都是二倍的关系。 +``` +┌───────┐ ┌───────┐ ┌───────┐ ┌───────┐ +│ │ │ │ │ │ │┌─────┐│ +│ │ │ │ │ │ │└─────┘│ +│ │ │ │ │ │ │┌─────┐│ +│ │ │ │ │ │ │└─────┘│ +│ │ │ │ │ │ │┌─────┐│ +│ │ │ │ │ │ │└─────┘│ +│ │ │ │ │ │ │┌─────┐│ +│ │ │ │ │ │ │└─────┘│ +│ │ │ │ │┌─────┐│ │┌─────┐│ +│ │ │ │ │└─────┘│ │└─────┘│ +│ │ │ │ │┌─────┐│ │┌─────┐│ +│ │ │ │ │└─────┘│ │└─────┘│ +│ │ │┌─────┐│ │┌─────┐│ │┌─────┐│ +│ │ │└─────┘│ │└─────┘│ │└─────┘│ +│┌─────┐│ │┌─────┐│ │┌─────┐│ │┌─────┐│ +│└─────┘│ │└─────┘│ │└─────┘│ │└─────┘│ +└───────┘ └───────┘ └───────┘ └───────┘ + + + group1 group2 group3 group4 -TODO 这里有个图 +``` 为什么要用 2 倍?这样能够保证我们不管有多少台机器,都不会把组划分得太多。例如 1024 台机器,实际上也就只需要 1-2-4-8-16-32-64-128-256-512 部署十次就可以全部部署完毕。 - -TODO 这里也有图 - 这样我们上线最开始影响到的用户在整体用户中占的比例也不大,比如 1000 台机器的服务,我们上线后如果出现问题,也只影响 1/1000 的用户。如果 10 组完全平均分,那一上线立刻就会影响 1/10 的用户,1/10 的业务出问题,那可能对于公司来说就已经是一场不可挽回的事故了。 在上线时,最有效的观察手法是查看程序的错误日志,如果较明显的逻辑错误,一般错误日志的滚动速度都会有肉眼可见的增加。这些错误也可以通过 metrics 一类的系统上报给公司内的监控系统,所以在上线过程中,也可以通过观察监控曲线,来判断是否有异常发生。