應(yīng)用交付技術(shù)哥講述負(fù)載均衡“血淚史”
每當(dāng)大型企事業(yè)單位的網(wǎng)絡(luò)系統(tǒng)業(yè)務(wù)發(fā)生諸如流量堵塞、效率緩慢、運(yùn)行不暢等癥狀時(shí),IT經(jīng)理們首先都會(huì)想到是否要再上一套負(fù)載均衡設(shè)備。誠然,作為網(wǎng)絡(luò)優(yōu)化的一件重大設(shè)備,負(fù)載均衡的確有很多突出的特性,但是否上了負(fù)載均衡業(yè)務(wù)就能高枕無憂了呢?
答案是:未必!
國內(nèi)知名應(yīng)用交付廠商太一星晨的一位資深技術(shù)哥,在經(jīng)歷大量項(xiàng)目實(shí)踐后,對(duì)于負(fù)載均衡總結(jié)出來一套“心經(jīng)”。他指出,因?yàn)樨?fù)載均衡和業(yè)務(wù)之間的調(diào)整息息相關(guān),如果調(diào)整不好,有時(shí)上了負(fù)載的業(yè)務(wù),反而會(huì)讓效率降低,甚至比原來更慢。
接下來,不妨以對(duì)業(yè)務(wù)要求***的金融聯(lián)機(jī)交易系統(tǒng)為例,來看看上負(fù)載均衡的時(shí)候,問題都發(fā)生在哪些方面。
狀況一:同一服務(wù)端口開啟多個(gè)通信方式
金融聯(lián)機(jī)交易系統(tǒng)選擇應(yīng)用交付多數(shù)是為了利用負(fù)載實(shí)現(xiàn)業(yè)務(wù)的高性能擴(kuò)展和高可用。例如:
為了上負(fù)載,太一星晨技術(shù)哥建議將應(yīng)用設(shè)備服務(wù)器設(shè)置為兩臺(tái),端口分別為:10.112.57.21:8001、10.112.57.22:8001,兩臺(tái)服務(wù)器上都實(shí)現(xiàn)了兩種通信方式HTTP、JMS。
該業(yè)務(wù)模式如下:
HTTP連接采用短連接方式進(jìn)行通信,每次請(qǐng)求都會(huì)重新建立連接;
JMS連接采用長(zhǎng)連接進(jìn)行通信,只建立一次連接。而且對(duì)該系統(tǒng)發(fā)送請(qǐng)求的客戶端是比較固定的,多為部署在分行的前置服務(wù)器,每個(gè)分行部署1-2臺(tái)。
部署完畢后,貌似***!但好日子還沒過幾天廠商的電話就來了:負(fù)載均衡根本沒起作用!
通過對(duì)兩臺(tái)服務(wù)器系統(tǒng)資源的監(jiān)控,技術(shù)哥迅速發(fā)現(xiàn)是因?yàn)閮膳_(tái)服務(wù)器明顯負(fù)載不均衡,所以才沒達(dá)到預(yù)期效果。
追本溯源,原來在做系統(tǒng)設(shè)計(jì)時(shí),為了讓服務(wù)操作更簡(jiǎn)單,就將對(duì)外服務(wù)端口統(tǒng)一為一個(gè)端口——這樣的方式對(duì)于關(guān)聯(lián)系統(tǒng)來說,是非常方便調(diào)用的設(shè)計(jì)。但也正因?yàn)槿绱?,上了?fù)載以后,負(fù)載根據(jù)端口平均分配任務(wù)——實(shí)際上兩種業(yè)務(wù)的類型是不一樣的:一種連接數(shù)很少,一種連接數(shù)很多。如此這般,經(jīng)過負(fù)載的分配,自然就導(dǎo)致了業(yè)務(wù)分配不均勻,從而造成了單臺(tái)服務(wù)器壓力過大。
經(jīng)過冷靜分析,技術(shù)哥嘗試了將JMS協(xié)議調(diào)整為HTTP協(xié)議,以及將JMS協(xié)議部署到一個(gè)新的端口,發(fā)現(xiàn)都能達(dá)到負(fù)載均衡的效果。***選用了將協(xié)議統(tǒng)一調(diào)整為HTTP協(xié)議的方式,業(yè)務(wù)的效率“噌噌”地又上去了!
狀況二:壓力過大
有一次,太一星晨技術(shù)哥為某金融機(jī)構(gòu)部署負(fù)載均衡。在沒部署之前,調(diào)試沒有任何問題,也通過了壓力測(cè)試,而且能達(dá)到3000/秒的用戶數(shù)。但是就在技術(shù)哥上了負(fù)載產(chǎn)品后,一開始還能達(dá)到4000/秒左右,轉(zhuǎn)眼卻如洪水傾瀉,用戶數(shù)急速降低,甚至還不如沒上負(fù)載前。
“本來我們網(wǎng)絡(luò)沒有這么慢,現(xiàn)在加了負(fù)載均衡卻變慢了,是不是你們負(fù)載產(chǎn)品有問題啊?”用戶提出了尖銳的質(zhì)疑。
經(jīng)過仔細(xì)觀察發(fā)現(xiàn):壓力下,負(fù)載工作很正常,CPU也很低。但沒上負(fù)載前,后臺(tái)數(shù)據(jù)庫的CPU工作在85%左右,加了負(fù)載均衡之后,數(shù)據(jù)庫反而瞬間達(dá)到了百分之九十多,然后就居高不下了……
問題原因究竟在哪兒?
細(xì)究之下發(fā)現(xiàn),原來這個(gè)機(jī)構(gòu)的數(shù)據(jù)庫平臺(tái)在設(shè)計(jì)之初,沒有考慮到以后需要在負(fù)載的情況下應(yīng)用,現(xiàn)在經(jīng)過負(fù)載,給數(shù)據(jù)庫的壓力增加了,數(shù)據(jù)庫中某個(gè)表查詢過慢,反而導(dǎo)致了整個(gè)數(shù)據(jù)庫查詢效率降低,進(jìn)而影響了整個(gè)系統(tǒng)。
所以,綜上案例可以發(fā)現(xiàn),負(fù)載設(shè)備和客戶的應(yīng)用業(yè)務(wù)是息息相關(guān)的,要想成功的部署負(fù)載均衡,并使其發(fā)揮預(yù)期的效果,除了要了解客戶需求,更要應(yīng)地制宜,知己知彼才能讓負(fù)載均衡產(chǎn)品發(fā)揮出它該有的作用。