SlideShare a Scribd company logo
Tengine
打造高效、稳定、安全、易用的平台
姚伟斌(文景)
2013-07-13
大纲
• 背景介绍
• 应用案例分析
• 开发与定制
• 当前工作
1 、背景介绍
Nginx 简介
• Web 服务器、 HTTP 反向代理和邮件代理服务器
• 俄罗斯程序员 Igor Sysoev 于 2002 年开源
• TOP1000 网站使用率排名第一
• 2011 年成立商业公司
• 特点
– 性能非常高
– 资源占用( CPU 、内存)非常节省
– 内存池设计,非常稳定
– 高度模块化,易于扩展
使用 Nginx 的过程
• 2009 年开始使用和探索
• 2010 年开始开发大量模块
– 通用的
– 业务的
• 2011 年开始
– 修改 Nginx 的核心代码
– 启动 Tengine项目并开源
• 2012 年三淘 Apache 全部替换为 Tengine ,向集团推
广,阿里云、支付宝、 B2B 均大规模部署
• 2013 年, Tengine 向 CDN 和云服务推进。
应用 Nginx 的收益
• 业务更加稳定
– Nginx 大连接数目支持非常好
– Nginx 本身的内存占用很少,更不会吃 swap
• 业务性能更高
– QPS 比 Apache 要好,节省机器数目
– 基于 Nginx 的模块性能往往是之前业务的数倍
– 有效抵御 DDOS 攻击
• 可扩展性好
– 易开发,内部开发 100 余个业务模块
2 、应用案例分析
Web 接入层
• Tengine 的职能
– SSL 卸载
– 七层接入管理
– 安全防御
– 负载均衡
– 灰度发布
– 静态化
– 内容优化
Tengine 组 1 Tengine 组 2 Tengine 组 3
App1 App1 App2 App3 App4 App5
LVS 集群
统一接入静态化
• Tengine 1 • Tengine2
• Tengine
3
• A
p
p
• A
p
p
• LVS 集群
Cache2 Cache3
Cache1
App App App App
Cache
checker
• 在一定时间内不变的内容缓存
• 主动缓存失效机制
• 防热点
• 利用 SSD
日志打点、收集与统计系统
• 功能(可看成私有的 Google Analytics )
– JavaScript 埋点
– 收集日志
– 分析统计信息
• 实现
– Nginx 模块
– 分布式传输系统
– Hadoop 上运行 MapReduce 统计
• 性能
– 几十台机器一天几十亿 PV
– 单机处理能力 4 万 QPS
RESTful 接口层
• RESTful 接口支持
– TFS
• 分布式文件系统,类似于 GFS ,已经开源
– Tair
• 分布式 K/V 存储系统
• 简化应用开发
– 可返回 JSON 格式直接让浏览器处理
分布式防攻击系统
• 功能
– 抵挡应用层 DDoS 攻击、封禁 IP 、 Cookie 等
– QPS 限流
– HOT patch
– 防 XSS 攻击
TMD Console
TMD Server
Tengine
TMD 模块
Tengine
TMD 模块
TMD Server
Tengine
TMD 模块
Tengine
TMD 模块
CDN 系统的七层负载均衡
• Tengine 1 • Tengine2
• Tengine
3
• L2
cache1
• LVS 集群
L1 cache2 L1 cache3
L1 cache1
L2 cache2 L2 cache3
• 一致性 hash 的负载均衡,提高命中率
• 10 台机器, 40G -> 80G , QOS
• 安全, SSL
• 内容加速
3 、开发与定
制
动态加载模块
• Nginx 核心代码静态编译
• 功能模块动态编译
• 优点
– 核心模块稳定
– 模块去耦合,分离编译
– 修改某个模块,只需编译相应模块
动态加载编译使用
• 功能模块动态编译成 so 文件
– ./dso_tool --add-module=/path/to/lua-nginx-module
• 使用方法:
dso {
load ngx_http_lua_module.so;
load ngx_http_memcached_module.so;
}
ngx_lua 模块
• 引进动态脚本语言 Lua
– Lua 语言强大且简单
– 适合嵌入
– 支持协程( coroutine )
• 价值
– 用同步的语义来实现异步的调用
– 开发速度快
• 使用场景
– 性能要求较高
– 逻辑不是太复杂
– 需要将数据库、网络调用进行粘合
代码示例
location /http_client {
proxy_pass $arg_url;
}
location /web_iconv {
content_by_lua '
local from, to, url = ngx.var.arg_f,
ngx.var.arg_t, ngx.var.arg_u
local iconv = require "iconv"
local cd = iconv.new(to or "utf8", from or
"gbk")
local res =
ngx.location.capture("/http_client?url=" .. url)
if res.status == 200 then
local ostr, err = cd:iconv(res.body)
ngx.print(ostr)
else
ngx.say("error occured: rc=" ..
页面内容的优化
• 淘宝 CDN combo
– concat 模块
– 将多个 JavaScript 、 CSS 请求合并成一个
• Trim 模块
– 删除 HTML 页面中的空格和注释
– 压缩前减少 10 -20 % 的,压缩后 10%
• Ngx_pagespeed :
https://github.com/pagespeed/ngx_pagespeed
– 一键自动优化
– 多种 fitler 组合
负载均衡功能的增强
• 一致性 hash 模块
– 提供一致性 hash 的访问
– 降低服务器数量变化带来的 hash 抖动
– 适用于 cache 系统
• Session sticky 模块
– 提供应用层的 session 保持
– 适用于各种应用系统,服务器之间无需 session
同步
负载均衡功能的增强
• 动态 upstream 加载
– 提供 restful 的接口动态增减服务器
– 无需 reload
• 后端长连接的优化
– 长连接的超时
– 单个服务器的连接池
user_agent 模块
• 功能:将浏览器、爬虫匹配成变量
• 实现
– Trie 树匹配, O(n) 复杂度
– Nginx 的 browser 模块
• 算法复杂度 O(n ^ 3)
• 不灵活,没有版本匹配
• 应用
– 浏览器匹配
– 移动端识别
安全增强
• Limit_req 增强
– 白名单支持
– 指定跳转页面支持
– 同一个 location 下多 limit_req 支持
• Limit_tcp 模块
– 可以针对 IP 进行并发数和频率限制
– 支持黑白名单
– 适合 HTTPS 的应用
输入体过滤器( input body filter )
• 目的是做安全过滤如
– 防 hashdos 攻击
– 防 SQL 注入
– 防 XSS
• 标准 Nginx 无输入体过滤器机制的问题
– 如果所有 POST 内容都在内存中,占用内存过大
– 否则性能不高,内容可能被 buffer 到磁盘
• 例子(防 hashdos 攻击)
– http://blog.zhuzhaoyuan.com/2012/01/a-mechanis
m-to-help-write-web-application-firewalls-for-nginx/
上传内容不缓存机制
• 修改 Nginx 的核心转发功能:
– Nginx 只能全部接收完再转发,写磁盘
– Tengine 支持部分接收再转发,测试中可降低
90% 以上的上传服务器负载,也可以提高 QPS
系统过载保护
• 判断依据
– 系统的 loadavg
– 内存使用( swap 的比率)
– QPS
• sysgurad 模块
• 可定制保护页面
sysguard on;
sysguard_load load=4 action=/high_load.html;
sysguard_mem swapratio=10% action=/mem_high.html
多种日志方式
• 本地和远程 syslog 支持
• 管道支持
• 抽样支持
– 减少写日志的数量,避免磁盘写爆
access_log syslog:user:info:127.0.0.1:514 combined;
access_log pipe:/path/to/cronolog combined;
access_log /path/to/file combined ratio=0.01;
主动健康检查
• 主动心跳检查
• L7 检查使上线下线很方便
• 后端 server 的状态监控页面: HTML/JSON/CSV
格式
• 可检查多种后端服务器
– HTTP/HTTPS
– AJP
– Fastcgi
– …
Tengine 中命令行参数的增加
• 列出已经编译的模块
– nginx -m
• 列出支持的指令
– nginx -l
• 输出配置文件的全部内容
– nginx -d
– 支持 include 的内容
Nginx 监控增强
• 可集成到统计工具如 Cacti 中
• Tengine 增加响应时间统计
实时监控工具 Tsar
• tsar --nginx
4 、当前工作
即将发布的功能
• 上传文件不缓存机制
• 动态 upstream 更新
• Limit-tcp
• Trim 模块
• Timer 的优化
• Upstream 长连接池的优化
发展现状
• 准备发布 Tengine-1.5.0 稳定版本
• 开源到现在发布 15 个版本, 64 个功能, 40 个
bugfix ,开源贵在坚持。
• 同多个公司合作开发: CloudFlare 、搜狗、网易、去哪
儿
• 与 Google 合作开发 pagespeed 模块
• 开发过程透明化
– http://github.com/taobao/tengine
– github 上面通过 pull request 进行代码 review
• 国内大公司用户众多
与 Nginx 官方协同发展
• 与 Nginx 进行合作,翻译Nginx中文文档,
征求志愿者
• 为 Nginx 提供若干 bugfix
• 写一本 Nginx 的书籍: Nginx
开发从入门到精通
未来的发展方向
• 可运维性
– 适应大规模自动化部署的需要
• 负载均衡
– 后端服务器数量多
– 性能、稳定性要求
• 安全性
– 自动化的防攻击
– 分布式攻击行为分析和防御
• 页面优化
– 自动化的页面内容优化
参考资源
• 本演示稿中涉及的大部分技术已经开源:
– http://tengine.taobao.org
– https://github.com/taobao/tengine
Thank You!
• 联系方式: yaoweibin@gmail.com
• Weibo: http://weibo.com/yaoweibin
• Q & A

More Related Content

PDF
Hacking Nginx at Taobao
PPT
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
PDF
Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统
PDF
豆瓣网技术架构变迁
PDF
Nodejs & NAE
PPTX
Nosql三步曲
PDF
4 葉金榮-my sql優化 - 20151219
PDF
[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)
Hacking Nginx at Taobao
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统
豆瓣网技术架构变迁
Nodejs & NAE
Nosql三步曲
4 葉金榮-my sql優化 - 20151219
[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)

Similar to tengine(nginx with lua ) develop at 2013 (20)

PDF
大众点评网的技术变迁之路
PDF
课题三:Nginx基础知识
PDF
Redis在唯品会的应用实践.pdf
PDF
Bypat博客出品-服务器运维集群方法总结2
PPTX
Notes of jcip
PDF
易度云查看 - 产品介绍
PDF
美团技术团队 - KVM性能优化
PDF
服务器基准测试-叶金荣@CYOU-20121130
PDF
Kvmopt osforce
PPSX
浅谈 My sql 性能调优
PPSX
MySQL应用优化实践
PPT
构建基于Lamp的中型网站架构
PPTX
lua & ngx_lua 的介绍与应用
PDF
4.陈群-唯品会大规模Redis集群存储架构演进.pdf
PDF
Apache trafficserver
PPTX
Flash存储设备在淘宝的应用实践
PPTX
MySQL压力测试经验
PPT
使用Nginx轻松实现开源负载均衡
PDF
美团前端架构简介
PPTX
1, OCP - architecture intro
大众点评网的技术变迁之路
课题三:Nginx基础知识
Redis在唯品会的应用实践.pdf
Bypat博客出品-服务器运维集群方法总结2
Notes of jcip
易度云查看 - 产品介绍
美团技术团队 - KVM性能优化
服务器基准测试-叶金荣@CYOU-20121130
Kvmopt osforce
浅谈 My sql 性能调优
MySQL应用优化实践
构建基于Lamp的中型网站架构
lua & ngx_lua 的介绍与应用
4.陈群-唯品会大规模Redis集群存储架构演进.pdf
Apache trafficserver
Flash存储设备在淘宝的应用实践
MySQL压力测试经验
使用Nginx轻松实现开源负载均衡
美团前端架构简介
1, OCP - architecture intro
Ad

tengine(nginx with lua ) develop at 2013

Editor's Notes

  • #1: 高效和稳定是Nginx基因,Tengine是站在巨人的肩上 Tengine除了对limit_req模块有所增强,内部在也用TMD 加了很多易用的功能
  • #6: 内存使用量少,并发连接数,2k->20k
  • #9: Nginx要分组,不能同一个大组 负载均衡功能用一致性hash Cache checker通过分析数据库的binlog来实现
  • #10: 22台
  • #11: 在浏览器进行渲染 这个跟lua模块结合看起来不错
  • #18: 将回复的内容改变编码。
  • #19: Steve shouder的优化法则
  • #27: Nginx不支持syslog,是因为syslog调用是阻塞的
  • #28: 运维可以控制文件,在不丢失请求的情况下升级服务器。
  • #29: 可运维性好,向apache学习。
  • #30: 可运维性好
  • #33: 动态模块:运维方便很多 Timer优化,在并发连接数很多的时候,有较大效果 智能gzip,通过发送额外js进行测试,据统计有10%左右的请求,没有accept-encoding