Ribbon用于负载均衡

阅读更多

运行微服务的一个实例,URL是硬编码在客户端中,以及服务与服务间的调用中。现实情况中,此办法不

妥,因为服务的实例可以有多个,此时,我们应当使用一个load balancer或一个本地DNS服务器来抽象

掉实际实例的位置,在客户端中配置的就应该是一个别名或load balancer的地址。load balancer

之后接收到别名,将其解析成可用实例中的一个。用此方式,我们就能配置许多实例,它还帮助处理

服务器失败问题,这对于客户端来说是透明的。

 

上面说的主意可以用Spring Cloud Netflix Ribbon来实现。Ribbon是一个客户端load balancer,

它可以在一组服务器上执行round-robin load balancing。Ribbon库也可以有其他负载均衡算法。

 

Spring Cloud提供来一种声明的方式来配置和使用Ribbon client。


Ribbon用于负载均衡_第1张图片
 

 

如上图所示,Ribbon客户端从Config服务器获取所有可用微服务实例的一个列表,并且,默认运用

round-robin负载均衡算法。

 

为了使用Ribbon客户端,需添加如下maven依赖:


  org.springframework.cloud
  spring-cloud-starter-ribbon

 

修改Booking微服务配置文件,booking-service.properties,添加一个新的属性用来配置

一组Fare微服务:

fares-proxy.ribbon.listOfServers=localhost:8080,localhost:8081

 

此时要修改原先的FareServiceProxy类,以便使用Ribbon客户端,注意到原先@RequestMapping

中的value需要从/get改成/fares/get,这样的话,就很容易把host name和port移到配置文件中:

@FeignClient(name="fares-proxy")
@RibbonClient(name="fares")
public interface FareServiceProxy {
  @RequestMapping(value = "fares/get", method=RequestMethod.GET)

 

 

这个时候,我们就能运行2个Fares微服务实例,一个在8080,一个在8081:

java -jar -Dserver.port=8080 fares-1.0.jar
java -jar -Dserver.port=8081 fares-1.0.jar

 

运行Booking微服务,当它启动时,它的CommandLineRunner会自动插入一个booking记录,这会走

第一个服务器。

 

当运行website项目,它调用Booking服务,该请求走第2个服务器。


 

  • Ribbon用于负载均衡_第2张图片
  • 大小: 30.1 KB
  • 查看图片附件

你可能感兴趣的:(Ribbon用于负载均衡)