透過(guò)12306五大焦點(diǎn)看高性能高并發(fā)系統(tǒng)
幽云十八 發(fā)表于:12年02月20日 09:46 [轉(zhuǎn)載] IT168
焦點(diǎn)四:軟件層需要做哪些工作?
軟件層將直接決定整個(gè)系統(tǒng)應(yīng)對(duì)高并發(fā)的能力,其將應(yīng)用服務(wù)器與數(shù)據(jù)庫(kù)、存儲(chǔ)結(jié)合成為一個(gè)有機(jī)的整體,使數(shù)據(jù)在這些IT設(shè)備之間傳輸,可以說(shuō)軟件層做得好與不好可能性能差異能達(dá)幾倍到一個(gè)量級(jí)。那么在以高并發(fā)為前提的情況下,軟件層要做什么呢?
百度首席架構(gòu)師林仕鼎認(rèn)為在解決請(qǐng)求尖峰時(shí)可采用threadpool或event-driven兩種做法。這兩種做法都需要自己維護(hù)請(qǐng)求隊(duì)列,也帶來(lái)了提高穩(wěn)定性的可能性。簡(jiǎn)單地說(shuō),就是增加flow control機(jī)制,上游根據(jù)下游的負(fù)載做throttling,反饋可以有ack/poll等多種做法,有時(shí)需要由最下游一路反饋到最前端。并采用延遲截?cái)啵瑢?duì)于太老的請(qǐng)求,直接給出拒絕響應(yīng),讓它在應(yīng)用層重試。
4399架構(gòu)師曹政則提供了更多更具體的方式,他認(rèn)為可將存儲(chǔ)key- value化,因?yàn)榛旧喜樵兌际侵本式的,所以key-value就是很好的工具;因?yàn)槌銎笨赡苄枰乙幌萝?chē)次,座位,只能一一對(duì)應(yīng)的查詢就不好用;弄 個(gè)redis帶個(gè)列表結(jié)構(gòu)進(jìn)去就可以了。春節(jié)放票總共多少?gòu)?又不是一次放出來(lái),每張票對(duì)應(yīng)一個(gè)key,一個(gè)value,能吃多少內(nèi)存?后面跟個(gè)數(shù)據(jù)庫(kù)做 同步,這點(diǎn)數(shù)據(jù)量對(duì)于現(xiàn)在的服務(wù)器來(lái)說(shuō)根本不是問(wèn)題。并且在注冊(cè)登陸也可以在 mysql基礎(chǔ)上弄個(gè)redis掛在前頭響應(yīng)以提高查詢速度。
實(shí)際上,在12306在線購(gòu)票系統(tǒng)中,查詢操作是很常見(jiàn),因?yàn)槟阈枰樵冘?chē)次,還需要查詢余票;谶@點(diǎn),曹政認(rèn)為可將查詢結(jié)果緩存化、靜態(tài)化,這可通過(guò)兩個(gè)步驟實(shí)現(xiàn),起始地,目標(biāo)地查詢 - 常見(jiàn)查詢目標(biāo)(如北京到成都)全部預(yù)制緩存。非常見(jiàn)查詢目標(biāo),基于第一次查詢的結(jié)果緩存,這樣查詢車(chē)次基本上無(wú)壓力。
查詢有票狀態(tài)就更簡(jiǎn)單了,因?yàn)槠睌?shù)只有有票,無(wú)票兩個(gè)狀態(tài),某日某車(chē)次作為一個(gè)key-value類(lèi)型存儲(chǔ)(仍用redis即可)。某類(lèi)車(chē)票發(fā)生從 有到無(wú)或從無(wú)到有的變化,才通知緩存更新。更新是后臺(tái)通知的,而非基于用戶查詢。比如某車(chē)次硬臥票售完,通知一次更新,硬座售完,通知一次更新,軟座售 完,通知一次更新。以此類(lèi)推,這樣的緩存更新次數(shù)極少。而且可以給前端返回甚至靜態(tài)結(jié)果(基于查詢條件生成靜態(tài)結(jié)果,是個(gè)Seoer都會(huì)的,后臺(tái)在票數(shù)變 化時(shí)通知更新,這樣結(jié)構(gòu)上就與前端查詢無(wú)關(guān)了,而且一樣可以保持實(shí)時(shí)性)。
最后還可對(duì)前端緩存進(jìn)行處理來(lái)提高響應(yīng)速度?赡艽蠖鄶(shù)人都被10億PV給嚇到了,但實(shí)際上這里面有很大的水分,因?yàn)橛泻芏嗫赡苁抢么a或者腳本 進(jìn)行的自動(dòng)刷新,自然而然就會(huì)產(chǎn)生較大的泡沫,而實(shí)際上絕對(duì)不會(huì)有那么多。基于這點(diǎn),則可通過(guò)緩存來(lái)避免“爆機(jī)”,并且有例子證明,這樣做的效果是能夠應(yīng) 對(duì)一小時(shí)20億的刷新,12306的10億刷新根本就不成問(wèn)題。
當(dāng)然,網(wǎng)上的各種關(guān)于軟件層的建議還有很多很多,包括之前提到的云風(fēng)的排隊(duì)系統(tǒng)也應(yīng)該屬于軟件層的內(nèi)容,因?yàn)槠脑颍诖宋覀儍H選取了幾個(gè)較為典型的建議。
公司簡(jiǎn)介 | 媒體優(yōu)勢(shì) | 廣告服務(wù) | 客戶寄語(yǔ) | DOIT歷程 | 誠(chéng)聘英才 | 聯(lián)系我們 | 會(huì)員注冊(cè) | 訂閱中心
Copyright © 2013 DOIT Media, All rights Reserved. 北京楚科信息技術(shù)有限公司 版權(quán)所有.