對于A10的aFelx腳本,相信很多人都知道,甚至用過,但是實際上很多工程師在各種項目中的使用可能都是按照模闆進行修改,雖然能ok,但是卻缺乏對aFelx腳本本質上的了解,是以在使用者實際場景與腳本應用場景不完全一緻的時候,就會碰到問題,不知如何修改。而更多的技術人員或者使用者更是知其然,不知其是以然,這樣一來,其實未必真的了解aFlex的工作原理,以及到底aFlex能做些什麼事。本篇文章的目的是以我自己的了解對aFlex的一些基本原理,功能及典型案例進行簡單的分析,讓大家能夠相對深入的了解aFlex,進而能更加充分的發揮aFlex這柄利器。
當我們在A10上建立一個virtual server的時候,可能主要包含如下幾個因素:
1、VIP(當然包含具體的協定及端口)
2、server-group(當然包含具體的server、負載均衡算法、健康狀态檢測)
3、會話保持
正常的負載均衡流程如下:
1、client發起對VIP的請求,命中該VIP上的某個協定端口,進而命中某個virtual server
2、A10考察該請求命中的virtual server,找到和該virtual server關聯的server-group,進而了解到對該server-group中的server的負載均衡算法
3、如果該virtual server建立了會話保持,且該請求滿足會話保持的條件,則直接将請求轉發到特定的server;如果未滿足會話保持的條件,則按照server-group的負載均衡算法進行請求的分發。
aFlex無法單獨生效,必須綁定在virtual server上,可以在以上3步流程的第一步之後介入,改變正常的流程行為,進而達到根據客戶應用進行定制行為的目的。
一個完整的aFlex會包含3個組成部分:
1、Events(事件) aFlex生效的事件上下文環境
2、operators(操作) 在該事件上下文環境中需要滿足的條件
3、commands(指令) 滿足指定條件以後進行的行為
這3個部分之間的關系,簡單來說,可以了解如下:
當發生某個事件的時候{
{ [如果滿足某個條件]} {
執行某個指令}
}
是以要清楚的了解aFlex能做什麼,隻需要分别了解events、operators、commands的詳細内容即可。
以下依次介紹events、operators、commands這3個組成部分。
1、events
events是aFlex被觸發的先決條件,重要程度不言而喻,從aFlex支援的events種類和數量就能看出aFlex的作用範圍
aFlex的events主要分為4個大類:
a、Global b、IP,TCP,UDP C、HTTP D、SSL
(這裡插入介紹2個很重要的概念,clientside,serverside。對于一個正常的應用流程而言,client向server發起請求,經過A10建立連接配接的過程,可以分為3個部分:
1、client向A10的VIP發起連接配接請求,通過TCP 3次握手,client和A10之間建立了連接配接,這個時候A10還未和server建立TCP連接配接。随後client發送一個資料請求。
2、client發送一個資料請求到達A10之後,A10會向與server通過TCP 3次握手建立連接配接,然後A10會通過負載均衡算法選擇一台合适的server,并對資料請求進行一定的修改,随後将資料請求發送到一台合适的server上,這個時候server會進行響應,且響應的資料包會傳回到A10上。
3、A10接受到server響應資料之後,會進行适當的修改,然後把請求發送回client
在以上3個過程中,我們定義client與A10之間的互動都屬于clientside,server與A10之間的互動都屬于serverside,之是以在介紹events之前插入這段介紹,是因為一些events可以同時使用在clientside和serverside兩個部分,而雖然是相同的events,但是在這2個部分中,一些相同變量卻可以分别表達出不同的含義,這在後面篇幅中會介紹)
這裡我們着重以b和c為例說明,因為這兩類events是使用頻率最高的。
在b類中,events有如下内容:
1、CLIENT_ACCEPTED
當client與A10建立了一個連接配接的時候觸發
2、CLIENT_DATA
當client與A10建立了連接配接之後并收到一個新的資料應答且連接配接狀态處于collect status的時候觸發
3、LB_FAILED
當AX裝置不能為client發出的請求選擇一個合适的real server進行分發的時候,比如所有的server健康狀态檢測的結果都是down的時候或者所有server的連接配接上線都已經達到的時候觸發
4、LB_SELECTED
當AX已經為client的請求選擇了一個pool member的時候觸發
5、CLIENT_CLOSED
當一個clientside端連接配接關閉的時候觸發
6、SERVER_CLOSED
當一個serverside段連接配接關閉的時候觸發
7、SERVER_CONNECTED
當AX裝置和目标server建立了連接配接的時候觸發
8、SERVER_DATA
當AX裝置從目标server接收到一個新資料且連接配接處于hold status時候觸發
在c類events中,events有如下内容:
1、HTTP_REQUEST
當AX裝置完整的接收并解析出client的http request header時候觸發
2、HTTP_RESPONSE
當AX裝置從server的response中解析出了所有狀态碼以及header資訊的時候觸發
3、HTTP_RESPONSE_CONTINUE
當AX裝置從server接收到狀态碼 100 continue的response時候觸發
4、HTTP_REQUEST_DATA
當連接配接請求接收到一個新的http内容資料的時候觸發
5、HTTP_RESPONSE_DATA
當AX從response中接收到新的http内容資料的時候觸發
6、HTTP_REQUEST_SEND
在一個request被發送往server之前立即觸發
未完待續
本文轉自 virtualadc 51CTO部落格,原文連結:http://blog.51cto.com/virtualadc/599194