Apache Traffic Server 簡介
一 介紹
Apache Traffic Server(ATS或TS)是一個高性能的、模塊化的HTTP 代理和緩存服務器。Traffic Server 最初是 Inktomi 公司的商業產品,該公司在2003 年被 Yahoo 收購,之后 Traffic Server 一直在 Yahoo 內部使用長達 4 年,直到 2009 年 8 月 Yahoo 向 Apache 軟件基金會(ASF)貢獻了源代碼,并于 2010 年 4 月成為了 ASF 的頂級項目(Top-Level Project)。 Apache Traffic Server 現在是一個開源項目,開發語言為C++。
Traffic Server 的開發團隊曾經由 Chuck Neerdaels 領導,他也是Harvest 項目的早期創始人之一,Harvest 項目后來發展為十分流行的 Squid 項目;Leif Hedstrom 直接管理著現在的 Traffic Server 開發團隊。目前 Chuck Neerdaels 和 Leif Hedstrom都已加盟知名 CDN 服務提供商 Akamai。
HTTP 代理服務器是 HTTP 服務器的一種實現,處于客戶端(一般為瀏覽器)與另一個 HTTP 服務器之間(通常指源服務器,Origin Server)。HTTP 代理通常分為正向代理、反向代理和透明代理,我們主要關注的是反向代理(Reverse Proxy, 見下圖)反向代理服務器根據明確配置的映射規則來處理用戶請求。反向代理服務器通常會設置一個較大的緩存區,服務器處理請求的同時將請求的內容緩存在服務 器本地,當下次用戶請求同一個對象時,服務器可直接從緩存區里取出對象,而不用去源服務器去取,起到了加速的效果。另外,配置反向代理的映射規則也能實現 負載均衡的功能。除了 Traffic Server,常見的開源代理服務器還有 Squid,Varnish,Nginx,HAProxy。
- 超過 4 年的使用中,緩存中沒有出現已知的數據損壞(data corruption);
- 作為反向代理,服務器方便部署和管理,并且大部分配置的更改可直接在線上服務器完成,而不用重啟服務;
- 在高并發情況下擴展良好,支持 HTTP/1.1 協議特性,如 SSL、Keep-Alive;
- 在世界范圍內部署了超過 100 臺服務器;
- 在實際CDN中,每秒處理超過 350,000 次請求,達到 30 Gbps,最大容量至少十倍于普通使用,以應對高峰時的大量請求;
- 在實際 CDN 中,每臺服務器有 20,000 到 30,000 的 keep-alive 并發連接,其中有 1,000 到 2,000 的連接是一直很活躍的;
- 實驗環境中,單臺服務器每秒處理 105,000 次請求,請求的對象是被緩存住的小文件;
- 實驗環境中,請求大文件時,單臺服務器達到 3.6 Gbps(4x GigE NIC bonded)。
二 組件、機制
Traffic Server(TS) 的組成
1.Traffic Server緩存
- TS 緩存包含一個高速的對象數據庫,數據庫根據 URL 和相關頭部來索引對象,對于同一對象可以緩存不同版本(如不同的編碼、語言)。
- 當緩存空間滿后,TS 會移除過期的數據。
- 當磁盤出錯時,TS 將不再使用該塊磁盤,轉而使用剩下的磁盤。所有磁盤都出錯時,TS 將切換至 proxy-only 模式,即只代理,不緩存。
- 可分區,即可以給指定的協議和源服務器劃分一定數量的磁盤空間
2.RAM 緩存
3.主機數據庫
- 儲存 DNS 信息,方便主機名到 IP 地址的快速轉換
- 儲存每個主機的 HTTP 版本,方便高級協議特性的使用
- 儲存主機的可靠性和可用性信息
4.DNS 解析器
5.Traffic Server 進程
- traffic_server 進程負責接受連接,處理協議請求,然后從緩存或源服務器獲取對象并返回
- traffic_manager 進程是 TS 的命令和控制設施,負責啟動、監控和配置 traffic_server 進程,它也負責代理的端口配置、統計信息的接口、集群管理和虛擬 IP 的故障轉移。
- 如果 traffic_manager 檢測到 traffic_server 進程失效,它立即重啟 traffic_server 進程并且維護一個連接隊列,保存此時到來的請求,完全重啟后這個隊列里的連接將按順序被處理。
- traffic_cop 進程監視 traffic_server 和 traffic_manager 進程,此進程周期性的查詢 traffic_server 和 traffic_manager 進程的健康狀況,如果查詢在一定間隔時間內未返回或者返回信息不正確,traffic_cop 將重啟 traffic_manager 和 traffic_server 進程。
6.管理工具
- Traffic Line 是命令行程序,可以用來快速監視 Traffic Server 的性能和網絡流量,也能配置 TS。
- Traffic Shell 也是命令行工具,進入該 shell 后有自己一套語法,可代替 Traffic Line 完成監控、配置任務。
- 通過 Traffic Line 和 Traffic Shell
對配置作出的修改將會自動寫入配置文件中。
Traffic Server 的底層機制
Apache Traffic Server 不同于大部分開源代理服務器,它結合了兩種技術來處理高并發:
-
異步事件處理( Asynchronous event processing )
-
多線程( Multi-threading )
Traffic Server 在多 CPU、多核的硬件上擴展良好,能充分利用所有可用的 CPU 和其他資源。
HTTP 代理緩存相關機制
1. Traffic Server 處理請求的過程
2. Traffic Server 判斷 HTTP 對象是否新鮮(fresh)的過程
- 如果有 Expires 或者 max-age 頭部直接定義緩存的過期時間,TS將對比當前時間和過期時間去判斷對象是否新鮮
- 如果沒有上述頭部,TS 將檢查 Last-Modified 和 Date 頭部(其中Date是源服務器返回對象的時間,如果沒有 Last-Modified 頭部,TS 會用對象寫入緩存的時間以作代替),然后用以下公式算出新鮮的時間范圍(freshness_limit,可理解為保質期):
freshness_limit = ( Date - Last-Modified ) x 0.1
0.1 這個參數可以作調整,并且能限制 freshness_limit 的上下限,默認最小是 1 小時,最大是 1 天 - 如果沒有 Expires 頭部或者沒有 Last-Modified、Date 頭部,TS 將使用默認的 fressness limit
- 另外,TS 還會檢查 cache.config 配置文件中的 revalidate 規則,該規則可以對特定的 HTTP 對象設置特定的驗證時間(特定的域名、IP、一定規則的 URL、特定的客戶端等等)
3. 緩存過期(stale),Traffic Server 去源服務器重新驗證對象可能的情況
- 仍然 fresh,TS 重置 freshness_limit,并返回對象
- 對象新副本可用,TS 緩存新對象,并同時返回給用戶
- 源服務器上的對象不再存在,TS 也不再返回該副本給用戶
- 源服務器沒有響應,TS 返回過期的對象并發出警告。
更詳細的說明請查看 Traffic Server 管理文檔中的 HTTP Proxy Caching 部分
三 安裝、使用
(以 Apache Traffic Server 2.1.1 unstable 為例在 32-bit Linux 環境下進行安裝測試)
安裝
1. 下載、解壓
wget http://www.apache.org/dist/trafficserver/trafficserver-2.1.1-unstable.tar.bz2
wget http://www.apache.org/dist/trafficserver/trafficserver-2.1.1-unstable.tar.bz2.md5
md5sum -c trafficserver-2.1.1-unstable.tar.bz2.md5
tar jxvf trafficserver-2.1.1-unstable.tar.bz2
cd trafficserver-2.1.1-unstable
2. 編譯、安裝
./configure --help
./configure
make
make install
目錄結構
默認目錄 |
內容 |
/usr/local/var/log/trafficserver |
運行時創建的日志文件 |
/usr/local/var/trafficserver |
運行時的一系列文件 |
/usr/local/etc/trafficserver |
配置文件 |
/usr/local/bin |
可執行文件 |
/usr/local/libexec/trafficserver |
插件 |
初步配置
records.config 是 key-value 格式的配置文件,負責大部分全局的選項設置,即主配置文件。
storage.config 用于指定磁盤存儲。
remap.config
- records.config 中關鍵的配置
CONFIG proxy.config.exec_thread.autoconfig INT 1
CONFIG proxy.config.exec_thread.autoconfig.scale FLOAT 2.0
CONFIG proxy.config.exec_thread.limit INT 2
# CONFIG proxy.config.cluster.ethernet_interface STRING eth0 # 設置以太網接口
CONFIG proxy.config.http.server_port INT 8080
# 監聽端口,反向代理通常為80LOCAL proxy.local.incoming_ip_to_bind STRING 0.0.0.0 # 綁定的 IP,可省略,默認即為 0.0.0.0
CONFIG proxy.config.http.cache.http INT 1 # 打開緩存功能
CONFIG proxy.config.cache.ram_cache.size INT 512M
# RAM 緩存大小CONFIG proxy.config.reverse_proxy.enabled INT 1
# CONFIG proxy.config.url_remap.remap_required INT 1 # 1為只反向代理,0為正向+反向代理
CONFIG proxy.config.url_remap.pristine_host_hdr INT 0
CONFIG proxy.config.ssl.enabled INT 0 # 關閉SSL
CONFIG proxy.config.ssl.server.cert.filename STRING server.pem
CONFIG proxy.config.http.server_max_connections INT 2000
# 同源服務器的最大連接數CONFIG proxy.config.http.keep_alive_no_activity_timeout_out INT 60 # 當一個事務結束后同原服務器保持連接的時間
-
remap.config
配置
-
storage.config 配置
更詳細的配置可參考官方管理指南 http://trafficserver.apache.org/docs/v2/admin/
服務控制
-
運行 /usr/local/bin/trafficserver start
-
結束 /usr/local/bin/trafficserver stop
-
重啟 /usr/local/bin/trafficserver restart
命令行工具、監控
-
查看幫助 traffic_line -h
-
查看變量的值 traffic_line -r 變量名 (變量名見官方管理指南附錄 C ,含 TS 運行時統計數據)
-
給變量賦值 traffic_line -s 變量名 -v 值
(變量名見 records.config ) -
不重啟 TS 使 配置生效 traffic_line -x
-
查看幫助 man traffic_shell (由于 開發者疏忽,暫不能用 )
-
show 命令,如 %show:cache-stats 查看緩存統計,如命中情況,緩存大小;如 %show:proxy-stats 查看命中率
-
config 命令,如 %config:logging event disable 關閉日志;如 %config:cache clear ,清除緩存, config 命令作出的修改都會立即生效
-
traffic_logcat -h 獲得幫助
-
查看二進制日志 traffic_logcat 日志文件名
-
Traffic Server 系統自身的運行日志可在 /var/log/message 中查看( centos ),用于排錯
-
traffic_logstats 提供了基于日志的統計功能
四 結論
來自:http://blog.sina.com.cn/s/blog_502c8cc40100mw7n.html