Apache Traffic Server簡稱ATS或TS,是一個高性能的、模組化的HTTP代理和快取伺服器,與 Nginx 和 Squid 類似。
基本介紹
- 外文名:Apache Traffic Server
- 簡稱:ATS或TS
- 類別:HTTP代理和快取伺服器
- 類似於:Nginx 和 Squid
簡介,功能,組件、機制,總結,
簡介
Apache Traffic Server(ATS或TS)是一個高性能的、模組化的HTTP代理和快取伺服器,與 Nginx 和 Squid 類似。Traffic Server最初是 Inktomi 公司的商業產品,該公司在2003 年被 Yahoo 收購, 2009 年 8月 Yahoo 向 Apache 軟體基金會(ASF)貢獻了原始碼,並於 2010 年 4月成為了 ASF的頂級項目(Top-LevelProject)。 Apache TrafficServer 現在是一個開源項目,開發語言為C++。
Traffic Server的開發團隊曾經由Chuck Neerdaels領導,他也是Harvest 項目的早期創始人之一,Harvest項目後來發展為十分流行的Squid項目,LeifHedstrom 直接管理著現在的 Traffic Server 開發團隊。目前Chuck Neerdaels和Leif Hedstrom都已加盟知名CDN服務提供商Akamai。
功能
Apache軟體基金會發布的最新版本是Apache Traffic Server v3.0.0。Traffic Server的處理能力非常強大,它可以在對內容傳輸要求非常嚴格的真實部署環境中處理TB級的數據,V3.0.0就是以此為基礎進行構建的,同時增加了一些新特性與新功能、改進了效率與性能、提升了系統正常的運行時間,並且易於使用。
Apache Traffic Server是個快速、可伸縮、可擴展、兼容於HTTP/1.1快取代理的伺服器,它具有如下特色:
快取:改進回響時間的同時降低了伺服器負載與對頻寬的需求,這是通過快取並且重用經常請求的網頁、圖片和Web Service調用實現的。
代理:很容易添加持續連線、過濾器或異步內容請求,還可以通過添加代理層實現負載平衡。
速度:在現代的SMP硬體上具有很好的可伸縮性,每秒鐘可以處理數以萬計的請求。
可擴展性:API考慮到了自定義外掛程式,可以修改頭與內容,還可以實現新的協定處理器。
可靠性:能夠完美處理TB級別的數據,包括正向與反向代理。
Apache Traffic Server v.3.0.0基準測試的結果是每秒鐘可以處理200,000多個請求,相對於v2.0來說提升了277%。它可以用在各種大規模的產品部署環境中,Yahoo!使用Apache Traffic Server處理400TB的數據量,同時每天還使用它處理多達300億的數據對象,包括Yahoo!主頁、體育、郵件及財經站點。
Apache Traffic Server v3.0.0的開發者與貢獻者多達30人,其新特性與改進如下所示:
完全的64位支持
支持客戶端的IPv6
WCCP(Web快取通信協定)
支持集群
改進了主要的外掛程式API,簡化了API的使用並且增加了新特性
支持多種平台,包括OSX、Solaris與FreeBSD(當然了,一直都在支持Linux)
改進了RAM快取算法,改進了性能與記憶體使用
現在可以對每個事務進行配置(或是每個映射規則)
改進了統計與管理API
多個執行緒,還有一個專門的DNS執行緒
構建環境更加靈活
修復了眾多Bug,改善了穩定性與功能
Apache Traffic Server在性能上的改進主要有:
相比於v2.0,v3.0整體的吞吐量提升了2到3倍
回響延遲比v2.0 降低了5倍
基準:對於RAM快取外的小對象來說,高端伺服器每秒可以處理220,000個請求
基準:對於未被快取的小對象來說,同樣的伺服器每秒可以代理100,000個請求
以上所有基準都是在區域網路中測試的,同時使用了持續連線。
最新版本Apache Traffic Server v3.0.1發布。
該版本的改進:
從構建系統中移除了卸載目標
修復了高流量網站可能宕機的問題
修復了主機內置錯誤,看起來像是IE的錯誤
由於錯誤的維護導致回歸檢查失敗(再次)
使用CONNECT方法時出現嚴重逾時等
組件、機制
Traffic Server(TS) 的組成
1.Traffic Server快取
TS 快取包含一個高速的對象資料庫,資料庫根據 URL 和相關頭部來索引對象,對於同一對象可以快取不同版本(如不同的編碼、語言)。
當快取空間滿後,TS 會移除過期的數據。
當磁碟出錯時,TS 將不再使用該塊磁碟,轉而使用剩下的磁碟。所有磁碟都出錯時,TS 將切換至 proxy-only 模式,即只代理,不快取。
可分區,即可以給指定的協定和源伺服器劃分一定數量的磁碟空間
2.RAM 快取
記憶體快取區儲存比較熱門的對象,在流量的高峰期時能加快處理速度和降低磁碟負載。
3.主機資料庫
儲存 DNS 信息,方便主機名到 IP 地址的快速轉換
儲存每個主機的 HTTP 版本,方便高級協定特性的使用
儲存主機的可靠性和可用性信息
4.DNS 解析器
TS 原生實現了 DNS 解析器,不依賴較慢的傳統解析庫。同時也降低了 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 處理請求的過程
1)用戶請求一個 web 對象,TS 收到請求
2)TS 通過對象的地址,在對象資料庫(快取)中去定位該對象
a.如果對象在快取中,TS 會檢查對象是否新鮮(fresh)
如果新鮮,TS 從快取里返回該對象給用戶,此時稱為快取命中(cache hit)
如果不新鮮(stale),TS 會連線源伺服器去驗證對象是否仍然新鮮,即重新驗證(revalidation),如果仍然新鮮,TS 立即將快取中的副本返回給用戶
b.如果對象不在快取中(快取未命中,cache miss),或者快取的副本不再有效,TS 會去源伺服器獲取對象,然後同時做下面兩件事
將對象返回給用戶
將對象放到本地快取中
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 部分。