曾经有过帮同事抢购春运车票的经历,所以也一度为了12306春运的卡顿而上火,但冷静想想,平时门可罗雀,要应对突然间的车水马龙,确实有点难办。比起12306,NOI官网车水马龙的时间估计都不能按天算,也就是出成绩的那几个小时。焦急想知道成绩的亲们一拥而入,于是网站就躺平了。
干等无事,瞟到这个错误提示,nginx略懂,这个Tengine 又是个啥?
Tengine
Tengine 是由中国淘宝网发起并开源的一款高性能、高稳定性的 Web 服务器 和 反向代理 软件。它是基于全球最流行的 Web 服务器 Nginx 开发的,可以理解为是 Nginx 的一个功能更丰富、特别针对大规模网站场景优化的“增强版”或“发行版”。
Tengine 的诞生背景与核心目标
淘宝网作为中国顶级的电商网站,面临着巨大的流量和复杂的业务场景。虽然 Nginx 本身非常优秀,但在应对淘宝这种超大规模网站的特定需求时,原版 Nginx 存在一些局限性。因此,淘宝的核心工程师团队决定在 Nginx 的基础上进行二次开发,Tengine 应运而生。它的核心目标是:
满足高并发、大流量的需求。
增强服务器的稳定性和易用性。
加入一些原版 Nginx 没有的、但对大型网站至关重要的高级功能。
Tengine 与 Nginx 的关系
完全兼容:Tengine 100% 兼容 Nginx 的配置语法和模块。这意味着所有在 Nginx 上能运行的配置文件和第三方模块,都可以在 Tengine 上无缝运行。
功能超集:Tengine 包含了 Nginx 的所有功能,并在此基础上增加了大量的增强功能和独创特性。你可以把它看作“Nginx Plus”的一个强大的开源替代品。
开源项目:和 Nginx 一样,Tengine 也是一个开源项目,目前在阿里巴巴的 GitHub 主页上维护。
Tengine 的主要特性与增强功能(相比原版 Nginx 的亮点)
以下是 Tengine 一些非常著名和实用的功能:
动态模块加载(DSO)
Nginx:要添加或移除模块,必须重新编译整个 Nginx 可执行文件。
Tengine:支持像 Apache 一样,在运行时动态加载模块(.so 文件),无需重新启动主服务,大大提高了维护的灵活性。
强大的并发连接数统计模块 (ngx_http_reqstat_module)
可以实时统计和监控诸如 QPS(每秒请求数)、响应时间、上游服务器状态、特定 URL 的访问量等关键指标,对于监控和故障排查极其有用。
动态 SSL 证书加载
无需重启服务,即可更新 SSL 证书,这对于拥有大量域名的网站(如 CDN 服务商)至关重要,可以保证服务不中断。
日志切割与回滚
Tengine 可以自动在凌晨切割日志文件,并允许你配置保留多少天的日志,无需依赖外部的 logrotate 工具。
组合式配置 (includes)
支持在配置文件中使用类似 C 语言的 #include
指令,将多个配置文件组合在一起,使配置管理更加清晰。
增强的负载均衡算法
除了 Nginx 原有的轮询、IP哈希等算法外,还增加了如一致性哈希等算法,可以在上游服务器(如 Memcached、Redis 集群)增减节点时,最小化缓存失效的影响。
请求合并 (ngx_http_concat_module)
类似于阿里云 CDN 的“合并回源”功能。对于大量小文件(如图标、CSS 精灵图),前端可以将多个文件的请求合并为一个,由 Tengine 在服务器端拆分并分别获取,最后一次性返回给浏览器,显著减少 HTTP 请求数量。
例如:http://example.com/??a.css,b.css
系统信息监控 (ngx_http_sysguard_module)
当服务器的负载或内存使用超过预设的阈值时,Tengine 可以自动返回一个自定义的错误页面(如 503),而不是继续处理请求导致服务器崩溃,起到了“熔断”保护的作用。
对 ARM 架构的更好支持
针对国产化芯片(如鲲鹏)等 ARM 服务器架构进行了优化和支持。