aFlex指令碼入門(一)

2021-09-22 00:10:35 字數 4627 閱讀 1950

對於

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或類似系統中,我們常常會使用一系列的命令來完成一件小型的工作。如果把這些命令串起來並存放到乙個檔案中,那麼就得到了乙個指令碼。當然,指令碼...