Nginx特性简介

"四层负载和七层负载区别、性能对比、业界使用等"

Posted by wangyapu on May 10, 2016

Nginx特性简介

四层负载和七层负载区别

四层负载:基于IP+端口的负载均衡

通过虚拟IP+端口接收请求,然后再分配到真实的服务器。通过三层的VIP和四层的端口号来判断哪些流量需要做负载均衡,对需要处理的流量进行NAT处理,转发至后台服务器,并记录下这个TCP或者UDP的流量是由哪台服务器处理的,后续这个连接的所有流量都同样转发到同一台服务器处理。

七层负载:基于URL等应用层信息的负载均衡

通过虚拟的URL或主机名接收请求,然后再分配到真实的服务器。在四层负载的基础上,再考虑应用层的特征,比如七层的URL、浏览器的类型等决定是否转发流量,然后选择选择对应的服务器组进行处理。

Nginx与Apache对比

Nginx是一个非常优秀的Web服务器,它以资源消耗低(比Apache占用更少的内存及资源 )、并发能力强著称。Nginx擅长用于服务静态文件、做反向代理和负载均衡等。

Apache仍然是世界上用的最多的Web服务器,世界上很多著名的网站都是Apache的产物,它的优点在于支持跨平台的应用、模块丰富、超稳定。

具体优缺点对比

  • 核心区别:apache是同步多进程模型(同步阻塞),一个连接对应一个进程;nginx处理请求是异步非阻塞的,多个连接(万级别)可以对应一个进程。
  • Apache的rewirte功能比Nginx更强大。
  • 动态请求apache更擅长,nginx只适合静态和反向代理。
  • Nginx的配置比Apache简单的多。

Tengine

特性(摘自官网)

  • 继承Nginx-1.6.2的所有特性,兼容Nginx的配置;
  • 动态模块加载(DSO)支持。加入一个模块不再需要重新编译整个Tengine;
  • 支持SO_REUSEPORT选项,建连性能提升为官方nginx的三倍;
  • 同时支持HTTP v2协议和SPDY v3协议,可同时使用两种协议;
  • 流式上传到HTTP后端服务器或FastCGI服务器,大量减少机器的I/O压力;
  • 更加强大的负载均衡能力,包括一致性hash模块、会话保持模块,还可以对后端的服务器进行主动健康检查,根据服务器状态自动上线下线,以及动态解析upstream中出现的域名;
  • 输入过滤器机制支持。通过使用这种机制Web应用防火墙的编写更为方便;
  • 支持设置proxy、memcached、fastcgi、scgi、uwsgi在后端失败时的重试次数
  • 动态脚本语言Lua支持。扩展功能非常高效简单;
  • 支持管道(pipe)和syslog(本地和远端)形式的日志以及日志抽样;
  • 支持按指定关键字(域名,url等)收集Tengine运行状态;
  • 组合多个CSS、JavaScript文件的访问请求变成一个请求;
  • 自动去除空白字符和注释从而减小页面的体积
  • 自动根据CPU数目设置进程个数和绑定CPU亲缘性;
  • 监控系统的负载和资源占用从而对系统进行保护;
  • 显示对运维人员更友好的出错信息,便于定位出错机器;
  • 更强大的防攻击(访问速度限制)模块;
  • 更方便的命令行参数,如列出编译的模块列表、支持的指令等;
  • 可以根据访问文件类型设置过期时间;

说点具体的

  • nginx计时器经常用于管理读写、应用逻辑超时,nginx采用红黑树作为计时器的数据结构,常用的操作有添加超时、删除超时、查找最小超时值等。nginx采用二叉最小堆的变种四叉最小堆代替红黑树,提高获取最小超时值的效率。
  • worker进程与cpu的自动绑定。提高性能以及避免同步问题。
  • upstream的健康检查模块。
  • Lua嵌入nginx核心,借助Lua协程和nginx事件模型实现同步、非阻塞的IO操作。

OpenResty

OpenResty是一个基于Nginx与Lua的高性能Web平台,其内部集成了大量精良的Lua库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态Web应用、Web服务和动态网关。

OpenResty通过汇聚各种设计精良的Nginx模块(主要由OpenResty团队自主研发),从而将Nginx有效地变成一个强大的通用Web应用平台。这样,Web开发人员和系统工程师可以使用Lua脚本语言调动Nginx支持的各种C以及Lua模块,快速构造出足以胜任10K乃至1000K 以上单机并发连接的高性能Web应用系统。OpenResty的目标是让你的Web服务直接跑在Nginx 服务内部,充分利用Nginx的非阻塞I/O模型,不仅仅对HTTP客户端请求,甚至于对远程后端诸如MySQL、PostgreSQL、Memcached以及Redis等都进行一致的高性能响应。