ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Tengine 实战指南:5 分钟装好企业级 Web 服务器与反向代理,3 个场景调到位

Tengine 实战指南:5 分钟装好企业级 Web 服务器与反向代理,3 个场景调到位 Tengine 实战指南5 分钟装好企业级 Web 服务器与反向代理3 个场景调到位【免费下载链接】tengineA high-performance web server and reverse proxy, 100% compatible with nginx.项目地址: https://gitcode.com/gh_mirrors/tengi/tengine你一定遇到过这种场景改一次 upstream 服务器列表worker 进程就得 reload 一遍后端节点从几十个涨到两三千个负载均衡开始越来越慢。Tengine 就是为这类问题生的 Web 服务器和反向代理它出自淘宝与 nginx 完全兼容在 taobao.com、tmall.com 等全球 Top 100 网站长期跑在生产环境。你手里的 nginx.conf 可以直接拿来用它额外给的是免重启动态配置、HTTP/3 和更省 CPU 的加权轮询这一类东西。 先判断你的场景值不值得换 Tengine装之前先对照下表看它相对 nginx 基线多出来的能力有没有命中你的痛点能力一句话说明你会在哪种场景下受益零停机动态配置server、location、upstream 运行时原地更新worker 不重启路由频繁变更、跑 K8s Ingress 的集群VNSWRR 加权轮询O(1) 时间、O(n) 内存的选点算法后端节点多越多差距越明显HTTP/3QUIC v1 / draft-29xquic 模块实现连接管理与多路复用弱网、移动端、易丢包链路过载保护与输入过滤系统负载、内存过高时自动保护输入 body 过滤可做 WAF高并发入口、有安全审计要求其他扩展CONNECT 正向代理、Stream 里按 SNI 分流、NTLS/TLCP 国密双证书、zstd 压缩、Lua 脚本正向代理或国密合规场景如果你的集群有几百到几千个后端、配置变更频繁或者有弱网下的 HTTP/3 诉求换 Tengine 收益明显如果只是几台节点的小反代加静态站标准 nginx 构建就够了没必要折腾。⏱️ 5 分钟装好 Tengine源码编译拿到默认页环境不挑Linux、FreeBSD、Solaris 等 Unix-like 系统都能跑想开 reuse_port 的话用 Linux 3.9 以上的内核。默认安装路径是 /usr/local/tengine不改默认值的话直接执行下面 5 条命令git clone https://gitcode.com/gh_mirrors/tengi/tengine cd tengine ./configure make sudo make install装完先验证链路跑/usr/local/tengine/sbin/tengine -v看版本和已编译的模块-V能列出全部编译选项再启动进程访问http://localhost/能看到默认欢迎页就说明整条链路通了。主配置在安装目录的conf/tengine.conf想自己写一份最小配置7 行就够http { server { listen 80; root html; index index.html; } }用上面内容替换后跑tengine -t校验启动或 reload就是一个最简可用的入口。 不重启 worker 热更路由和 upstreamnginx 的老问题是改配置必须 reload大集群里这要么造成流量抖动要么让变更排队等窗口。Tengine 的 ingress 模块树内模块 ngx_ingress_module配套 tengine-ingress 这个 Kubernetes Ingress 控制器把 server、location、upstream 的更新做成了运行时原地生效worker 进程不重启配置即时可用超时、SSL 跳转、按 header / cookie / query 参数分流、按状态码切备 upstream 这些事也能动态改。对每天要改网关配置的团队来说等于把“变更窗口”这个概念删掉了。指令入口是ingress_gateway、ingress_gateway_update_interval这几个更新间隔、哈希桶数等参数都可以调具体默认值建议对着模块源码和文档核对一遍。 2000 后端节点时切到 VNSWRR先说结论后端节点越多切 VNSWRR 的收益越大。传统 SWRR 的选点开销随节点数增长团队用 wrk 压测500 并发、keepalive观察到后端每多 500 个节点SWRR 的 QPS 掉约 10%、RT 涨约 1msVNSWRR 同样区间里两个指标基本不动2000 端点场景下 VNSWRR 的 QPS 比 SWRR 高约 60%。改动只有 upstream 块里加一行upstream backend { vnswrr max_init3; 127.0.0.1 port81 weight101; 127.0.0.1 port82 weight102; 127.0.0.1 port83 backup; }max_init限制单次初始化的虚拟节点数超大集群里配上它能明显压缩单请求的初始化开销不配则按 peer 数量自适应。 顺手加 Lua 扩展和 HTTP/3想在 rewrite / access / content 阶段写点动态路由、参数改写、A/B 逻辑又不想下沉到 C 层就编译时带上 Lua 模块modules/ngx_http_lua_module直接在 location 里写脚本执行效率远高于 CGI 那套方案。HTTP/3 走 xquic 模块modules/ngx_http_xquic_module/支持 QUIC v1 和 draft-29自带连接管理与多路复用弱网下延迟更低、扛丢包能力更好——这是少数能直接体现在终端用户体感上的功能。 用火焰图验证你的算法选对了别只听我说上线后拿数据说话。同样 2000 端点的压测下SWRR 选点函数ngx_http_upstream_get_peer吃掉约 39% 的 CPUVNSWRRngx_http_upstream_get_vnswrr只有 0.27%差了一个数量级可以照抄的步骤先固定压测参数并发数、keepalive、节点数对 Tengine 进程跑 perf 出火焰图看 upstream 选点函数的栈厚度再把 QPS、RT 按后端节点数画曲线。曲线随节点数明显下坠说明该换选点算法或排查选点路径了。 适用边界和资源清单一句话边界后端上千、配置高频变更、弱网 HTTP/3 或有国密合规要求Tengine 的价值立刻显现站点小、upstream 列表稳定标准 nginx 构建就够用不用为用不到的模块增加编译负担。常用路径相对仓库根目录核心机制文档docs/core.md模块文档含中文版docs/modules/动态配置Ingressmodules/ngx_ingress_module/VNSWRR 负载均衡modules/ngx_http_upstream_vnswrr_module/上游主动健康检查modules/ngx_http_upstream_check_module/请求统计modules/ngx_http_reqstat_module/【免费下载链接】tengineA high-performance web server and reverse proxy, 100% compatible with nginx.项目地址: https://gitcode.com/gh_mirrors/tengi/tengine创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进