java负载均衡框架_SpringCloud与Consul集成实现负载均衡功能

负载均衡(Load Balance,简称LB)是一种服务器或网络设备的集群技术。负载均衡将特定的业务(网络服务、网络流量等)分担给多个服务器或网络设备,从而提高了业务处理能力,保证了业务的高可用性。负载均衡基本概念有:实服务、实服务组、虚服务、调度算法、持续性等,其常用应用场景主要是服务器负载均衡,链路负载均衡。

一、背景

SpringCloud微服务目前比较流行,其中大都在使用的服务注册与发现是Eureka,最近研究了Consul的集群搭建,现使用Consul实现服务的负载均衡。其主要拓扑结构如下:

2a84e543592d7d6d79ceec929646260b.png

二、Consul集群环境搭建

本次搭建采用了三台虚拟机,Linux系统,从Consul官网下载安装包,解压即可使用。在每台机器下建一个目录/data/consul/data,这个目录主要存放器群启动后生成的一些数据。需要开启的端口,8300, 8301, 8500, 8600。

分别在以下三个机器上执行一下启动命令。

机器1:10.0.0.45

./consul agent -server -bootstrap-expect 2 -data-dir=/data/consul/data -node=consul-server-1 -bind=10.0.0.45 -client=0.0.0.0 &

机器2:10.0.0.100

./consul agent -server -bootstrap-expect 2 -data-dir=/data/consul/data -node=consul-server-2 -bind=10.0.0.100 -client=0.0.0.0 &

机器3:10.0.0.191

./consul agent -server -bootstrap-expect 2 -data-dir=/data/consul/data -node=consul-server-3 -bind=10.0.0.191 -client=0.0.0.0 -ui &

参数说明:

• server: 以server身份启动。默认是client

• bootstrap-expect:集群要求的最少server数量,当低于这个数量,集群即失效。

• data-dir:data存放的目录,更多信息请参阅consul数据同步机制

• node:节点id,在同一集群不能重复。

• bind:监听的ip地址。默认绑定0.0.0.0,可以不指定

• client: 客户端的ip地址,0.0.0.0是指谁都可以访问

• ui: 可以访问UI界面

三台机器上的服务启动完成后,将两台机器添加到其中一台机器上,组建成集群。

分别在机器2和机器3上执行:./consul join 10.0.0.45,构成集群,同样也可以再增加别的节点。

启动成功后访问任意一台机器  http://10.0.0.45:8500,会看到如下界面,有3个健康的节点:

cae7e107c9895de20e38695f263fab79.png

三、SpringCloud服务注册

注册中心已经搭建完毕,接下来就是准备两个服务,一个是生产者consul-producer,一个是消费者consul-consumer。

3.1 生产者代码,代码很简单,就是RestAPI请求并返回一个字符串

@RestController

public class ProducerController {

@GetMapping("/producer")

public String producer(){

System.out.println("I'm producer");

return "Hello, I'm producer";

}

}

以下是生产者consul-producer的启动配置文件application.yml:

spring:

application:

name: consul-producer #程序名称

cloud:

consul:

host: 10.0.0.100 #consul节点IP

port: 8500 #consul节点端口

discovery:

instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${server.port} #实例ID

health-check-path: /actuator/health #健康检查

health-check-interval: 10s

server:

port: 9091 #消费者服务端口

3.2 消费者代码,代码也很简单,使用大家熟悉分Feign,Controller接受请求,用过service调用消费者提供的服务

/**

* 消费者

*/

@RestController

public class ConsumerController {

@Autowired

private ConsumerService consumerService;

@GetMapping("/consumer")

public String getProducer(){

return consumerService.consumer();

}

}

以下是feign调用的接口声明:

/**

* 调用生产者服务

*/

@FeignClient("consul-producer")

public interface ProducerRemote {

@GetMapping("/producer")

String producer();

}

以下是生产者consul-consumer的启动配置文件application.yml:

spring:

application:

name: consul-consumer #消费者名称

cloud:

consul:

host: 10.0.0.45 #consul注册节点IP

port: 8500 #consul注册节点端口

discovery:

instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${server.port} #实例ID

health-check-path: /actuator/health #健康检查

health-check-interval: 10s

server:

port: 9092 #消费者服务端口

生产者和消费者存在了,就启动可以了,接下来是启动两个生产者,一个消费者,为了直观的区分两个生产者,在调用生产者返回的string稍微做了区分,一个是返回“Hello, I'm producer”,而另一个则返回“Hello, I'm producer2”,为了实现负载均衡便于测试。

其中在本机上10.0.0.93分别启动了程序consul-consumer和consul-producer,在另一台机器10.0.0.191上启动另一个生产者实例consul-producer

启动之后在consul的界面上看到如下样子:

bf59292e592d9442bfeb28912fccf951.png

57fb1045222c56fbde417172cd29d144.png

四、测试负载功能

通过浏览器,Get请求消费者的controller,会看到“Hello, I'm producer”和“Hello, I'm producer2”在交替显示,这也是fegin调用的特性,轮询机制实现负载均衡。

4218f1718ebadb81083b1c0e1d898179.png

98cb72c9977f9366b18ef3028bb2bfd5.png

五、总结

目前微服务框架比较流行,最近项目也是上线了一些Spring Cloud微服务架构的产品,同时也在探索其他可替代组件,因此对consul进行了相关学习,便整理成该文章,在consul的使用过程中也是存在一些不明白的地方,其中Eureka的注册时可以配置多地址的,没有发现consul怎么向多个节点进行注册,希望有用过的大佬给指点一二,还在学习中,共勉。

以上所述是小编给大家介绍的SpringCloud与Consul集成实现负载均衡功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Cloud Gateway是Spring Cloud生态中的一个API网关框架,可以实现请求的路由、限流、鉴权、监控等功能。其中,负载均衡是Spring Cloud Gateway中非常重要的功能之一。本篇文章就来介绍一下Spring Cloud Gateway的负载均衡功能。 在Spring Cloud Gateway中,负载均衡是通过路由(Route)来实现的。每一个路由对应一个或多个服务实例,Spring Cloud Gateway会根据负载均衡策略,将请求转发到对应的服务实例。 Spring Cloud Gateway支持多种负载均衡策略,包括: 1. RoundRobinLoadBalancer:轮询负载均衡策略,每个服务实例轮流接收请求。 2. WeightedResponseTimeLoadBalancer:响应时间加权负载均衡策略,对每个服务实例的响应时间进行加权,响应时间短的服务实例接收更多的请求。 3. ZoneAvoidanceRule:区域避让负载均衡策略,对于不同区域的服务实例,Spring Cloud Gateway会尽量选择同一区域的服务实例来处理请求。 除了以上几种负载均衡策略之外,Spring Cloud Gateway还支持自定义负载均衡策略。在自定义负载均衡策略时,需要实现Spring Cloud Gateway的LoadBalancerClient接口和LoadBalancer接口。 下面是一个示例,展示了如何在Spring Cloud Gateway中使用RoundRobinLoadBalancer策略: ```java @Configuration public class GatewayConfig { @Bean public RouteLocator customRouteLocator(RouteLocatorBuilder builder) { return builder.routes() .route(r -> r.path("/foo/**") .uri("lb://service-foo") .id("service-foo") .lb(new RoundRobinLoadBalancer())) .build(); } } ``` 在上面的示例中,我们配置了一个路由,将请求转发到service-foo服务实例。并且指定了负载均衡策略为RoundRobinLoadBalancer。 除了在配置文件中配置负载均衡策略之外,Spring Cloud Gateway还支持通过请求头、请求参数等方式,动态设置负载均衡策略。这样可以在运行时根据实际情况,动态调整负载均衡策略。 总的来说,Spring Cloud Gateway的负载均衡功能非常强大,支持多种负载均衡策略,并且支持自定义负载均衡策略。这为我们构建高可用、高性能的分布式系统提供了很大的便利。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值