定义
负载均衡就是一种计算机网络技术,用来在多个计算机(计算机集群)、网络连接、CPU、磁碟驱动器或其他资源中分配负载,以达到最佳化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。
常见负载均衡算法
轮询(Round Robin)
请求到达后,将客户端发送到负载均衡器的请求依次轮流地转发给服务集群的某个节点。
优点:实现简单,每个集群节点平均分担所有的请求。
缺点:当集群中服务器硬件配置不同、性能差别大时,无法区别对待。引出下面的算法。
随机(Random)
随机选取集群中的某个节点来处理该请求,由概率论的知识可知,随着请求量的变大,随机算法会逐渐演变为轮询算法,即集群各个节点会处理差不多数量的请求。
优点:简单使用,不需要额外的配置和算法。
缺点:随机数的特点是在数据量大到一定量时才能保证均衡,所以如果请求量有限的话,可能会达不到均衡负载的要求。
加权
加权算法主要是根据集群的节点对应机器的性能的差异,给每个节点设置一个权重值,其中性能好的机器节点设置一个较大的权重值,而性能差的机器节点则设置一个较小的权重值。权重大的节点能够被更多的选中。它是和随机、轮训一起使用的。
优点:可以根据机器的具体情况,分配不同的负载,达到能者多劳。
缺点:需要额外管理加权系数。
最小连接数
主要是根据集群的每个节点的当前连接数来决定将请求转发给哪个节点,即每次都将请求转发给当前存在最少并发连接的节点。
优点:可以根据集群节点的负载情况来进行请求的动态分发,即机器性能好,处理请求快,积压请求少的节点分配更多的请求。避免某个节点因为处理超过自身所能承受的请求量而导致宕机或者响应过慢。
hash
将对请求的IP地址或者URL计算一个哈希值,然后与集群节点的数量进行取模来决定将请求分发给哪个集群节点。它不是真正意义上的负载均衡,在某些意义上也是一个单点服务。
优点:实现简单
缺点:如果某个节点挂了,会使得一部分流量不可用。
负载均衡分类
1. 硬件负载均衡
常见的硬件有比较昂贵的F5和Array等商用的负载均衡器,它的优点简单,有专业的人负责; 缺点就是贵,如果你是土豪,可以考虑,但是对于规模较小的网络服务来说暂时还没有需要使用。
2. 软件负载均衡
目前使用最广泛的三种负载均衡软件Nginx/LVS/HAProxy,他们都是开源免费的负载均衡软件,这些都是通过软件级别来实现,所以费用较低。足以见得,搞软件的是多么不值钱!
3. 成熟的架构
负载均衡业界早已有成熟的架构,比较常用的有LVS+Keepalived、Nginx+Keepalived、HAProxy+Keepalived。