diff --git a/ch6-web/ch6-11-service-discovery.md b/ch6-web/ch6-11-service-discovery.md index e69de29..9620e23 100644 --- a/ch6-web/ch6-11-service-discovery.md +++ b/ch6-web/ch6-11-service-discovery.md @@ -0,0 +1,7 @@ +# 6.11. Service Discovery 服务发现 + +在微服务架构中,服务之间是存在依赖的。例如在订单系统中创建订单时,需要对用户信息做快照,这时候也就意味着这个流程要依赖: 订单、用户两个系统。当前大型网站的语境下,多服务分布式共存,单个服务也可能会跑在多台物理/虚拟机上。所以即使你知道你需要依赖的是“订单服务”这个具体的服务,实际面对的仍然是多个 ip+port 组成的集群。因此你需要: 1. 通过“订单服务”这个名字找到它对应的 ip+port 列表;2. 决定把这个请求发到哪一个 ip+port 上的订单服务。 + +ip+port 的组合往往被称为 endpoint。通过“订单服务”去找到这些 endpoint 的过程,叫做服务发现。选择把请求发送给哪一台机器,以最大化利用下游机器的过程,叫做负载均衡。本节主要讨论服务发现。 + +## diff --git a/ch6-web/ch6-12-load-balance.md b/ch6-web/ch6-12-load-balance.md index fb2b2cb..6b7db59 100644 --- a/ch6-web/ch6-12-load-balance.md +++ b/ch6-web/ch6-12-load-balance.md @@ -1 +1,19 @@ -# 6.12. Load-Balance 负载均衡 \ No newline at end of file +# 6.12. Load-Balance 负载均衡 + +本节将会讨论常见的 web 后端服务之间的负载均衡手段。 + +## 常见的负载均衡思路 + +如果我们不考虑均衡的话,现在有 n 个 endpoint,我们完成业务流程实际上只需要从这 n 个中挑出其中的一个。有几种思路: + +1. 按顺序挑: 例如上次选了第一台,那么这次就选第二台,下次第三台,如果已经到了最后一台,那么下一次从第一台开始。这种情况下我们可以把 endpoint 都存储在数组中,每次请求完成下游之后,将一个索引后移即可。在移到尽头时再移回数组开头处。 + +2. 随机挑一个: 每次都随机挑,真随机伪随机均可。设选择第 x 台机器,那么 x 可描述为 `rand.Intn() % n`。 + +3. 根据某种权重,对下游 endpoints 进行排序,选择权重最大/小的那一个。 + +## 一种随机负载均衡算法 + +## 有没有什么问题? + +## 修正后的负载均衡算法