中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

如何讓aFleX腳本性能更好

2018-06-11    來源:

容器云強(qiáng)勢(shì)上線!快速搭建集群,上萬Linux鏡像隨意使用

A10網(wǎng)絡(luò)的的aFleX腳本可以對(duì)請(qǐng)求和響應(yīng)數(shù)據(jù)包進(jìn)行深度檢測(cè)并進(jìn)行靈活的重定向、丟棄、修改等操作,可以解決用戶的一些特殊需求,因此深受一批技術(shù)型用戶的鐘愛。盡管AX平臺(tái)憑借其杰出的架構(gòu)設(shè)計(jì)使得aFleX帶來的性能影響相對(duì)同類產(chǎn)品小很多,但根據(jù)aFleX的復(fù)雜度和編寫質(zhì)量不同,對(duì)應(yīng)用整體性能的影響還是存在一些差別的。本文就如何編寫更高效的aFleX進(jìn)行簡(jiǎn)單闡述。

首先,哪些因素會(huì)影響aFleX性能? 有以下幾點(diǎn)。

  • 做什么操作(使用什么aFleX/tcl命令)?  如對(duì)數(shù)據(jù)包內(nèi)容進(jìn)行操作要比對(duì)數(shù)據(jù)包頭操作要耗費(fèi)的資源要大很多。

  • 變量、條件判斷、循環(huán)等的使用

  • 使用什么事件? 如RAM CACHE中,在CACHE_RESPONSE事件中處理(每次命中該緩存都需要處理)和在緩存前的HTTP_RESPONSE事件中處理(只在緩存前處理一次),資源使用差別巨大。

知道了影響aFleX性能的因素,如何編寫高效的aFlex就又針對(duì)性了;驹瓌t如下。

1. 別使用aFlex!

不要因?yàn)楹猛媸褂胊FleX,除非必須。如果有相應(yīng)的功能特性可以做到同樣功能,使用設(shè)備自身的功能。AX的HTTP模板中提供插入客戶端IP、URL 交換、HTTP頭刪除/插入/修改、HTTP重定向等豐富的功能,性能要比使用aFleX更好。

2. 避免沒必要的變量

除非必須,否則盡可能不要使用變量。變量創(chuàng)建、賦值等都需要耗費(fèi)CPU資源,同時(shí)也會(huì)占用內(nèi)存資源(每個(gè)連接都會(huì)占用一定字節(jié),在大并發(fā)用戶時(shí)影響會(huì)放大)。諸如HTTP::host 和 IP::client_addr等命令的執(zhí)行結(jié)果已經(jīng)緩存在內(nèi)存中,將這些常量結(jié)果保存到變量是典型的資源浪費(fèi)。只有在使用變量可以減少重復(fù)計(jì)算該值時(shí)才使用變量。下面例子中,前者就使用了沒有必要的變量。

未優(yōu)化:

set ip_addr [IP::client_addr]

log “Client address=$ip_addr”

優(yōu)化后:

log “Client address=[IP::client_addr]”

3. 使用{}括住expr表達(dá)式!

由于tcl語(yǔ)言的表達(dá)式有兩次替代,一次tcl解釋器替代和一次expr命令替代,盡可能使用{}括住表達(dá)式。這樣可以使tcl對(duì)于沒必要的二次替換的變量和命令結(jié)果只進(jìn)行一次替代。

如set octet [expr 3 + [getfield [IP::client_addr] "." 4]] 中[getfield [IP::client_addr] "." 4]在tcl解釋器中替代一次,在進(jìn)行expr計(jì)算時(shí)還有一次替代。

而在使用{}后,set octet [expr {3 + [getfield [IP::client_addr] "." 4]}] 不需用第2次expr命令中的替代。

4. 條件判斷時(shí)遵循以下原則

  • 盡可能使用if-elseif替代連續(xù)多個(gè)if。多個(gè)if時(shí),即使匹配后仍然需要執(zhí)行完所有if。if-elsif則會(huì)在首次匹配后退出條件判斷。

  • if-elseif中盡量把最可能的條件放到最前面。

  • 盡可能使用switch替換if-elseif。switch可以讓代碼看起來簡(jiǎn)單,也更優(yōu)化。

5. 數(shù)據(jù)查詢時(shí)盡量使用tcl中的array替代list。多維矩陣的查詢膠質(zhì)多個(gè)list查詢更高效。

6. 使用正確的操作符可以改善性能。如:

  • 字符串比較使用eq和ne

  • 數(shù)字比較使用 ==和 !=

  • 使用命令 [IP::addr] 比較地址

7. 盡可能避免使用正則表達(dá)式regex和正則表達(dá)式替代regsub。這兩個(gè)命令功能強(qiáng)大,但耗費(fèi)資源也更多。有些情況必須使用正則表達(dá)式就不得不犧牲一些性能?赡艿那闆r下盡可能使用以下替代命令。

  • starts_with, ends_with等替代regexp

  • string map替代regsub

以上只是部分常見的可以優(yōu)化aFleX的地方,可以滿足大部分情況。針對(duì)非常復(fù)雜的aFleX優(yōu)化,一方面需要非常熟悉tcl,另一方面需要熟悉aFleX命令工作機(jī)制,這時(shí)最好是借助于廠家技術(shù)支持中心進(jìn)行優(yōu)化。

標(biāo)簽: 代碼 腳本 網(wǎng)絡(luò) 用戶

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

上一篇:紅帽企業(yè) Linux:輝煌十年 創(chuàng)新十年

下一篇:Informatica發(fā)布業(yè)界完整的云集成平臺(tái)即服務(wù)