狠狠撸

狠狠撸Share a Scribd company logo
狈驳颈苍虫深度开发与客制化
——來?自阿?里巴巴的經驗
阿?里巴巴集團-核?心系統部
朱照遠(叔度)
2013-08-04
提綱
? 背景介紹
? 應?用案例
? 開發與客制化
? 進?行中的?工作
? 開源總結
1. 背景介紹
关於阿?里巴巴集团
?面對的技術挑戰
? 2012年淘寶、天貓的交易額為11600億元?人民幣
? 超過Amazon與eBay之和
? 四家網站的網路流量在全球排名前100(Alexa統計)
? taobao.com(#10) tmall.com(#42)
? alibaba.com(#72) alipay.com(#77)
? 2012年雙11?大促活動的?一些數據
? 雙11購物當天總銷售額191億?人民幣
? 第?一分鐘超過1000萬?人湧?入,1分鐘成交19.2萬筆交易
? 全天有2.13億獨?立訪客,佔中國?大陸網民總數40%
? CDN最?高峰值流量到達2100Gbps
使?用Nginx的過程
? 2009年開始使?用和探索
? 2010年開始開發?大量模組以滿?足業務
? 2011年開始修改Nginx的核?心
? 2011年12月將修改過的Nginx項??目開源
? 項??目名稱為Tengine
產?生的收益
? Nginx使得業務更加穩定
? 對?大連接數??目?支援?非常好
? 佔?用記憶體?非常節省,更不會?用swap
? Nginx使得應?用的性能更?高
? QPS?比Apache?高
? 節省伺服器數??目
? 基於Nginx的模組性能往往是之前業務的數倍
2. 應?用案例
Web接?入層
? 負載均衡
? SSL卸載
? 管理界?面
? 安全防禦
? 灰度發佈
? 靜態化與cache
?用?戶群消息服務
? 提供comet服務
? 60萬連接每臺伺服器
灰度發佈與A/B Testing
? 灰度發佈
? 逐漸放量測試
? ?方便的管理界?面
? 規則
? IP地址
? cookie值
? K/V存儲
?日誌收集與統計系統
? 阿?里的類似於Google Analytics系統
? JavaScript植?入
? 收集?日誌
? 分析統計資訊
? 內部實做
? Nginx模組
? 分佈式傳輸系統
? 在Hadoop上運?行MapReduce統計
? 性能
? 幾?十臺伺服器每天處理數百億query
? 單機處理能?力4萬QPS(短連接)
RESTful界?面層
? RESTful界?面?支援
? TFS(阿?里分佈式檔案系統,類似GFS)
? Tair(可以看作?一個分佈式的memcached
+ Redis)
? 簡化應?用開發
? 可返回JSON格式直接讓瀏覽器處理
? 從?而不必在伺服器做組裝
分佈式防攻擊系統
? 應對的問題
? HTTP層?面的DDoS攻擊
? 惡意的爬蟲
? 解決單機防護不知道全局資訊的問題
? TMD(Taobao Missle Defense)系統
? Nginx作為防攻擊系統的客?戶端
? TMD Server做策略分析
? TMD Console執?行彙總和控制檯
罢惭顿系统架构图
? consistent_hash模組
? 同?一對象到同?一台cache服務器
? 不會cache抖動
CDN系統
Tengine
Swift
Tengine
Swift
3. 開發與客制化
動態模組加載
? DSO (Dynamic Shared Object) ?支援
? 避免每次新加模組都要重新編譯binary
? 配置例?子
./con?gure --with-http_sub_module=shared
./dso_tool --add-module=/home/dso/lua-nginx-module
dso {
load ngx_http_lua_module.so;
load ngx_http_memcached_module.so;
}
流式上傳
? Nginx的問題
? 寫硬碟與記憶體佔?用之間的權衡,避免IO
? client_body_buffer_size的限制
? Tengine的實做
? proxy_request_buffering
? client_body_buffers
? client_body_postpone_size
組合JavaScript和CSS
? 根據Yahoo!前端優化第?一條原則
? Minimize HTTP Requests
? 減少三?方握?手和HTTP請求的發送次數
? 阿?里CDN combo
? concat模組,組合JavaScript和CSS
CDN combo的使?用
? 以兩個問號(??)激活combo特性
? 多個檔案之間?用逗號(,)分開
? ?用?一個?來表?示timestamp
? ?用來突破瀏覽器cache
? 例?子
? http://example.com??1.js,2.js,3.js?t=20130805
為?頁?面瘦?身
? trim模組
? 刪除HTML和內嵌JavaScript、CSS的註
釋和空?白符號
location / {
trim on;
trim_jscss on;
}
系統過載保護
? 監控系統條??目
? 伺服器的load
? 記憶體的使?用(如swap的?比例)
? sysguard模組
? 可客制化保護返回的?頁?面
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/?le combined ratio=0.01;
伺服器資訊調試
? footer模組
? 例?子(在?頁?面最後添加)
<!-- joshua Fri, 03 Aug 2013 08:24:43 GMT -->
footer $host_comment;
對於?行程設置的簡化
? 可以通過auto選項來?自動設置?行程數??目
和CPU親和性
worker_processes 8;
worker_cpu_af?nity 00000001 00000010 00000100
00001000 00010000 00100000 01000000 10000000;
worker_processes auto;
worker_cpu_af?nity auto;
user_agent模組
? 將瀏覽器、爬蟲輸出成變量
? 具體實做
? 使?用trie樹,O(n)的複雜度
? 對?比Nginx的browser模組是O(n^3)
增強了limit_req模組
? 多變量?支援
? ?白名單?支援
? 指定跳轉?頁?面?支援
? 同location下多limit_req?支援
? ?支援off選項
location / {
limit_req zone=one burst=5;
limit_req zone=two forbid_action=@test1;
limit_req zone=three burst=3 forbid_action=@test2;
}
主動健康檢查
? 發現後端伺服器失效的響應快
? L7的檢查使上線下線很?方便
? 後端伺服器的狀態監控?頁?面
? 可以檢查多種後端伺服器
? TCP/HTTP/HTTPS/AJP/MySQL/FastCGI
輸?入體過濾器
? 流式地做安全過濾
? 標準Nginx的問題
? POST體與記憶體之間的關係
? 性能與硬碟
? 已應?用場景
? 防hashdos/SQL注?入/XSS
動態腳本?支援
? Lua語?言的?支援
? ?支持各種phase
? ?支持header、body ?lter
? 性能和彈性的完美結合
? LuaJIT,和Java、C?一個量級
? ?方便修改,不需編譯
? 不必開發C的模組
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.say("error occured: rc=" .. res.status)
end
';
}
會話保持
? session_sticky模組
? 通過cookie實現客?戶端與伺服器做負載
均衡,後續訪問同?一台伺服器
upstream foo {
server 192.168.0.1;
server 192.168.0.2;
session_sticky;
}
server {
location / {
proxy_pass http://foo;
}
}
?一致性hash
? consistent_hash模組
? 防?止抖動
? 可以根据变量来丑补蝉丑
命令?行參數的完善
? 列出已經編譯的模組
? -m選項
? 列出已?支援的指令
? -l選項
? 列出配置檔案的全部內容
? -d選項
监控增强
4. 進?行中的?工作
計時器的優化
? 數據結構對?比
? rbtree
? minheap
? timer wheel
SO_REUSEPORT?支援
? epoll的驚群問題(Thundering Hurd)
? Google的patch
? 性能提升
後端keep_alive優化
? 超時時間限制
? 針對後端伺服器的pool
對10GE網路的良好?支援
? 10GE網卡跑滿做Load Balancer
? 颁笔鲍要求还有?足够的空閒
5. 開源總結
開源社區
? 發佈15個版本
? 核?心開發者7?人
? 贡献者25?人
?非阿?里的外部?用?戶
? Internet Archive
? 騰訊
? ?土?豆
? 京東
? 酷六
? PPLive
? 鳳凰網
? 開源中國
? ...
參考資源
? 前?面講過的內容絕?大部分已經開源!
? Tengine的主?頁
? http://tengine.taobao.org
? Tengine的GitHub
? https://github.com/alibaba/tengine
? 歡迎參與Tengine開源項??目!
阿?里開源情況
? 中國?大陸開源?力度投?入最?大的企業!
? https://github.com/alibaba
? 60個開源項??目左右
? Linux kernel
? Hadoop
? LVS
? TFS/Tair
? ...
Q&A
? Thank you!

More Related Content

狈驳颈苍虫深度开发与客制化