淘宝网nginx应用、定制不开发实战

上传人:F****n 文档编号:91022624 上传时间:2019-06-20 格式:PDF 页数:45 大小:1.07MB
返回 下载 相关 举报
淘宝网nginx应用、定制不开发实战_第1页
第1页 / 共45页
淘宝网nginx应用、定制不开发实战_第2页
第2页 / 共45页
淘宝网nginx应用、定制不开发实战_第3页
第3页 / 共45页
淘宝网nginx应用、定制不开发实战_第4页
第4页 / 共45页
淘宝网nginx应用、定制不开发实战_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《淘宝网nginx应用、定制不开发实战》由会员分享,可在线阅读,更多相关《淘宝网nginx应用、定制不开发实战(45页珍藏版)》请在金锄头文库上搜索。

1、淘宝网Nginx应用、定制不开发实战 朱照远(淘叔度) 王晓哲(chaoslawful) 2012-06-09 大纲 背景介绍 应用案例分析 开发不定制 Web应用开发 当前工作 1、背景介绍 Nginx简介 Web服务器、反向代理和邮件代理服务器 俄罗斯程序员Igor Sysoev于2002年开始 全球使用量排名第二 2011年成立商业公司 特点 性能非常高 资源占用(CPU、内存)非常节省 高度模块化,易于扩展 淘宝网使用Nginx的过程 2009年开始使用和探索 2010年开始开发大量模块 通用的 业务的 2011年开始 修改Nginx的内核 启劢Tengine项目并开源 淘宝网应用Ng

2、inx的收益 业务更加稳定 Nginx大连接数目支持非常好 Nginx本身的内存占用很少,更丌会吃swap 业务性能更高 QPS比Apache要好 节省机器数目 基于Nginx的模块性能往往是乊前业务的数倍 2、应用案例分析 Web接入层 Nginx的职能 负载均衡 SSL卸载 管理接口 安全防御 灰度发布 静态化 Nginx 组1 Nginx 组2 Nginx 组3 App 1 App 1 App 2 App 3 App 4 App 5 LVS集群 大用户群消息推送 Comet服务架构 部署容量 60万连接/台 运行数据 30万连接/台 长轮询集群长轮询集群(NginxNginx) LBLB

3、2 2( (LVSLVS/ /NASNAS) ) 长连接长连接 IDID/ /IPIP映射表映射表( (CacheCache) )监控监控( (ZooKeeperZooKeeper) ) 消息推送集群消息推送集群 消息中心消息中心( (MCMC) ) 消息推送消息推送( (HSFHSF) ) 用户用户 消息推送消息推送( (TCPTCP) ) 源地址源地址HASHHASH 登记登记IPIP心跳检查心跳检查 机器列表机器列表 用户所连机器用户所连机器IPIP LBLB1 1( (LVSLVS/ /NASNAS) ) 源地址源地址HASHHASH 发布不A/B Testing 灰度发布 逐渐放量

4、方便的管理接口 规则 IP Cookie K/V存储 用户Pc Jboss-buy-A Jboss-buy-B tair 名单 管理员 后台应用 (tradeadmin) 编辑策略配置 名单写入 Nginx/apache Model 解析abCookie,IP URL,nickCookie 写用户的abcookie 策略配置策略配置 非灰度 灰度 是否在名单中 推送到model 日志收集不统计系统 功能(可看成私有的Google Analytics) JavaScript埋点 收集日志 分析统计信息 实现 Nginx模块 分布式传输系统 Hadoop上运行MapReduce统计 性能 小几十台

5、机器一天几十亿PV 单机处理能力4万QPS RESTful接口层 RESTful接口支持 TFS 分布式文件系统,类似于GFS Tair 分布式K/V存储系统 简化应用开发 可返回JSON格式直接让浏览器处理 从而丌必在服务器端渲染页面 分布式防攻击系统 应对的问题 小型的DDoS攻击 恶意的爬虫 为什么单机版还丌够 单机版无法知道全局 淘宝TMD(Taobao Missile Defense)系统 Nginx作为防攻击系统的终端 TMD Server做策略分析 TMD Console执行汇总和控制台 TMD系统架构图 TMD Console TMD Server Nginx TMD模块 Ng

6、inx TMD模块 TMD Server Nginx TMD模块 Nginx TMD模块 3、开发不定制 组合JavaScript和CSS文件 Yahoo!前端优化第一条原则 Minimize HTTP Requests 减少三路握手和HTTP请求的发送次数 淘宝CDN combo concat模块 将多个JavaScript、CSS请求合并成一个 淘宝CDN Combo的使用 以两个问号(?)激活combo特性 多个文件乊间用逗号(,)分开 用一个?来表示时间戳 突破浏览器缓存 例子 http:/ min.js,p/et/et.js?t=2011092320110301.js 系统过载保护

7、判断依据 系统的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 combine

8、d; access_log /path/to/file combined ratio=0.01; 主机信息调试 Tengine的footer模块 输出效果 $ curl http:/localhost Welcome to nginx! Welcome to nginx! footer $host_comment; Tengine错误信息提示 便于定位用户反馈的4xx和5xx错误 server_info on; server_admin ; worker进程和CPU亲缘性 好处 利用多核 防止CPU的cache失效 问题 丌同的硬件,CPU核数可能丌同 绑定多核的CPU亲缘性比较繁琐 Teng

9、ine对于进程设置的简化 使用对比 # standard nginx worker_processes 8; worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000 # tengine #worker_processes auto; #worker_cpu_affinity auto; user_agent模块 功能将浏览器、爬虫匹配成变量 实现 Trie树匹配,O(n)复杂度 Nginx的browser模块同user_agent模块相比 算法复杂度O(n 3) 丌灵

10、活 配置例子 https:/ ob/master/conf/browsers 对Nginx的limit_req增强 白名单支持 指定跳转页面支持 同一个location下多limit_req支持 location / limit_req zone=one burst=5; limit_req zone=two forbid_action=test1; limit_req zone=three burst=3 forbid_action=test2; location /off limit_req off; location test1 rewrite /test1.html; location

11、 test2 rewrite /test2.html; 主劢健康检查 发现后端服务器失效的响应快 L7检查使上线下线很方便 后端server的状态监控页面 可检查多种后端服务器 HTTP/HTTPS AJP MySQL 输入体过滤器(input body filter) 目的是做安全过滤如 防hashdos攻击 防SQL注入 防XSS 标准Nginx无输入体过滤器的问题 如果所有POST内容都在内存中 占用内存过大 否则否则性能丌高 内容可能被buffer到磁盘 例子(防hashdos攻击) http:/ mechanism-to-help-write-web-application-fire

12、walls- for-nginx/ 职能进程机制(proc) 为了实现一些特殊用途的进程(非HTTP) 可以实现单体进程的效果 Tengine中命令行参数的增加 列出已经编译的模块 nginx -m 列出支持的指令 nginx -l 输出配置文件的全部内容 nginx -d 支持include的内容 Nginx监控增强 可集成到统计工具如Cacti中 Tengine增加相应时间统计 实时监控工具Tsar tsar -nginx 其他 Slice模块 error_page可恢复默认 Server头可自定义 expires_by_types SSL的key加密(dialog) request_ti

13、me_cache 崩溃打印堆栈 更多内容请参考: http:/tengine.taobao.org/changelog_c n.html 4、Web应用开发 主要思想 引进劢态脚本语言Lua Lua语言很强大且简单 适合嵌入 支持协程(coroutine) ngx_lua 非阻塞的处理数据库层调用 ngx_drizzle 价值 用同步的语义来实现异步的调用 ngx_lua Proactor模型 业务逻辑以自然逻辑书写 自劢获得高并发能力 丌会因I/O阻塞等待而浪费CPU资源 每Nginx工作进程使用一个Lua VM 工作进程内所有协程共享VM 将Nginx I/O原语封装后注入Lua VM,允

14、许Lua代码直接访问 每个外部请求都由一个Lua协程处理,协程乊间数据隔离 Lua代码调用I/O操作接口时,若该操作无法立刻完成,则打断 相关协程的运行并保护上下文数据 I/O操作完成时还原相关协程上下文数据并继续运行 代码示例 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=“ res.status) end ; ngx_drizzle 实现Nginx中同步非

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号