微服务
程序员文章站
2022-06-03 20:17:46
...
一:简介
Ribbon负载均衡项目。
主要包括三个子模块:
- ribbon-core:核心,主要负责均衡器接口定义、客户端接口定义、内置的负载均衡实现等API
- ribbon-eureka:为Eureka客户端提供的负载均衡实现类
- ribbon-httpclient:对Apache的HttpClient进行封装,提供含有负载均衡功能的REST客户端
1.1负载均衡器组件
负载均衡器需要提供以下的功能:
- 维护服务器的IP、DNS名称等信息
- 根据特定的逻辑在服务列表中循环
为了实现以上的基本功能,Ribbon的负载均衡器有以下三个大子模块
3. Rule:一个逻辑组件,这些逻辑将会决定从服务器列表中返回哪个服务器实实例
4. Ping: 该组件主要使用定时器来确保服务器网络可以连接
5. ServerList:服务器列表,可以通过静态的配置确定负载的服务器,也可以动态制定服务器列表。
1.2 Ribbon负载均衡机制
Ribbon提供了几个负载均衡的组件,为了让请求转给合适的服务器处理
1.2.1 负载均衡器
Ribbon的负载均衡器借口定义了服务器的操作,主要的目的用于进行服务器选择
eg:BaseLoadBalancer
1.2.2 自定义负载规则
如果想自定义负载均衡规定,需要编写一个IRule接口的实现类
public class MyRule implements IRule{
}
1.2.3 Ribbon自带的负载规则
- RoundRobinRule:系统默认的规则,通过简单的轮询服务列表来选择服务器,其他规则在很多情况下仍使用RoundRobinRule
- AvailabilityFilteringRule: 该规则会忽略以下的服务器
- 无法连接的服务器
- 并发数过高的服务器
1.2.4ping机制
在负载均衡器中,提供了 Ping 机制,每隔一段时间,会去 Ping 服务器,判断服务器是否存活,该工作由 com.netflix.loadbalancer.IPing 接口的实现类负责,如果单独使用 Ribbon 默认情况下不会** Ping 机制,默认的实现类为 DummyPing(不验证)
package org.lixue.ribbon.client;
import com.netflix.loadbalancer.IPing;
import com.netflix.loadbalancer.Server;
public class MyPing implements IPing{
public boolean isAlive(Serverserver){
System.out.println("isAlive"+server.getHostPort());
return true;
}
}
修改 src/main/resources 目录下的 ribbon-client.properties 配置如下:
#配置服务器列表
MyRibbonClient.ribbon.listOfServers=localhost:8080,localhost:8002
#配置负载均衡规则IRule的实现类
MyRibbonClient.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.WeightedResponseTimeRule
#配置负载均衡实现类
MyRibbonClient.ribbon.NFLoadBalancerClassName=com.netflix.loadbalancer.ZoneAwareLoadBalancer
#配置IPing的实现类
MyRibbonClient.ribbon.NFLoadBalancerPingClassName=org.lixue.ribbon.client.MyPing
#配置Ping操作的间隔
MyRibbonClient.ribbon.NFLoadBalancerPingInterval=2
上一篇: 微服务
下一篇: 盐在古代到底有做重要 足以成为立国之本