负载均衡
当系统面临大量用户访问,负载过高时,通常会使用增加服务器数量来进行横向扩展,但是同时又希望请求不集中在个别服务器上,此时就应做负载均衡服务.
负载均衡的基本原理是通过运行在前面的负载均衡服务,按照特定的负载均衡算法,从而为系统提供并行扩展的能力.
负载均衡服务一般会有内外网隔离,健康检查等功能,从而提高系统的安全性和可用性.
负载均衡服务的功能及特征
负载均衡服务通常具有以下功能
- 流量分发
- 系统高可用
- 在线扩容/缩容
流量分发
这是负载均衡的核心功能,作为同一的流量入口,负载均衡服务会把流量分发到后端的多个结点上,从而实现集群的横向扩展.当需要扩容时,只需要在负载均衡服务后面加入新的结点即可,而不用改变入口,对于有状态的服务,还需要启用会话保持来保证流量分发到固定的结点上去.
系统高可用
通过加入后端多个结点,可以显著地提高服务的可用性.而且负载均衡服务一般都会集成健康检查功能,在后端结点出现异常时会把请求转发到健康的节点上去,从而实现异常的自动处理.
在线扩容/缩容
当负载均衡服务云计算结合之后,可以简单地实现资源的扩容/所容,并且可以做到在线服务的弹性伸缩.
以扩容为例,当需要扩容是,可以预先初始化号需要扩容的节点,然后通过负载均衡接入,实现在线业务的并行扩容.
如果通过服务方提供的 open API, 结合监控等其他信息,还可以实现自定义弹性伸缩策略,实现高峰期预先扩容,低峰缩容.
负载均衡服务的实现途径
负载均衡的实现途径一般分为两种
- 基于 DNS
- 基于 IP 报文
DNS
利用 DNS 实现负载均衡,就是在 DNS 服务器上配置多个 A 记录,在相应 DNS 查询时,使用一定的算法(比如轮询,随机)返回不同的 IP, 将客户端的访问引导到不同的机器上去,从而实现负载均衡.
大型网站常使用 DNS 作为第一级负载均衡,该方法的缺点是生效时间长,扩展性差.
IP 报文
早期比较有代表性并且被大量使用的是 LVS, 原理是 LVS 在 linux 内核态获取到 IP 报文后,根据特定的负载均衡算法将IP报文转发到整个集群的某台服务器中去.
负载均衡算法可以是哈希算法,输入为四元组(源 IP, 源 port, 目的 IP, 目的 port),输出为集群内部的服务器的 IP.