- 1、本文档共41页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[互联网]Tengine淘宝开源Web服务器
Tengine打造高效、稳定、安全、易用的平台
姚伟斌(文景) 代讲
朱照远(叔度)
2012-10-20
大纲
背景介绍
应用案例分析
开发与定制
当前工作
1、背景介绍
Nginx简介
Web服务器、HTTP反向代理和邮件代理服务器
俄罗斯程序员Igor Sysoev于2002年开始
全球使用量排名第三
2011年成立商业公司
特点
性能非常高
资源占用(CPU、内存)非常节省
内存池设计,非常稳定
高度模块化,易于扩展
淘宝网使用Nginx的过程
2009年开始使用和探索
2010年开始开发大量模块
通用的
业务的
2011年开始
修改Nginx的核心代码
启动Tengine项目并开源
2012年Apache全部替换为Tengine
淘宝网应用Nginx的收益
业务更加稳定
Nginx大连接数目支持非常好
Nginx本身的内存占用很少,不会吃swap
业务性能更高
QPS比Apache要好
节省机器数目
基于Nginx的模块性能往往是之前业务的数倍
有效抵御DDOS攻击
2、应用案例分析
Web接入层
Nginx的职能
SSL卸载
七层接入管理
安全防御
负载均衡
灰度发布
静态资源
动态内容的静态化
Cache组2
Cache组3
Cache组1
App
App
App
App
Cache checker
把所有能cache的内容都cache住
主动删除cache
大用户群消息推送
Comet服务架构
部署容量
60万连接/台
运行数据
30万连接/台
日志收集与统计系统
功能(可看成私有的Google Analytics)
JavaScript埋点
收集日志
分析统计信息
实现
Nginx模块
分布式传输系统
Hadoop上运行MapReduce统计
性能
小几十台机器一天几十亿PV
单机处理能力4万QPS
RESTful接口层
RESTful接口支持(准备开源)
TFS
分布式文件系统,类似于GFS
Tair
分布式K/V存储系统
简化应用开发
可返回JSON格式直接让浏览器处理
从而不必在服务器端渲染页面
分布式防攻击系统
功能
抵挡中小型的DDoS攻击
可以封禁IP、Cookie
限流
提供验证码服务
淘宝TMD(Taobao Missile Defense)系统
Nginx作为防攻击系统的终端,实时发送日志给Server
TMD Server做策略分析
TMD Console执行汇总和控制台
TMD系统架构图
3、开发与定制
动态加载模块
Nginx核心代码静态编译
功能模块动态编译成so文件
./dso_tool --add-module=/path/to/lua-nginx-module
好处
核心模块跟功能模块去耦合,不必一起编译
对于包管理系统来说,不再需要N多包
修正某个模块,只需编译相应模块
动态加载模块使用
使用方法
dso {
load ngx_http_lua_module.so;
load ngx_http_memcached_module.so;
}
动态库比静态代码性能差?
Wangbin:
ngx_lua模块思想
引进动态脚本语言Lua
Lua语言强大且简单
适合嵌入
支持协程(coroutine)
价值
用同步的语义来实现异步的调用
ngx_lua原理
每个Nginx工作进程使用一个Lua VM,工作进程内所有协程共享VM
每个外部请求都由一个Lua协程处理,协程之间数据隔离
Lua代码调用I/O操作接口时,若该操作无法立刻完成,则打断相关协程的运行并保护上下文数据
I/O操作完成时还原相关协程上下文数据并继续运行
ngx_lua原理
代码示例
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.s
文档评论(0)