常见的负载均衡算法
在分布式系统中,多台服务器同时提供一个服务,往往就需要一个负载均衡算法,来分发流量。
常见的有:随机、加权随机、轮询、加权轮询、平滑加权轮询、源地址hash、最小连接数法。
随机和加权随机很容易理解,在数组中随机选取一台机器来提供服务,加权随机,就是使得权重大的占随机总量多一些。
而轮询(round robin)一般常用的就是平滑加权轮询算法,在nginx等服务器上用的比较多,核心思想就是使得权重大的机器,能减轻压力,避免轮询的时候,很多个请求全部打到权重大的那台机器上,使用平滑加权,每次都会请求都会更新一个动态权重,来做到平滑轮询。
至于源地址hash,就是使用请求的客户端ip做hash,然后把同一个ip的请求都转发到同一台机器,这种做法,在web服务器上的一些业务场景,可以实现客户端的session的状态都保持在同一台机器。
最小连接数法,就是来一个请求,服务器的计数器加一,处理完一个请求,计数器减一,这样在新请求来的时候,负载均衡服务器就会找出所有服务器中最少活跃数(连接请求数)的那台服务器提供服务。
go语言版的实现:负载均衡算法