Nginx服务之Tengine服务
纸上得来终觉浅,绝知此事要躬行。
Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。
1. 特性介绍
- 继承Nginx-1.8.1的所有特性,兼容Nginx的配置;
- 动态模块加载(DSO)支持,即加入一个模块不再需要重新编译整个Tengine;
- 支持HTTP/2 协议,HTTP/2模块替代SPDY模块;
- 流式上传到HTTP后端服务器或FastCGI服务器,大量减少机器的I/O压力;
- 支持异步OpenSSL,可使用硬件如:QAT进行HTTPS的加速与卸载;
- 更加强大的负载均衡能力,包括一致性 hash 模块、会话保持模块,还可以对后端的服务器进行主动健康检查,根据服务器状态自动上线下线,以及动态解析 upstream 中出现的域名;
- 输入过滤器机制支持。通过使用这种机制 Web 应用防火墙的编写更为方便;
- 支持设置proxy、memcached、fastcgi、scgi、uwsgi在后端失败时的重试次数
- 动态脚本语言 Lua支持。扩展功能非常高效简单;
- 支持按指定关键字(域名,url等)收集 Tengine 运行状态;
- 组合多个 CSS、JavaScript 文件的访问请求变成一个请求;
- 自动去除空白字符和注释从而减小页面的体积
- 自动根据CPU数目设置进程个数和绑定CPU亲缘性;
- 监控系统的负载和资源占用从而对系统进行保护;
- 显示对运维人员更友好的出错信息,便于定位出错机器;
- 更强大的防攻击(访问速度限制)模块;
- 更方便的命令行参数,如列出编译的模块列表、支持的指令等;
- 可以根据访问文件类型设置过期时间;
- ……
2. 使用说明
3. 模块文档
- 主功能
- HTTP 核心模块
- 动态加载模块功能
- Dyups 模块
- SPDY 模块功能
- 独立进程模块功能
- backtrace 模块功能
- concat 模块功能
- trim filter 模块功能
- Upstream 域名解析模块功能
- headers 模块功能
- footer filter 模块功能
- limit_req 模块功能
- limit upstream tries 功能
- log 模块功能
- reqstat 模块功能
- lua 模块(v0.7.19)
- ssl 模块功能
- stub_status 模块功能
- TFS 模块功能
- sysguard 模块功能
- 一致性 hash 模块功能
- session_sticky 模块功能
- 健康检查模块功能
- 后端长连接超时功能
- 变量
- debug pool 模块
- slab stat 模块
- 异步 openssl 模块
4. 一致性 hash 算法
通常代理服务器只负责调度而不负责缓存,防止压力过大成为单点故障,缓存交给缓存服务器组处理。而代理服务器如何提高缓存命中率就是一个关键了。通常简单的做法就是对客户端请求的URL进行hash计算,其值除以缓存服务器的数量取模。这样就能保证同一个请求始终由同一个缓存服务器提供。
但是这个调度算法有个严重的缺陷,那就是其中任意缓存服务器挂了,就会导致几乎所有缓存全部失效了,添加任意缓存服务器类似。后来伯克利大学的一个教授,提供了一致性hash的解决方法。
该方法特点就是使用了哈希环,特点是除以数量级非常大(2^32),对客户端请求URL的hash值和缓存服务器名称的hash值都是用这个量级,让它们统统落到哈希环上,对应每个缓存服务器都能够均匀的分散客户端请求的缓存。之后添加或删除任意缓存服务器都会导致以少部分缓存失效。
同样,该算法会导致服务器缓存的偏斜,缓存分布不均匀。解决这个问题就需要引入虚拟节点,将缓存服务器映射为大量在哈希环上均匀分布的点,之后即使添加或删除任意缓存服务器都不会导致缓存偏斜了。