国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区

掃一掃
關(guān)注微信公眾號

如何讓aFleX腳本性能更好
2012-05-09   中國IT運(yùn)維網(wǎng)

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

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

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

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

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

知道了影響aFleX性能的因素,如何編寫高效的aFlex就又針對性了。基本原則如下。

1. 別使用aFlex!

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

2. 避免沒必要的變量

除非必須,否則盡可能不要使用變量。變量創(chuàng)建、賦值等都需要耗費(fèi)CPU資源,同時(shí)也會占用內(nèi)存資源(每個(gè)連接都會占用一定字節(jié),在大并發(fā)用戶時(shí)影響會放大)。諸如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語言的表達(dá)式有兩次替代,一次tcl解釋器替代和一次expr命令替代,盡可能使用{}括住表達(dá)式。這樣可以使tcl對于沒必要的二次替換的變量和命令結(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則會在首次匹配后退出條件判斷。

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

  • 盡可能使用switch替換if-elseif。switch可以讓代碼看起來簡單,也更優(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á)式就不得不犧牲一些性能。可能的情況下盡可能使用以下替代命令。

  • starts_with, ends_with等替代regexp

  • string map替代regsub

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

熱詞搜索:

上一篇:存儲大課堂:NAS存儲系統(tǒng)性能優(yōu)化攻略二
下一篇:紅帽企業(yè) Linux:輝煌十年 創(chuàng)新十年

分享到: 收藏
主站蜘蛛池模板: 双峰县| 栾川县| 泸西县| 黄梅县| 太白县| 镇沅| 卓尼县| 河东区| 天峻县| 新密市| 岳西县| 河东区| 祁阳县| 永安市| 沽源县| 紫阳县| 昭觉县| 迁安市| 利川市| 普宁市| 上虞市| 定襄县| 赤水市| 蚌埠市| 普兰县| 灌阳县| 洛南县| 望江县| 津市市| 读书| 察隅县| 东安县| 苏尼特右旗| 连南| 柏乡县| 大渡口区| 礼泉县| 阳西县| 靖江市| 尉犁县| 邢台市|