Nginx和Tengine

一、Nginx

1.Nginx简介

Nginx (“engine x”) 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。

第一个公开版本0.1.0发布于2004年10月4日。

其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。

官方测试nginx能够支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定。

Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。
2011年6月1日,nginx 1.0.4发布。
apache httpd

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,

其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,*使用nginx网站用户有:新浪、网易、腾讯等。

功能:

  • web服务器
  • web reverse proxy
  • smtp reverse proxy

2.为什么使用nginx不使用apache?

Nginx和apache的优缺点对比:

  • 1、nginx相对于apache的优点: 轻量级,同样起web 服务,比apache 占用更少的内存及资源 抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能 高度模块化的设计,编写模块相对简单 社区活跃,各种高性能模块出品迅速啊

  • 2.apache 相对于nginx 的优点:

    • rewrite ,比nginx 的rewrite 强大
    • 模块超多,基本想到的都可以找到
    • 少bug ,nginx 的bug 相对较多
  • 3、Nginx 配置简洁, Apache 复杂

  • 4、最核心的区别在于apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程
    Nginx和Tengine

  • apache是来了一个连接会有对应的一个进程。nginx的进程数量是和cpu的物理核心数相等的。
    对于apahce,来了1w个client连接,会有1w个进程。假设我有1个cpu物理核心(当然也可以实现多任务,进程的切换会浪费硬件资源),某一时间点处理1个人的事,夹杂着系统调度的浪费,有了损耗,就有了弊端。

  • nginx异步非阻塞的,也使用的单核,所以计算机只会有1个nginx进程。外部io毫秒,内存纳秒级别。也就是说外部是慢动作数据流进来。1个client3次握手建立连接了,从内往外看,你告诉我有连接了,但是请求头还在外面跑着呢。一个连接来了,文件描述符fd。client1来了问有数据吗?没有,过。client2来了问有数据吗?有,好我处理你。这些client是从网线进来的,网线就是慢io,内存的速度就是比你快。服务器快速切换,cpu大部分时间工作在当前进程,减少了进程损耗。

二、Tengine

官方对Tengine的描述是:Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。

Tengine 是nginx的加强版,封装版,淘宝开源!

  • 官网http://tengine.taobao.org/
  • 动态模块加载(DSO)支持。加入一个模块不再需要重新编译整个Tengine;
  • 支持SO_REUSEPORT选项,建连性能提升为官方nginx的三倍;
  • 支持SPDY v3协议,自动检测同一端口的SPDY请求和HTTP请求;
  • 流式上传到HTTP后端服务器或FastCGI服务器,大量减少机器的I/O压力;
  • 更加强大的负载均衡能力,包括一致性hash模块、会话保持模块,还可以对后端的服务器进行主动健康检查,根据服务器状态自动上线下线,以及动态解析upstream中出现的域名;
  • 输入过滤器机制支持。通过使用这种机制Web应用防火墙的编写更为方便;
  • 支持设置proxy、memcached、fastcgi、scgi、uwsgi在后端失败时的重试次数
  • 动态脚本语言Lua支持。扩展功能非常高效简单;
  • 支持管道(pipe)和syslog(本地和远端)形式的日志以及日志抽样;
  • 支持按指定关键字(域名,url等)收集Tengine运行状态;
  • 组合多个CSS、JavaScript文件的访问请求变成一个请求;
  • 自动去除空白字符和注释从而减小页面的体积
  • …….