负载均衡之源地址Hash

一 算法

源地址 Hash 是根据客户端的 IP 地址,通过 Hash 函数的运算把 IP 地址转换为一个固定的数字。根据“Hash”后的数字,对服务器列表进行取模运算,得到服务器的序号。

这种算法的好处是,同一个 IP 地址所选择的服务器总是相同的。相同服务器本地缓存数据,对于有状态的服务来说,每次访问都会命中缓存。

除了源地址 Hash 外,还有目标地址 Hash,它和源地址 Hash 的原理类似。

下图是按源地址进行 Hash 运算后,后端分配的请求情况。

二 实现

package loadbalance;

/**
* @className: HashIPSelect
* @description: 源地址 Hash
* @date: 2022/1/15
* @author: cakin
*/
public class HashIPSelect {
    /**
     * 功能描述:源地址 Hash 算法
     *
     * @param serverNum 后端服务器总量
     * @param IP        IP 地址
     * @return int 服务器的序号,可以根据序号找到服务器 IP 地址并转发
     * @author cakin
     * @date 2022/1/15
     */
    static int hashIPSelect(int serverNum, String IP) {
        int hashCode = Math.abs(IP.hashCode());
        return hashCode % serverNum;
    }

    public static void main(String[] args) {
        int curServer = hashIPSelect(2, "172.10.0.1");
        System.out.println("当前选择第 " + curServer + " 台服务器");
        curServer = hashIPSelect(2, "172.10.0.2");
        System.out.println("当前选择第 " + curServer + " 台服务器");
        curServer = hashIPSelect(2, "172.10.0.3");
        System.out.println("当前选择第 " + curServer + " 台服务器");
        curServer = hashIPSelect(2, "172.10.0.4");
        System.out.println("当前选择第 " + curServer + " 台服务器");
        curServer = hashIPSelect(2, "172.10.0.5");
        System.out.println("当前选择第 " + curServer + " 台服务器");
        curServer = hashIPSelect(2, "172.10.0.6");
        System.out.println("当前选择第 " + curServer + " 台服务器");
    }
}

三 测试

当前选择第 0 台服务器
当前选择第 1 台服务器
当前选择第 0 台服务器
当前选择第 1 台服务器
当前选择第 0 台服务器
当前选择第 1 台服务器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值