LoadBalancer(负载均衡器)是一种网络设备或软件,用于将网络流量分配到多个服务器,以实现负载均衡和高可用性。它可以帮助确保网络服务器能够有效地处理大量的请求,并避免某些服务器过载而导致性能下降或服务不可用。
Nginx是服务器负载均衡,客户端所有请求都会交给nginx,然后由nginx实现转发请求,即负载均衡是由服务端实现的。
loadbalancer本地负载均衡,在调用微服务接口时候,会在注册中心上获取注册信息服务列表之后缓存到JVM本地,从而在本地实现RPC远程服务调用技术。
LoadBalancer 在工作时分成两步:
第一步,先选择ConsulServer从服务端查询并拉取服务列表,知道了它有多个服务(上图3个服务),这3个实现是完全一样的,
默认轮询调用谁都可以正常执行。
第二步,按照指定的负载均衡策略从server取到的服务注册列表中由客户端自己选择一个地址,所以LoadBalancer是一个客户端的负载均衡器。
//在800端口拷贝与8001端口一样的服务
Consul数据持久化配置
//在consul同级目录下新建consul_startt.bat文件,内容如下
@echo.服务启动......
@echo off
@sc create Consul binpath= "D:\devSoft\consul_1.17.0_windows_386\consul.exe agent -server -ui -bind=127.0.0.1 -client=0.0.0.0 -bootstrap-expect 1 -data-dir D:\devSoft\consul_1.17.0_windows_386\mydata "
@net start Consul
@sc config Consul start= AUTO
@echo.Consul start is OK......success
@pause
**注意:**consul里data配置的缩进不要用tab键,要用空格
修改80端口(调用端口)
//在80端口服务pom文件中添加依赖
<!--loadbalancer-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
//修改controller
@GetMapping("/consumer/pay/get/info")
public String getByConsul() {
return restTemplate.getForObject(paymentSrv_URL+"/pay/get/info", String.class);
}
会自动交替调用8001端口和8002端口
通过DiscoveryClient动态获取服务列表
@Resource
private DiscoveryClient discoveryClient;
@GetMapping("/consumer/discovery")
public String discovery()
{
List<String> services = discoveryClient.getServices();
for (String element : services) {
System.out.println(element);
}
System.out.println("===================================");
List<ServiceInstance> instances = discoveryClient.getInstances("cloud-payment-service");
for (ServiceInstance element : instances) {
System.out.println(element.getServiceId()+"\t"+element.getHost()+"\t"+element.getPort()+"\t"+element.getUri());
}
return instances.get(0).getServiceId()+":"+instances.get(0).getPort();
}
负载均衡有两种算法:轮询算法 和 随机算法 一般用轮询