负载均衡是将客户端请求访问,通过提前约定好的规则转发给各个server。其中有好几个种经典的算法,下面我们用Java实现这几种算法。
轮询算法轮询算法按顺序把每个新的连接请求分配给下一个服务器,最终把所有请求平分给所有的服务器。
优点:绝对公平
缺点:无法根据服务器性能去分配,无法合理利用服务器资源。
输出结果:
192.168.1.1192.168.1.2192.168.1.3192.168.1.1192.168.1.2192.168.1.3192.168.1.1192.168.1.2192.168.1.3192.168.1.1
加权轮询法该算法中,每个机器接受的连接数量是按权重比例分配的。这是对普通轮询算法的改进,比如你可以设定:第三台机器的处理能力是第一台机器的两倍,那么负载均衡器会把两倍的连接数量分配给第3台机器,轮询可以将请求顺序按照权重分配到后端。
输出结果:
192.168.1.1192.168.1.3192.168.1.3192.168.1.3192.168.1.3192.168.1.2192.168.1.2192.168.1.1192.168.1.3192.168.1.3
加权随机法获取带有权重的随机数字,随机这种东西,不能看绝对,只能看相对,我们不用index 控制下标进行轮询,只用random 进行随机取ip,即实现算法。
输出结果:
192.168.1.3192.168.1.3192.168.1.2192.168.1.1192.168.1.2192.168.1.1192.168.1.3192.168.1.2192.168.1.2192.168.1.3
随机法负载均衡方法随机的把负载分配到各个可用的服务器上,通过随机数生成算法选取一个服务器,这种实现算法最简单,随之调用次数增大,这种算法可以达到每台服务器的请求量接近于平均。
输出
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.2
IP_Hash算法hash(ip)%N算法,通过一种散列算法把客户端来源IP根据散列取模算法将请求分配到不同的服务器上
优点:保证了相同客户端IP地址将会被哈希到同一台后端服务器,直到后端服务器列表变更。根据此特性可以在服务消费者与服务提供者之间建立有状态的session会话
缺点: 如果服务器进行了下线操作,源IP路由的服务器IP就会变成另外一台,如果服务器没有做session 共享话,会造成session丢失。
输出结果
192.168.1.3
每次运行结果都一样
到此这篇关于Java实现5种负载均衡算法(小结)的文章就介绍到这了,更多相关Java 负载均衡 内容请搜索七叶笔记以前的文章或继续浏览下面的相关文章希望大家以后多多支持七叶笔记!