一、什么是负载均衡
负载均衡(Load Balancing)用于改进多个服务之间的负载分布。负载均衡的目标是优化资源利用率,最大化吞吐量,降低响应时间,避免单个服务出现过载。
二、 为什么试用负载均衡
随着网站的访问量增加,当原先的单机部署的网站已很难承受高请求量时,目前常用的做法已经不是去购买容量更高、性能更好,但同时价格也贵很多的服务设备,而是转向分布式部署。在进行了服务拆分、分布式部署时,需要解决业务单点问题和访问的统一入口问题。为了解决业务服务单点的可用性问题,通常采用资源冗余的思路,将业务服务部署到多个机器上;对于统一入口问题,采用负载均衡设备,实现流量的分发。
三、常用的负载均衡实现技术
3.1 从整个互联网系统的使用范围来看,使用负载均衡的范围通常有:DNS负载均衡、客户端负载均衡、服务端负载均衡。
DNS主要是使用Round-Robin算法来对网站提供的ip列表进行轮询,响应当前轮询到的ip地址给请求的客户端。另一种是更加高效的是DNS托管服务,这种方法会根据后端服务状态决定是否将请求流量导过去,同时根据后端服务到DNS解析服务器的响应包时间来决定流量转发给哪个后端,从而实现了地理位置敏感的DNS负载均衡。一般DNS负载均衡是作为大型网站的第一级负载均衡。
客户端负载均衡,是通过一些途径,将服务端的机器ip列表发送至客户端,客户端按照一定算法选择机器,若服务请求不通,则在剩下的ip列表中继续选择。
服务端负载均衡,是大家最常见的负载均衡应用,一般是在服务端监听一个统一的入口,然后对接收到的请求,按照调度算法转发到后端的服务器去处理。顺便说一下,反向代理一般是用于隔离服务的内部网络跟外部网络,在反向代理服务转发给后端服务时,若是后端有多个服务,则也达到了负载均衡的目的。
3.2 由于本人接触比较多的还是服务端负载均衡,因此我对服务端负载均衡再进一步总结一下。
服务端的负载均衡技术,按照OSI网络协议栈所在层次,大致可分为四层负载均衡和七层负载均衡技术。
四层负载均衡,主要是基于IP+端口进行流量转发,一般使用的有:硬件负载均衡F5(性能非常好,价格也不菲),LVS;七层负载均衡,主要是基于URL应用层信息进行流量转发,一般使用的有:Nginx, HAProxy。
七层负载均衡的Nginx和HAProxy对于中小型的网站系统一般足够了,可以根据URL进行一些分流策略,比如针对域名、目录结构,而且抗并发能力较强;另外通过结合KeepAlived组件消除单点问题。存在的问题是,Nginx不支持session粘滞,对后端服务的检测只支持根据端口,而HAProxy则支持。
四层负载均衡中的LVS是章文嵩博士发起的开源项目(致敬!),在Linux操作系统的核心层工作,将收到的网络数据进行处理然后转发,因而效率非常高。LVS基于IP负载均衡的技术,主要的三种机制为:VS/NAT,VS/TUN,VS/DR,这部分网上资料很多,不细说了。LVS+KeepAlived是实际中使用较多的负载均衡方式。
登录 | 立即注册