天问

Nginx负载均衡

Java编程——如何深入浅出Nginx负载均衡

 

一 特点

1.1 应使用情况

Nginx做为一个强大的Web服务器软件,具备高性能、高并发性和低内存占使用的特点。此外,其也能够提供强大的反向代理商功能。俄罗斯大约有超过20%的虚拟主机采使用Nginx作为反向代理商服务器,在国内也有腾讯、新浪、网易等多家网站在用Nginx作为反向代理商服务器。据Netcraft统计,世界上最繁忙的网站中有11.48%用Nginx作为其服务器或者者代理商服务器。基于反向代理商的功能,Nginx作为负载均衡主要有以下几点理由:

  1. 高并发连接
  2. 内存消耗少
  3. 配置文件非常简单
  4. 成本低廉
  5. 支持Rewrite重写规则
  6. 内置的健康检查功能
  7. 节省带宽
  8. 稳固性高

1.2 架构

Java编程——如何深入浅出Nginx负载均衡

 

上图为来自官方的一张总体架构图。

nginx在启动后,会以daemon的方式在后端运行,后端进程包含一个master进程和多个worker进程。工作进程以非特权使用户运行。

master进程主要使用来管理worker进程,包含:接收来自外界的信号,向各worker进程发送信号,监控worker进程的运行状态,当worker进程退出后(异常情况下),会自动重新启动新的worker进程。

worker进程则是解决基本的网络事件。多个worker进程之间是对等的,他们同等竞争来自用户端的请求,各进程互相之间是独立的。一个请求,只可能在一个worker进程中解决,一个worker进程,不可能解决其它进程的请求。

开发模型:epoll和kqueue。

支持的事件机制:kqueue、epoll、rt signals、/dev/poll 、event ports、select以及poll。

支持的kqueue特性包括EV_CLEAR、EV_DISABLE、NOTE_LOWAT、EV_EOF,可使用数据的数量,错误代码.

支持sendfile、sendfile64和sendfilev;文件AIO;DIRECTIO;支持Accept-filters和TCP_DEFER_ACCEP.

1.3 性能

Nginx的高并发,官方测试支持5万并发连接。实际生产环境能到2-3万并发连接数。10000个非活跃的HTTP keep-alive 连接仅占使用约2.5MB内存。三万并发连接下,10个Nginx进程,消耗内存150M。淘宝tengine团队说测试结果是“24G内存机器上,解决并发请求可达200万”。

二 动态负载均衡

2.1 自身监控

内置了对后台服务器的健康检查功能。假如Nginx proxy后台的某台服务器宕机了,会把返回错误的请求重新提交到另一个节点,不会影响前台访问。它没有独立的健康检查板块,而是用业务请求作为健康检查,这省去了独立健康检查线程,这是好处。坏处是,当业务复杂时,可能出现误判,例如后台响应超时,这可能是后台宕机,也可能是某个业务请求自身出现问题,跟后台无关。

2.2 可扩展性

Nginx属于典型的微内核设计,其内核非常简洁和优雅,同时具备非常高的可扩展性。如下图所示:

Java编程——如何深入浅出Nginx负载均衡

 

Nginx是纯C语言的实现,其可扩展性在于其板块化的设计。目前,Nginx已经有很多的第三方板块,大大扩展了自身的功能。nginx_lua_module可以将Lua语言嵌入到Nginx配置中,从而利使用Lua极大加强了Nginx本身的编程能力,甚至可以不使用配合其它脚本语言(如PHP或者Python等),只靠Nginx本身即可以实现复杂业务的解决。

2.3 配置修改

nginx的配置架构如下图所示:

Java编程——如何深入浅出Nginx负载均衡

 

Nginx支持热部署,几乎可以做到7*24不间断运行,即便运行数个月也不需要重新启动。能够在不间断服务的情况下,对软件版本进行进行更新。Nginx的配置文件非常简单,风格跟程序一样浅显易懂,能够支持perl语法。用nginx –s reload可以在运行时加载配置文件,便于运行时扩容/减容。重新加载配置时,master进程发送命令给当前正在运行的worker进程worker进程接到命令后会在解决完当前任务后退出。同时,master进程会启动新的worker进程来接管工作。

三 优势和劣势

3.1 优势

  1. 可以很好地进行http 的头解决
  2. 对http协议以及https的良好支持
  3. 有足够的第三方插件供用
  4. 支持热部署,更改后台是平滑的

3.2 劣势

  1. 缺少对session的支持
  2. 对四层tcp的支持不够好
  3. post请求写文件系统,造成500 error
  4. 缺乏主动的后台服务器健康监测
  5. 默认的监控界面统计信息不全

四 Tengine

Tengine是淘宝基于nginx开源代码二次开发一款服务器软件,在继承了nginx的特性以外,提供了少量nginx商业版才有的功能。基本上同步于nginx的升级,目前最新的版本已经继承了nginx 1.6.2稳固版5

4.1 特性

tengine的特性包括但不限于:

  1. 更友好的运维信息显示
  2. 动态板块加载机制
  3. 自动根据CPU数目设置进程个数和绑定CPU亲缘性
  4. 更方便的命令行参数,如列出编译的板块列表、支持的指令等
  5. 更增强大的负载均衡能力,包括一致性hash板块、会话保持板块,还可以对后台的服务器进行主动健康检查,根据服务器状态自动上线下线
  6. 动态脚本语言Lua支持。扩展功能非常高效简单
  7. 输入过滤器机制支持。通过用这种机制Web应使用防火墙的编写更为方5

4.2 负载均衡

负载均衡方面,Tengine主要有以下几个特点,基本上弥补了nginx在负载均衡方面的欠缺:

  1. 支持一致性Hash板块
  2. 会话保持板块
  3. 对后台服务器的主动健康检查
  4. 添加了请求体不缓存到磁盘的机制
博客地址:http://blog.yoqi.me/?p=13490
扫我捐助哦
喜欢 2

这篇文章还没有评论

发表评论