Apache Traffic Server簡介

簡介


   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 進程負責接受連接,處理協議請求,然後從緩存或源服務器獲取對象並返回。

t   raffic_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 部分。


總結


   Apache Traffic Server 開源後功能在不斷被開發,性能得到很大提升,社區也在逐漸發展,但除了 Yahoo 之外還很少有其他實踐,很多功能(如集羣)的文檔有待完善。Traffic Server 豐富的插件開發是其一大亮點,模塊化的特點使其擁有很好的擴展性和靈活性,再加上它的高性能,相信 Apache Traffic Server 未來將在很多場景中替代傳統的代理和緩存服務器而成爲大家的首選。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章