欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

微服务

程序员文章站 2022-06-03 20:17:46
...

一:简介

Ribbon负载均衡项目。
主要包括三个子模块:
  1. ribbon-core:核心,主要负责均衡器接口定义、客户端接口定义、内置的负载均衡实现等API
  2. ribbon-eureka:为Eureka客户端提供的负载均衡实现类
  3. ribbon-httpclient:对Apache的HttpClient进行封装,提供含有负载均衡功能的REST客户端

1.1负载均衡器组件

负载均衡器需要提供以下的功能:
  1. 维护服务器的IP、DNS名称等信息
  2. 根据特定的逻辑在服务列表中循环

为了实现以上的基本功能,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自带的负载规则

  1. RoundRobinRule:系统默认的规则,通过简单的轮询服务列表来选择服务器,其他规则在很多情况下仍使用RoundRobinRule
  2. 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
相关标签: 微服务