1.什么是负载均衡
负载均衡是高可用网络基础架构的一个关键组成部分, 有了负载均衡,我们通常可以部署多台应用服务器、然后通过负载均衡将用户的请求分发到不同的服务看用来提高网站、应用、数据库或其他服务的性能以及可靠性。
1.1负载均衡分为硬件负载均衡和软件负载均衡两种
(1)硬件负载均衡的解决方案就是直接在服务器和外部网络间安装负载均衡设备,通常这种设备称为负载均衡器。这样由专门的设备完成专门的任务,负载均衡器独立于操作系统之外,整体性能得到大幅提高。加上多样化的负载均衡策略,智能化的流量统计,硬件负载均衡的解决方案可达到最佳的负载均衡效果。
(2)软件负载均衡的解决方案是指在一台或多台服务器相应的操作系统上安装一个或多个附加软件来实现负载均衡,如DNS Load Balance、 CheckPoint Firewall-1 ConnectControl 等。它的优点是基于特定环境、配置简单、使用灵活、成本低廉,可以满足一般的负 载均衡需求。无论哪种负载均衡策略,都是为了系统高可用、缓解网络压力以及扩容机器处理能力。
Ribbon整合Eureka结构示例图
2.Ribbon的工作原理
前面我们使用Ribbon实现负载均衡时,基本用法是注入一个RestTemplate,并使用@LoadBalanced注解标注RestTemplate,从而使RestTermplate 具备负载均衡的能力。
当Spring容器启动时,使用@LoadBalanced注解修饰的RestTemplate 会被添加到拦截器中,拦截器中使用了loadbanlancerclinet处理请求,从而达到负载均衡的目的。
3.实践
这里只搭建含有Ribbon的服务消费者
说明:此实验是在高可用集群的基础上开始的,高可用集群可参考:
Eureka——服务注册与发现框架_杜小白也想的美的博客-CSDN博客
1、创建一个SpringBoot的项目,添加Eureka Client,Ribbon(注意:Eureka client内置了此依赖,此依赖在高版本的Eureka Clinet中可能会引发错误,比如服务调用不成功),Web依赖。
2、配置application.yml文件
配置文件如下:
spring:
application:
name: eureka-ribbon-client
server:
port: 8764
eureka:
client:
serviceUrl:
defaultZone: http://localhost:7000/eureka
3、创建配置类
在类中创建RestTemplate对象的Bean,并通过@LoadBalance开启负载均衡,如下:
@Configuration
public class RibbonConfig {
@Bean
@LoadBalanced
public RestTemplate rt(RestTemplateBuilder rtb){
return rtb.build();
}
}
3、创建RibbonService类,注入RestTemplate对象,并调用提供者服务
如下:
@Service
public class RibbonService {
@Autowired
RestTemplate rt ;
public String hi() {
return rt.getForObject(
"http://eureka-provider/port",String.class);//由于使用了@LoadBalanced注解,此处URI形式为http://应用名/API接口
}
}
4、创建RibbonController类
@RestController
public class RibbonController {
@Autowired
RibbonService ribbonService;
@RequestMapping("/hi")
public String gethi() {
return ribbonService.hi();
}
}
5、在启动类中添加@SpringBootApplication @EnableEurekaClient
6、启动测试(两个提供者的端口分别是7002,7007)