Ribbon 核心顶层抽象

package com.netflix.loadbalancer;
public interface IRule {
Server choose(Object var1); void setLoadBalancer(ILoadBalancer var1); ILoadBalancer getLoadBalancer();
}

继承 IRule 实现 choose 方法

默认实现

我们这里说明现有的集成扩展从写

BestAvailableRule

选择一个最小的并发请求的server


import com.netflix.loadbalancer.BestAvailableRule;
import com.netflix.loadbalancer.Server; import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List; /**
* 本地优先策略:尽可能选择本地(相同IP)的服务提供者
*/
public class LocalPreferedRule extends BestAvailableRule { /**
* 本机IP地址{搜索本地网卡优先}
*/
private List<String> ips = new ArrayList<>(); /**
* 偏向的IP地址||除了本地优先之外,尽可能少去选择其他开发者的主机
* 未找到本地优先时偏向使用测试公共环境{10.130.1.11/13/14/15/18/19}
*/
private String biasIp = "10.130.1.1"; public LocalPreferedRule() {
getIpAddress();
} public void getIpAddress() {
try {
Enumeration<NetworkInterface> allNetInterfaces = NetworkInterface.getNetworkInterfaces();
InetAddress ip = null;
while (allNetInterfaces.hasMoreElements()) {
NetworkInterface netInterface = allNetInterfaces.nextElement();
if (netInterface.isLoopback() || netInterface.isVirtual() || !netInterface.isUp()) {
continue;
} else {
Enumeration<InetAddress> addresses = netInterface.getInetAddresses();
while (addresses.hasMoreElements()) {
ip = addresses.nextElement();
if (ip != null && ip instanceof Inet4Address) {
ips.add(ip.getHostAddress());
}
}
}
}
} catch (Exception e) {
System.err.println("IP地址获取失败" + e.toString());
}
} @Override
public Server choose(Object key) {
List<Server> serverList = getLoadBalancer().getAllServers();
Server chosen = null;
for (Server server : serverList) {
if (ips.contains(server.getHost())) {
chosen = server;
}
if (chosen == null && server.getHost().contains(biasIp)) {
chosen = server;
}
}
if (chosen == null) {
return super.choose(key);
} else {
return chosen;
}
}
}

Ribbon-Loadbalancer自定义负载均衡策略:本地优先+偏向服务器优先的更多相关文章

  1. Ribbon自带负载均衡策略比较

    Ribbon自带负载均衡策略比较 策略名 策略声明 策略描述 实现说明 BestAvailableRule public class BestAvailableRule extends ClientC ...

  2. Ribbon自带负载均衡策略

    IRule这是所有负载均衡策略的父接口,里边的核心方法就是choose方法,用来选择一个服务实例. AbstractLoadBalancerRuleAbstractLoadBalancerRule是一 ...

  3. gRPC负载均衡(自定义负载均衡策略)

    前言 上篇文章介绍了如何实现gRPC负载均衡,但目前官方只提供了pick_first和round_robin两种负载均衡策略,轮询法round_robin不能满足因服务器配置不同而承担不同负载量,这篇 ...

  4. 【Ribbon篇四】自定义负载均衡策略(4)

    官方文档特别指出:自定义的负载均衡配置类不能放在 @componentScan 所扫描的当前包下及其子包下,否则我们自定义的这个配置类就会被所有的Ribbon客户端所共享,也就是说我们达不到特殊化定制 ...

  5. 撸一撸Spring Cloud Ribbon的原理-负载均衡策略

    在前两篇<撸一撸Spring Cloud Ribbon的原理>,<撸一撸Spring Cloud Ribbon的原理-负载均衡器>中,整理了Ribbon如何通过负载均衡拦截器植 ...

  6. Ribbon自定义负载均衡策略,在网关实现类似Ip_hash的负载均衡,ribbon给单个服务配置属性

    背景: 我需要在网关实现一种功能,某个用户的请求永远打在后台指定的服务,也就是根据ip地址进行负载均衡 原理: 在ribbon的配置类下: 那我们自己创建一个IRule的实现类,模仿ZoneAvoid ...

  7. spring cloud中通过配置文件自定义Ribbon负载均衡策略

    一.Ribbon中的负载均衡策略 1.Ribbon中支持的负载均衡策略 AvailabilityFilteringRule:过滤掉那些因为一直连接失败的被标记为circuit tripped的后端se ...

  8. 自定义Ribbon的负载均衡策略

    自定义负载均衡策略 官方文档指出:自定义的负载均衡配置类不能放在 @componentScan 所扫描的当前包下及其子包下,否则我们自定义的这个配置类就会被所有的Ribbon客户端所共享,也就是说我们 ...

  9. Spring Cloud Ribbon 中的 7 种负载均衡策略

    负载均衡通器常有两种实现手段,一种是服务端负载均衡器,另一种是客户端负载均衡器,而我们今天的主角 Ribbon 就属于后者--客户端负载均衡器. 服务端负载均衡器的问题是,它提供了更强的流量控制权,但 ...

  10. 每天学点SpringCloud(三):自定义Eureka集群负载均衡策略

    相信看了 每天学点SpringCloud(一):简单服务提供者消费者调用,每天学点SpringCloud(二):服务注册与发现Eureka这两篇的同学都了解到了我的套路,没错,本篇博客同样是为了解决上 ...

随机推荐

  1. 解决git clone 速度慢的问题

    解决git clone 速度慢的问题 1.原因 git clone特别慢是因为github.global.ssl.fastly.net域名被限制了. 只要找到这个域名对应的ip地址,然后在hosts文 ...

  2. JVM实战—12.OOM的定位和解决

    大纲 1.如何对系统的OOM异常进行监控和报警 2.如何在JVM内存溢出时自动dump内存快照 3.Metaspace区域内存溢出时应如何解决(OutOfMemoryError: Metaspace) ...

  3. 冷水机超频AMD 2600X 4.5G

    整个测试大概持续了一个半小时,期间水温保持在2度左右(±1摄氏度).后来开始冷凝,而且超频也到了4.5G瓶颈,所以停了下来. 全核4.4G过R154.5G过CPU-Z认证(点击查看)温度表现,一般吧. ...

  4. Solution Set -「NOIP Simu.」20221005

    \(\mathscr{A}\sim\)「CF 1252G」Performance Review   Link & Submission.   Tag:「水题无 tag」   记 \(A=a_1 ...

  5. Solution -「ROI 2018」「LOJ #2850」无进位加法

    \(\mathscr{Description}\)   Link.   给定 \(\{a_n\}\),每次令某个 \(a_i\leftarrow a_i+1\),最终得到 \(\{b_n\}\),求 ...

  6. 一款简单易用的印章设计工具 --(可转为ofd文件)

    本人开发了一款印章设计软件:不但可以将印章保存为图片,而且可以保存为ofd格式文件. 将印章保存为ofd格式,有很多优势:占用资源少.缩放不失真.可添加元数据. 矢量化图形格式一般为svg.pdf.很 ...

  7. C# Moq - Non-overridable members may not be used in setup / verification expressions

    测试: public class UnitTest1 { [TestMethod] public void TestMethod1() { Mock<TestClass> moc = ne ...

  8. Educational Codeforces Round 173 (Rated for Div. 2)

    题目链接:Dashboard - Educational Codeforces Round 173 (Rated for Div. 2) - Codeforces 总结:翻译插件用不了了,B题题意一直 ...

  9. IDEA 接入 DeepSeek,太酷了!

    你好,我是 Guide.前两天,我发文提到 DeepSeek 的回答推荐了我的资料 <JavaGuide 面试突击版>(PDF):DeepSeek 的这波回答我给满分!. 这篇文章简单介绍 ...

  10. C#中使用正则将字符串中某字符不区分大小写并按全字匹配替换为空

    具体代码如下所示: //将字符串中desc不区分大小写并按全字匹配替换为空 var strText = "CreatDeSce DeSc,UserName AsC"; string ...