系统伸缩与性能优化全解析
1. 负载均衡
当需要服务具备高弹性时,避免单点故障至关重要。对于暴露同步 HTTP 端点的典型微服务,实现这一目标的最简单方法是让多个主机运行微服务实例,并置于负载均衡器之后。对于微服务的消费者来说,他们并不知道自己是在与一个还是一百个微服务实例进行交互。
负载均衡器形式多样,从大型昂贵的硬件设备到像 mod_proxy 这样的基于软件的负载均衡器都有。它们都具备一些关键功能:
- 基于某种算法将发送给它们的调用分发到一个或多个实例。
- 当实例不再健康时将其移除,并在其恢复后重新添加。
部分负载均衡器还提供实用功能,例如 SSL 终止。当入站的 HTTPS 连接到达负载均衡器后,一旦连接到实例本身,就会转换为 HTTP 连接。过去,管理 SSL 的开销相当大,因此让负载均衡器处理此过程非常有用。如今,这更多是为了简化运行实例的各个主机的设置。然而,使用 HTTPS 的目的是确保请求不会受到中间人攻击,所以如果使用 SSL 终止,可能会使自身面临一定风险。一种缓解方法是将微服务的所有实例置于单个 VLAN(虚拟局域网)内。VLAN 是一种虚拟局域网,外部请求只能通过路由器进入,在这种情况下,路由器也是执行 SSL 终止的负载均衡器。VLAN 外部与微服务的通信通过 HTTPS 进行,而内部则使用 HTTP。
AWS 以 ELB(弹性负载均衡器)的形式提供支持 HTTPS 终止的负载均衡器,还可以使用其安全组或虚拟专用云(VPC)来实现 VLAN。此外,像 mod_proxy 这样的软件也可以作为软件负载均衡器发挥类似作用。许多组织使用硬件负载均衡器,但这些设备难以实现自动化。在这种情况下,建议在硬件负载均衡器后面