在微服务之前,传统项目需要横向扩展,一般都会使用Ngnix作为负载均衡策略,在前端请求过来之前将请求转发至底层的服务器,
但是在微服务情况下,负载均衡如何考虑,难道需要在每个微服务之间都增加Nginx么?看上去好像也没有什么问题,但是如果微服务达到一定量的时候,超过100个微服务,那么Nginx的配置就超级复杂了,这时我们可以使用Ribbon解决这样的问题
Nginx配置的方式-->代理到多个Tomcat这样的架构,业界称之为”服务端负载均衡“,Nginx维护了各个需要调用节点的信息,
Ribbon的实现方式,则是一种基于”客户端负载均衡策略“
Ribbon简介
Ribbon是Netflix发布的负载均衡器,可以帮助我们控制HTTP,TCP客户端的行为,只需要为Ribbon配置服务提供者的调用地址列表信息,Ribbon就可以在客户端完成基于负载均衡算法,计算出要请求的地址。
Ribbon默认为我们提供了,例如轮询,随机,响应时间加权等短发,同也支持我们自定义自己的负载均衡算法
Cousul配置Ribbon
在SpringCloud中,Ribbon可以与Consul配合使用,这样Ribbon就可以从consul中获得服务提供者的调用地址信息。然后便可以基于自身配置的负载均衡算法,选择其中某个服务实例进行调用
Demo
添加依赖,consul-discovery整合了ribbon
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
增加注解,使用LoadBlanced注解,让RestTemplate整合Ribbon
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
客户端调用,根据ID查询用户信息
@test
public User findById() {
User user = this.restTemplate.getForObject( "http://server-user/users/{id}", User.class, id);.
return user;
}
调用参数中,地址信息格式:http://{目标服务名称}/{目标服务端点}。Ribbon会自动在实际调用时,将目标服务替换成IP和端口
网友评论