1
0
mirror of https://github.com/chai2010/advanced-go-programming-book.git synced 2025-05-24 12:32:21 +00:00

finish gl

This commit is contained in:
Xargin 2018-06-12 19:02:55 +08:00
parent a882c6d119
commit cb387d0c74

View File

@ -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 一类的系统上报给公司内的监控系统,所以在上线过程中,也可以通过观察监控曲线,来判断是否有异常发生。