网站建设资讯

NEWS

网站建设资讯

SpringCloud如何实现远程调用负载均衡-创新互联

本篇文章为大家展示了Spring Cloud如何实现远程调用负载均衡,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

成都创新互联-专业网站定制、快速模板网站建设、高性价比扶沟网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式扶沟网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖扶沟地区。费用合理售后完善,十多年实体公司更值得信赖。

负载均衡

使用微服务后,为了能够承担高并发的压力,同一个服务可能会启动多个实例。这时候消费者就需要负载均衡,把请求分散到各个实例。负载均衡主要有两种设计:

服务端负载均衡客户端负载均衡

对于传统的分布式服务来说,大多使用服务端负载均衡。一般会使用Nginx或者ELB等工具作为负载均衡器,如下图:

Spring Cloud如何实现远程调用负载均衡

传统负载均衡

而在Spring Cloud中,使用的是「客户端负载均衡」的方式,使用「Ribbon」组件来实现客户端的负载均衡。只要引入了微服务注册中心依赖,就会自动引入Ribbon依赖。客户端负载均衡原理如下图:

Spring Cloud如何实现远程调用负载均衡

客户端负载均衡

Ribbon的原理

Ribbon利用了RestTemplate的拦截器(接口是ClientHttpRequestInterceptor)机制,在拦截器中实现的负载均衡。负载均衡的基本实现就是利用从「服务注册中心」获取可用的服务地址列表,然后通过一定算法负载,决定使用哪一个服务地址来进行HTTP调用。

详情可以查看LoadBalancerInterceptor这个类,位于org.springframework.cloud.client.loadbalancer包下。

使用Ribbon

首先定义一下生产者「service-user」,我这里使用容器启动了多个生产者实例,每个实例具有不同的id,我的示例代码里面启动了两个实例:

service-user-1
service-user-2

代码:

@RestController
@RequestMapping
public class HelloController {

  @Value("${spring.cloud.consul.discovery.instanceId}")
  private String instanceId;

  @GetMapping("hello")
  public String hello() {
    return String.format("hello, this is %s", instanceId);
  }
}

分享标题:SpringCloud如何实现远程调用负载均衡-创新互联
标题链接:http://njwzjz.com/article/psigi.html