天天看点

Tengine原理

Point 1:什么是Tengine?

Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。它的目的是打造一个高效、安全的Web平台。

Point 2:Nginx 特性

模块化设计,较好的扩展性

高可靠性:master/worker

支持热部署:不停机更新配置文件、更换日志文件、更新服务器版本

低内存消耗:10000个keep-alive连接模式下的非活动连接仅消耗2.5M内存

event-driven,aio,mmap

DOS机制在 2016-04-26 nginx-1.10.0 版本中才支持

Point 3: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亲缘性;

监控系统的负载和资源占用从而对系统进行保护;

显示对运维人员更友好的出错信息,便于定位出错机器;

更强大的防攻击(访问速度限制)模块;

更方便的命令行参数,如列出编译的模块列表、支持的指令等;

可以根据访问文件类型设置过期时间;

Point 4:Tengine和Appache的区别

1.nginx相对于apache的优点:

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

2.apache 相对于nginx 的优点:

rewrite ,比nginx 的rewrite 强大 
模块超多,基本想到的都可以找到 
少bug ,nginx 的bug 相对较多 
超稳定 
存在就是理由,一般来说,需要性能的web 服务,用nginx 。如果不需要性能只求稳定,那就apache 吧。后者的各种功能模块实现得比前者,例如ssl 的模块就比前者好,可配置项多。这里要注意一点,epoll(freebsd 上是 kqueue )网络IO 模型是nginx 处理性能高的根本理由,但并不是所有的情况下都是epoll 大获全胜的,如果本身提供静态服务的就只有寥寥几个文件,apache 的select 模型或许比epoll 更高性能。当然,这只是根据网络IO 模型的原理作的一个假设,真正的应用还是需要实测了再说的。
           

Point 5:Tengine的核心模块

Main端配置

约定:
大部分模块使用方式,tengine与nginx相同,nginx模块使用可以参照nginx的官方站点,tengine。
Syntax: 表示功能或者选项,其后面有语法
Default:    默认值
Context:    可出现的上下文
           

必备常用配置

user 指定用于运行worker进程的用户和组

Syntax: user user [group];
Default:    user nobody nobody;
Context:    main
           

pid 指定nginx进程的pid文件路径

syntax: pid file;
Default:
pid nginx.pid;
Context:    main
           

worker_rlimit_nofile number 单个worker进程所能够打开的最大文件数

Syntax: worker_rlimit_nofile number;
Default:    —
Context:    main


           

继续阅读