BYTECODES

常见的负载均衡方法

常见的负载均衡方法有很多

随机访问策略

系统随机访问,缺点:可能造成服务器负载压力不均衡,有的服务器流量大,有的很闲。

轮询策略

请求均匀分配,如果服务器有性能差异,则无法实现性能好的服务器能够多承担一部分。

权重轮询策略

权值需要静态配置,无法自动调节,不适合对长连接和命中率有要求的场景。

Hash取模策略

对访问者的IP,通过固定算式hash(IP) % N(N为服务器的个数),使得每个IP都可以定位到特定的服务器。改方法不稳定,如果列表中某台服务器宕机,则会导致路由算法产生变化。当然可以动态获取到当前可用服务器的个数来解决这个不稳定问题。


数据库分库分表的一种方法就是基于用户id来取hash,得到相应的库,但是这种方法做数据迁移就比较麻烦。

一致性哈希策略

一致性Hash算法将整个哈希值空间组织成一个虚拟的圆环,如假设某哈希函数 H 的值空间为 0 ~ 2^32-1。然后我们使用服务器各自的 IP 地址或主机名作为关键字进行哈希计算,使用哈希后的结果对2^32取模,即会映射到圆环上的某个点。


根据用户的IP使用上面相同的函数Hash计算出哈希值,并确定此数据在环上的位置,从此位置沿环顺时针行走,遇到的第一台服务器就是其应该定位到的服务器。


但是如果服务器隐射到这环上不均匀,会发生Hash环数据倾斜问题,解决办法就是使用虚拟节点,一个真实服务器对应多个虚拟节点,增加环上节点数量,从而使得请求能够均匀分布。比如服务器1的ip是192.168.1.2,那么可以构建2个虚拟节点1A, 1B,具体hash方法如下

hash("192.168.1.2#1A") % 2^32
hash("192.168.1.2#1B") % 2^32