對於
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個大類:
(這裡插入介紹
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
有如下內容:
當ax裝置完整的接收並解析出
client
的http request header
時候觸發
當ax裝置從server
的response
中解析出了所有狀態碼以及
header
資訊的時候觸發
當ax裝置從server
接收到狀態碼
100 continue
的response
時候觸發
當連線請求接收到乙個新的
內容資料的時候觸發
當ax從response
中接收到新的
內容資料的時候觸發
在乙個request
被傳送往
server
之前立即觸發
未完待續
如何讓aFleX指令碼效能更好
a10網路的的aflex指令碼可以對請求和響應資料報進行深度檢測並進行靈活的重定向 丟棄 修改等操作,可以解決使用者的一些特殊需求,因此深受一批技術型使用者的鍾愛。儘管ax平台憑藉其傑出的架構設計使得aflex帶來的效能影響相對同類產品小很多,但根據aflex的複雜度和編寫質量不同,對應用整體效能的...
Shell指令碼程式設計入門(一)
最近在學shell,記錄一下。if語句的使用 1.判斷兩個引數大小 bin sh a test about if statement a 10 b 20 if a eq b then echo parameter a is equal to parameter b elif a le b then ...
shell指令碼 入門教程(一)
0.摘要 本文主要介紹shell指令碼的概念,並給出hello world示例,讓讀者對shell指令碼有乙個基礎的認識。1.什麼是指令碼 簡單地說 在linux或類似系統中,我們常常會使用一系列的命令來完成一件小型的工作。如果把這些命令串起來並存放到乙個檔案中,那麼就得到了乙個指令碼。當然,指令碼...