From a9b1cd583d79eb7e68065dfc92529bf3cb72251e Mon Sep 17 00:00:00 2001 From: Xargin Date: Thu, 13 Dec 2018 15:54:07 +0800 Subject: [PATCH] update gl img --- ch5-web/ch5-09-gated-launch.md | 29 +++-------------------------- images/ch5-online-group.png | Bin 0 -> 18605 bytes 2 files changed, 3 insertions(+), 26 deletions(-) create mode 100644 images/ch5-online-group.png diff --git a/ch5-web/ch5-09-gated-launch.md b/ch5-web/ch5-09-gated-launch.md index 4599635..bb8ab1c 100644 --- a/ch5-web/ch5-09-gated-launch.md +++ b/ch5-web/ch5-09-gated-launch.md @@ -13,32 +13,9 @@ ## 5.9.1 通过分批次部署实现灰度发布 -假如服务部署在 15 个实例(可能是物理机,也可能是容器)上,我们把这 15 个实例分为四组,按照先后顺序,分别有 1-2-4-8 台机器,保证每次扩展时大概都是二倍的关系。 - -``` -┌───────┐ ┌───────┐ ┌───────┐ ┌───────┐ -│ │ │ │ │ │ │┌─────┐│ -│ │ │ │ │ │ │└─────┘│ -│ │ │ │ │ │ │┌─────┐│ -│ │ │ │ │ │ │└─────┘│ -│ │ │ │ │ │ │┌─────┐│ -│ │ │ │ │ │ │└─────┘│ -│ │ │ │ │ │ │┌─────┐│ -│ │ │ │ │ │ │└─────┘│ -│ │ │ │ │┌─────┐│ │┌─────┐│ -│ │ │ │ │└─────┘│ │└─────┘│ -│ │ │ │ │┌─────┐│ │┌─────┐│ -│ │ │ │ │└─────┘│ │└─────┘│ -│ │ │┌─────┐│ │┌─────┐│ │┌─────┐│ -│ │ │└─────┘│ │└─────┘│ │└─────┘│ -│┌─────┐│ │┌─────┐│ │┌─────┐│ │┌─────┐│ -│└─────┘│ │└─────┘│ │└─────┘│ │└─────┘│ -└───────┘ └───────┘ └───────┘ └───────┘ - - - group1 group2 group3 group4 - -``` +假如服务部署在 15 个实例(可能是物理机,也可能是容器)上,我们把这 15 个实例分为四组,按照先后顺序,分别有 1-2-4-8 台机器,保证每次扩展时大概都是二倍的关系。 + +![online group](../images/ch5-online-group.png) 为什么要用 2 倍?这样能够保证我们不管有多少台机器,都不会把组划分得太多。例如 1024 台机器,实际上也就只需要 1-2-4-8-16-32-64-128-256-512 部署十次就可以全部部署完毕。 diff --git a/images/ch5-online-group.png b/images/ch5-online-group.png new file mode 100644 index 0000000000000000000000000000000000000000..9d89543536dfec7a7c72d441b41482ea1baaaa07 GIT binary patch literal 18605 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