负载均衡
当服务流量增大时,通常会采用增加机器的方式进行扩容。负载均衡就是用来在多个机器或者其他资源中,按照一定的规则合理分配负载。其中的实现可以分成客户端负载均衡和服务端负载均衡。
服务端负载均衡
在服务端进行负载均衡的算法分配。
比较有名的服务端负载均衡器是Nginx。请求先到达Nginx负载均衡器,然后通过负载均衡算法,在多个服务器之间选择一个进行访问。
客户端负载均衡
Spring Cloud LoadBalancer 是 Spring Cloud 最新版本的负载均衡集成组件,取代了早期的 Ribbon,也是本文使用的负载均衡组件。它允许将负载均衡功能作为库集成到客户端,而不再依赖于单独的负载均衡设备。客户端通过从注册中心(如 Eureka)获取服务列表,并使用负载均衡算法选择一个服务器来发送请求。这种方式不仅提升了系统的灵活性和可扩展性,还通过在客户端实现负载均衡来优化服务请求的分发和性能。
二者区别
- 位置:服务端负载均衡位于服务端,而客户端负载均衡位于客户端。
- 作用对象:服务端负载均衡处理所有入站请求,而客户端负载均衡处理发出的请求。
- 控制粒度:服务端负载均衡可以全局控制请求的分发,而客户端负载均衡可以基于局部条件和策略做出请求选择。
- 服务端负载均衡是一种较为传统的方法,适用于管理入站到一个服务的所有请求,特别是在客户端数量众多时。它可以简化客户端逻辑,使客户端无需关心后端服务器的复杂性。
客户端负载均衡则允许更灵活的请求处理,特别适用于分布式系统架构,如微服务架构,其中每个服务可能需要根据不同的标准选择不同的后端服务。
Spring Cloud LoadBalancer
从Spring Cloud 2020.0.1版本开始,移除了Ribbon组件,改为使用Spring Cloud LoadBalancer组件来实现客户端负载均衡。
模拟多服务实例
对于上一篇的订单服务调用商品