分布式系统开发技术|功能区负载平衡
系统开发
系统架构设计
浏览:1341 次

本文撰写于网易云课堂课程中,部分图片引用自网易云课堂ppt
1、 什么是负载平衡
1.服务器端负载平衡和客户端负载平衡
图像.png
[服务器负载平衡]
所有请求都被调用到服务器,如nginx、LVS(Linux虚拟服务器)、F5等
[客户端负载平衡]
在服务使用者中,选择要通过负载平衡器(如ribbon负载平衡器)调用的服务提供者
2.功能区客户端负载平衡
图像.png
Ribbon是客户端负载平衡器
2、 色带的综合使用
基于分布式系统开发技术| Eureka中的代码,[服务消费者]被改造
1.Maven简介
<依赖关系>
<版本>1.4.2.发布版本>
依赖性>
2.代码示例
2.1与Restemplate结合使用的功能区
步骤1:注释模板方法@LoadBalanced以实现负载平衡,这是Ribbon的内部应用模式
@豆
@负载平衡
公共RestTemplate模板(){
返回新的RestTemplate();
}
步骤2:使用重新模板调用
@GetMapping(“索引”)
公共对象getIndex(){
//使用RestTemplate访问服务提供商。在这里,使用服务名称访问
return restTemplate。getForObject(“https://HELLOSERVER/“,String.class,”“);
}
2.2接下来,将@LoadBalanced替换为原始演示,以实现ribbon的执行过程
app.yml:
服务器:
端口:8083
春天:
app:
名称:消费者演示
##重建配置
尤里卡:

客户:
#关闭服务注册
已启用:false
##1: 为我们定义一个服务器列表以使用负载平衡
##格式{servcid}:功能区:listOfServers
hello服务器:
功能区:
服务器列表:本地主机:8001,本地主机:800
登录中:
级别:
组织:
弹簧框架:
云:调试
通用域名格式:
netflix:调试
CustomerDemoApplication:使用@RibbonClients注释
@SpringBootapp
@Rest控制器
@Ribbon客户端(
@RibbonClient(value=“hello server”)
)
公共类CustomerDemoApplication{
public static void main(String[]args){
SpringApplication.run(CustomerDemoApplication.class,参数);
}
@豆
公共RestTemplate模板(){
返回新的RestTemplate();
}
@豆
public IRule ribbonRule(){
//自定义规则
返回新的RandomRule();
}
}
客户控制器:
@Rest控制器
公共类CustomerController{
@自动连线
私有RestTemplate RestTemplate;
@自动连线
LoadBalancer客户端LoadBalancerClient;//注入LoadBalancer客户端

@GetMapping(“索引”)
公共对象getIndex(){
//获取服务实例
ServiceInstance ServiceInstance=loadBalancerClient.cose(“hello server”);
//IP地址
字符串ip=serviceInstance.getHost();
//端口
int port=serviceInstance.getPort();
return restTemplate.getForObject(“https://”+ip+“:”+port,String.class,“”);
}
}
分别启动Eureka注册中心、服务提供商和消费者项目
可以看出,消费者发送请求并从服务器1/服务器2接收响应
图像.png
3、 Ribbon核心知识
1.ribbon客户端负载平衡器的结构和初始化过程
[功能区初始化方法]
图像.png
ribbon自动配置:ribbon的自动程序集类
SpringClientFactory:它包含各种获取对象的方法——例如负载平衡器、实例等
LoadBalancerClient:定义各种方法,如URI获取、服务实例选择等(默认RibbonLoadBalancer客户端)
源代码条目:
Ribbon自动配置
图像.png
图像.png
其他概念:
父子容器用于资源隔离。父容器无法访问子容器。子容器可以访问父容器。例如,Spring和Spring MVC
2.功能区如何实现负载平衡(策略)?
[RRibbon规则]
IRule是一个负载平衡规则。功能区中提供了以下负载平衡规则:
图像.png
如果未定义区域,则默认使用轮询策略
实施自定义规则:
@豆
public IRule ribbonRule(){
//自定义规则,其中使用随机数策略
返回新的RandomRule();
}
3.Ribbon的容错机制
Iping机制
这相当于心跳。每隔一段时间判断服务实例是否正常
【升】