编辑: star薰衣草 | 2019-07-01 |
5、运维增强 多种日志方式 ?? 本地和远程syslog支持 ?? 管道支持 ?? 抽样支持 C?减少写日志的数量,避免磁盘写爆 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;
Server头的伪装 ?? 伪装 $ curl -I http://localhost HTTP/1.1
200 OK Server: Apache/2.2.21 Date: Sun,
04 Dec
2011 18:36:53 GMT Content-Type: text/html Content-Length:
205 Last-Modified: Tue,
01 Nov
2011 05:18:57 GMT Connection: keep-alive server_tag Apache/2.2.21;
Server头的隐藏 ?? 隐藏 server_tag off;
$ curl -I http://localhost HTTP/1.1
200 OK Date: Sun,
04 Dec
2011 18:41:16 GMT Content-Type: text/html Content-Length:
205 Last-Modified: Tue,
01 Nov
2011 05:18:57 GMT Connection: keep-alive 主机信息调试 ?? Tengine的footer模块 ?? 输出效果 $ curl http://localhost Welcome to nginx! Welcome to nginx! footer $host_comment;
Tengine错误信息提示 ?? 便于定位用户反馈的4xx和5xx错误 server_info on;
server_admin [email protected];
worker进程和CPU亲缘性 ?? 好处 C?利用多核 C?防止CPU的cache失效 ?? 问题 C?不同的硬件,CPU核数可能不同 C?绑定多核的CPU亲缘性比较繁琐 Tengine对于进程设置的简化 ?? 使用对比 # standard nginx worker_process 8;
worker_cpu_affinity
00000001 00000010
00000100 00001000
00010000 00100000
01000000 10000000 # tengine #worker_process auto;
#worker_cpu_affinity auto;
Nginx命令行参数的增加 ?? 列出已经编译的模块 C?nginx -m ?? 列出支持的指令 C?nginx -l ?? 输出配置文件的全部内容 C?nginx -d C?支持include的内容 Nginx监控增强 使用淘宝开源监控工具Tsar ?? tsar --nginx
6、动态脚本与数据库层 背景 ?? 淘宝量子统计业务快速发展 C?原架构无法满足业务需要 ?? 量子统计页面和数据特征 C?页面主体框架基本不变 C?查询复杂速度慢 C?结果集数据量大 C?重复查询少 思考 ?? 优点 C? 易于理解,开发上手快 ?? 缺点 C? 页面主体内容重复浪费 带宽 C? 单机并发服务能力极为 有限 C? 存在慢连接攻击风险 C? PHP代码处理大数据时 速度低下 方案 ?? 更改服务模型 ?? 静态资源CDN化?? 服务侧页面组装过程移至浏览器侧 演进 思考 ?? 优点 C? 避免带宽浪费 C? 减少服务端计算量 C? 提升并发服务能力,可 抵御慢连接攻击 ?? 缺点 C? 开发效率受限 C? PHP+FastCGI限制整 体吞吐量提升 方案 ?? 要在Nginx中高效访问MySQL数据库 C?ngx_drizzle诞生! ?? 要有适用Nginx I/O模型的高速脚本引擎 C?ngx_lua诞生! ngx_drizzle ?? 实现Nginx中同步非阻 塞方式访问MySQL ?? 具备长连接、进程级 可控大小连接池和负 载均衡功能 ?? 返回数据可通过 ngx_rds_json/csv等 模块转换为JSON/ CSV格式 ngx_drizzle示例 http { ... upstream dbgroup { drizzle_server host1:3306 dbname=test password=some_pass user=alice protocol=mysql;
drizzle_server host2:3306 dbname=test2 password=some_pass user=bob protocol=mysql;
} ... server { location /mysql { set $sql select * from cats ;
drizzle_query $sql;
drizzle_pass dbgroup;
rds_json on;
} } } Nginx C模块构建业务逻辑的问题 ?? 开发效率低 ?? 部署灵活性差 但是…… ?? 人人都喜欢脚本语言! ?? ngx_lua用Lua脚本构建业务逻辑! Why Lua? ?? 内存开销小 ?? 运行速度快 ?? VM可中断/重入 原理 ?? ngx_lua实现Proactor模型 C?业务逻辑以自然逻辑书写 C?自动获得高并发能力 C?不会因I/O阻塞等待而浪费CPU资源 原理 ?? 每Nginx工作进程使用?一个Lua VM,工作进 程内所有协程共享VM ?? 将Nginx I/O原语封装后注入Lua VM,允许 Lua代码直接访问 ?? 每个外部请求都由?一个Lua协程处理,协程之 间数据隔离 ?? Lua代码调用I/O操作接口时,若该操作无法 立刻完成,则打断相关协程的运行并保护上下 文数据 ?? I/O操作完成时还原相关协程上下文数据并继 续运行? resolver ip.to.dns.server;