背景:在分布式的环境下,由于单台服务能力有限,无法满足大并发量的业务,促使了负载均衡器的出现,目前市面上用的比较多的有LVS、Nginx、Haproxy,对比如下
类型 | 介绍 | 优点 | 缺点 |
---|---|---|---|
LVS | linux virtual Server,linux虚拟主机,在linux内核2.4之后都已支持lvs模块,无需单独安装即可使用lvs搭建负载集群 | 1、工作在4层,可负载大多数应用协议:http应用、mysql等等 2、对内存cpu消耗低,本身不消耗流量,抗负载能力高 3、对网络依赖高,可靠性高 | 1、不支持正则表达式 2、不支持动静分离 3、不支持域名重写与转发 |
Nginx | 在应用层协议的负载均衡器,1.9版本之前仅可代理http\https以及邮件协议的负载均衡,1.9版本之后引入stream模块,可代理四层tcp\udp端口 | 1、支持正则表达式,对大多数应用的uri进行正则匹配,支持域名重写以及转发 2、支持动静分离以及页面缓存 3、对网络依赖较小,安装配置简单 | 1、支持的应用协议较少,不支持session会话保持,只能通过ip_hash策略解决 2、后端服务健康检查不支持指定url方式,只能通过端口方式 3、配置较为复杂 |
Haproxy | 支持四层和七层的负载均衡,工作在虚拟主机,性能高于nginx,配置简单 | 1、支持指定特定的url对后端服务健康检查 2、负载均衡策略多,支持基于cookie的负载解决会话保持 | 1、不支持web缓存 2、不支持lua脚本集成 |
厂家 | 介绍 | 优点 | 缺点 |
原生nginx | 俄罗斯人伊戈尔塞索耶夫发明,一款单线程、高性能的HTTP和反向代理web代理服务器 | 自身小巧、高性能、安装简单 | 对一些常用模块支持欠缺,需要单独安装编译扩展模块 tengin nginx衍生版本 |
Tengin | 由阿里开发维护,提供了大量内置模块,用于服务高并发,适合自身业务的场景,同时支持了一些高级特性 | 1、支持输入过滤器入机制,实现web应用防火墙更为方便;支持动态脚本语言lua;支持组合多个css\js文件的访问请求变成一个请求;自动去除空白字符和注释等, 2、支持一些常用模块:正向代理,健康检查,通过cookie实现的会话保持负载均衡模块,限制访问模块等 | 因自身集成过多扩展功能与模块,在某些大并发场景中,性能略逊于原生nginx |
openresty | nginx衍生版本,有章亦春发明,将luaVM嵌入在nginx各个worker进程中,通过lua脚本语言小巧强大的web支持能力,将nginx变成一个强大的web应用平台 | 1、支持多个常用lua模块和类库,可以更快速方便的使用lua语言对nginx功能扩展,如更灵活的健康检查、请求限速等, 2、自身支持resty命令方便对lua代码的调试 | 相比tengin来说支持的高级特性略见一斑 |
1