咱们以前有一篇文章详述了如何使用nginx实现负载均衡(Nginx+Tomcat搭建集群,Spring Session+Redis实现Session共享),在这篇文章中,咱们实现了如何将客户端发来的请求经过Nginx负载均衡服务器发送到不一样的上游服务器去处理,这种负载均衡就是一种典型的服务端负载均衡,那么客户端负载均衡是什么?它和服务端负载均衡有什么区别?nginx
本文是Spring Cloud系列的第五篇文章,了解前四篇文章的内容有助于更好的理解本文: 服务器
1.使用Spring Cloud搭建服务注册中心
2.使用Spring Cloud搭建高可用服务注册中心
3.Spring Cloud中服务的发现与消费
4.Eureka中的核心概念网络
负载均衡是咱们处理高并发、缓解网络压力和进行服务端扩容的重要手段之一,可是通常状况下咱们所说的负载均衡一般都是指服务端负载均衡,服务端负载均衡又分为两种,一种是硬件负载均衡,还有一种是软件负载均衡。 并发
硬件负载均衡主要经过在服务器节点之间安装专门用于负载均衡的设备,常见的如F5。 负载均衡
软件负载均衡则主要是在服务器上安装一些具备负载均衡功能的软件来完成请求分发进而实现负载均衡,常见的就是Nginx。 高并发
不管是硬件负载均衡仍是软件负载均衡,它的工做原理都不外乎下面这张图: spa
不管是硬件负载均衡仍是软件负载均衡都会维护一个可用的服务端清单,而后经过心跳机制来删除故障的服务端节点以保证清单中都是能够正常访问的服务端节点,此时当客户端的请求到达负载均衡服务器时,负载均衡服务器按照某种配置好的规则从可用服务端清单中选出一台服务器去处理客户端的请求。这就是服务端负载均衡。code
咱们在Spring Cloud中服务的发现与消费一文中涉及到了客户端负载均衡,在那篇文章中咱们提到图片
“Ribbo是一个基于HTTP和TCP的客户端负载均衡器,当咱们将Ribbon和Eureka一块儿使用时,Ribbon会从Eureka注册中心去获取服务端列表,而后进行轮询访问以到达负载均衡的做用,客户端负载均衡中也须要心跳机制去维护服务端清单的有效性,固然这个过程须要配合服务注册中心一块儿完成。”get
从上面的描述咱们能够看出,客户端负载均衡和服务端负载均衡最大的区别在于服务清单所存储的位置。在客户端负载均衡中,全部的客户端节点都有一份本身要访问的服务端清单,这些清单通通都是从Eureka服务注册中心获取的。在Spring Cloud中咱们若是想要使用客户端负载均衡,方法很简单,开启@LoadBalanced
注解便可,这样客户端在发起请求的时候会先自行选择一个服务端,向该服务端发起请求,从而实现负载均衡。具体小伙伴们能够参考Spring Cloud中服务的发现与消费这篇文章。
OK,以上就是咱们对客户端负载均衡的一个简介,有问题欢迎留言讨论。
更多JavaEE请关注公众号:
以上。。