分布式系统开发技术|功能区负载平衡

系统开发

系统架构设计


浏览:1318 次

本文撰写于网易云课堂课程中,部分图片引用自网易云课堂ppt

1、 什么是负载平衡

1.服务器端负载平衡和客户端负载平衡

图像.png

[服务器负载平衡]

所有请求都被调用到服务器,如nginx、LVS(Linux虚拟服务器)、F5等

[客户端负载平衡]

在服务使用者中,选择要通过负载平衡器(如ribbon负载平衡器)调用的服务提供者

2.功能区客户端负载平衡

图像.png

Ribbon是客户端负载平衡器

2、 色带的综合使用

基于分布式系统开发技术| Eureka中的代码,[服务消费者]被改造

1.Maven简介

<依赖关系>

组织弹簧框架。云

spring cloud starter netflix彩带

<版本>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机制

这相当于心跳。每隔一段时间判断服务实例是否正常

【升】