package com.monkeyjava.learn.basic.robin;import com.google.common.collect.Lists;import java.util.List;import java.util.Random;public class TestRandom {private List<String> ips = Lists.newArrayList("192.168.1.1", "192.168.1.2", "192.168.1.3");public String randomRobin(){//随机数Random random=new Random();int index =random.nextInt(ips.size());String serverIp= ips.get(index);returnserverIp;}public static void main(String[] args) {TestRandom testRandomdRobin =new TestRandom();for (int i=0;i< 10 ;i++){String serverIp= testRandomdRobin.randomRobin();System.out.println(serverIp);}}}输出
192.168.1.3192.168.1.3192.168.1.1192.168.1.2192.168.1.1192.168.1.3192.168.1.2192.168.1.3192.168.1.3192.168.1.2IP_Hash算法hash(ip)%N算法 , 通过一种散列算法把客户端来源IP根据散列取模算法将请求分配到不同的服务器上
优点:保证了相同客户端IP地址将会被哈希到同一台后端服务器 , 直到后端服务器列表变更 。根据此特性可以在服务消费者与服务提供者之间建立有状态的session会话
缺点: 如果服务器进行了下线操作 , 源IP路由的服务器IP就会变成另外一台 , 如果服务器没有做session 共享话 , 会造成session丢失 。
package com.monkeyjava.learn.basic.robin;import com.google.common.collect.Lists;import java.util.List;public class TestIpHash {private List<String> ips = Lists.newArrayList("192.168.1.1", "192.168.1.2", "192.168.1.3");public String ipHashRobin(String clientIp){int hashCode=clientIp.hashCode();int serverListsize=ips.size();int index = hashCode%serverListsize;String serverIp= ips.get(index);returnserverIp;}public static void main(String[] args) {TestIpHash testIpHash =new TestIpHash();String servername= testIpHash.ipHashRobin("192.168.88.2");System.out.println(servername);}}输出结果
192.168.1.3每次运行结果都一样
推荐阅读
- 嵌入式常用滤波算法的matlab实现
- 一根网线实现上网+IPTV,单线复用文字教程
- 学习Java需要掌握哪些技能?
- Python封装机制及实现方法
- Java开发中的POJO、Dto、PO、Vo傻傻分不清楚?一文看懂
- 一个基于spring boot的Java开源商城系统
- 使用vue实现查询,显示,删除
- 减肉最狠的5种食物是什么?
- PHP-JS-AES对称加密解密代码实现
- 5 分钟,使用内网穿透快速实现远程桌面
