天天看點

aFleX自定義腳本技術介紹

自定義腳本技術介紹

     在應用傳遞産品的使用過程中,客戶實際應用的需求往往各不相同,如果有相同需求的客戶較多或者提出個性化需求的使用者是大型客戶,各廠商會盡量在後續的版本中開發相應特性。如果客戶需求本身是比較少見的需求,廠家通常不會專門為個别使用者開發相關特性。如何讓應用傳遞裝置提供的特性滿足各種使用者千變萬化的需求,而廠商又不需要投入太多精力為每一個客戶定制個性化軟體?自定義腳本技術基本解決了這個問題,并已經成為應用傳遞産品能否被普遍接受和長久發展的一個關鍵因素。

     目前市場上現有的應用傳遞産品中,支援自定義腳本功能的廠商有A10和F5。A10的aFleX和F5的iRule均采用行業标準Tcl(Tool Command Language)程式設計語言,而且大部分指令是通用的。如下圖所示,通過使用自定義腳本,應用傳遞裝置可以按照使用者需求進行深度精細的資料包分析并将連接配接配置設定到相應的伺服器或采取其它相應的動作(過濾、丢棄、重定向等)。本文的自定義腳本介紹以A10公司的aFleX為例。

aFleX自定義腳本技術介紹

aFleX自定義腳本的組成三元素

事件(Event)

aFleX是事件驅動的,特定事件觸發相應腳本。常見的事件根據協定分為GLOBAL、HTTP、IP、TCP、UDP、SSL等幾大類。具體事件如HTTP大類中的HTTP_REQUEST表示完整解析HTTP請求的頭資料時觸發的事件,TCP大類中的CLIENT_ACCEPTED表示TCP連接配接建立時觸發的事件。

操作符(Operators)

操作符用來比較表達式中兩個操作數,是标準的TCL語言操作,包括關系操作符(如contains、equals)和邏輯操作符(and、or、not)。

指令(Commands)

指令是應用傳遞裝置根據相應條件進行相應的操作,應用傳遞裝置廠家會根據功能需求不斷增加新的指令。指令分為以下幾類:

-     查詢指令(Query)

搜尋資料標頭或資料内容傳回相應資訊,如IP::remote_addr 傳回遠端IP位址。

-     動作/修改指令(Action/Modification)

修改資料標頭或資料内容,如HTTP::header remove <name> 删除HTTP頭中的相應字段。

-     陳述指令(Statement)

定義資料流量目的伺服器組、伺服器或URL。如pool <name> 定向流量到相應伺服器組。

-     功能指令(Function)

進行深度包檢查,以便應用傳遞裝置根據搜尋結果選擇相應伺服器。如findstr在一個字元串中搜尋指定字元串并傳回一定偏移位置的字元串。

執行個體1:将特定客戶請求轉發到指定的伺服器組

When CLIENT_ACCEPTED {

       if { [IP::addr [IP::client_addr] equals 10.10.10.10] } {

              pool sg2

       }

}   

執行個體2:當HTTP響應中包含‘404 not found’時重定向到其他伺服器

when HTTP_RESPONSE{

       if { [HTTP::status] ends_with "404"} {

              [HTTP::redirect "http://server2nd/index.html"]

          }

          }

執行個體3:将HTTP響應中的相應HTTP字段删除

when HTTP_RESPONSE {

 HTTP::header remove "Via"

}

1. 直接通過AX裝置進行aFleX 腳本編輯

a.指令行方式

先在個人電腦上通過任意的文本編輯工具完成aFleX腳本并儲存為檔案

在AX裝置使用 “import aflex”指令導入上一步編寫好的aFleX 檔案.

在AX裝置通過指令行查驗aFleX 腳本: "aflex check <name>".

b.WebUI方式

通過 AX的web管理界面, 使用者可以直接進行 aFleX腳本編輯和儲存, "Config > Service > aFleX".

c.使用A10提供的 aFleX 編輯器軟體

aFleX 編輯器軟體可以使用電腦友善的上傳/下載下傳aFleX 腳本到AX裝置. 并提供編輯器軟體通用的一些特性,如語syntax highlighting,關鍵字自動補全等功能.

2. 将 aFleX 腳本配置在相應的VIP port(虛拟伺服器端口)

a.WebUI: Config > Service > SLB > Virtual Server > Port

b. CLI: AX(config)# slb virtual-server <name>

   AX(config-slb vserver)# port N tcp

   AX(config-slb vserver-vport)# aflex <name>

通過前面的介紹和舉例可以看出,自定義腳本應該是一個非常完美的用以解決使用者千變萬化需求的特性。但真正使用過自定義腳本功能的使用者卻會盡可能的回避使用它,其根源就是自定義腳本的處理性能。這也是自定義腳本未能更大範圍應用的主要原因。自定義腳本應用在虛拟IP的某個應用端口後,所有到該應用端口的流量除了正常配置的處理外,都必須通過自定義腳本處理,這些處理都必須由CPU來執行。而傳統應用傳遞裝置不具備足夠的CPU資源,或者其基于單核處理器的作業系統不能很好地發揮多核處理器的性能,導緻自定義腳本處理性能極差(性能下降50%甚至更高),很難被具有高性能要求的使用者所接受。

A10網絡的AX系列應用傳遞裝置的推出改變了自定義腳本的這種尴尬局面。其專門設計的基于多核處理器的作業系統ACOS可以實作多處理器接近零開銷的并行處理,是以隻需要通過增加處理器數量即可以保證足夠的性能。而傳統的作業系統由于處理器間的額外開銷,當處理器數量超過3個時就很難再有性能提升。在具備足夠的處理器資源以後,自定義腳本的處理性能自然迎刃而解。(K.Y)

繼續閱讀