一位計(jì)算機(jī)系高材生給我的感慨
來(lái)源:原創(chuàng) 時(shí)間:2017-04-27 瀏覽:0 次
前幾天無(wú)意間在網(wǎng)上看到一個(gè)博主發(fā)出的關(guān)于學(xué)生時(shí)代一起敲代碼的革命情懷,小編不禁回想起大學(xué)時(shí)候一起艱苦奮斗的小伙伴,雖然行業(yè)不同,但是感情卻是一樣的真摯,那時(shí)候的大家是那樣的單純。
男孩是大二時(shí)期接到一個(gè)電信增值的項(xiàng)目《短信網(wǎng)關(guān)》。
理科男都很淳樸,輕描淡寫(xiě)的描述出自己的業(yè)務(wù)邏輯及失敗的最初設(shè)計(jì),很是嚴(yán)密的講解了自己失敗的原因在哪兒,如果換成小編可能光革命情懷就得長(zhǎng)篇大論一番。
我們來(lái)看下男孩遇到的具體事情,商家對(duì)項(xiàng)目的要求如下:每天400萬(wàn)條短信和不許宕機(jī),高并發(fā)和高可靠是整個(gè)項(xiàng)目的質(zhì)量指標(biāo)。
年輕氣盛的他最初認(rèn)為,這樣一個(gè)項(xiàng)目,業(yè)務(wù)層不算很復(fù)雜,整個(gè)項(xiàng)目難度應(yīng)該是不大的,于是就開(kāi)始著手操作了。
初步設(shè)計(jì),oracle集群,程序由調(diào)度機(jī)和發(fā)送機(jī)組成。---失敗
因
1、oracle集群在千兆環(huán)境下工作,性能不如單臺(tái)機(jī)。因?yàn)閛racle集群是中心負(fù)責(zé)數(shù)據(jù),集群點(diǎn)負(fù)責(zé)運(yùn)算,SARS 硬盤(pán)的I/O 比網(wǎng)口還高,所以千兆口集群不可行。
2、調(diào)度機(jī),發(fā)送機(jī)這樣的設(shè)計(jì)不符合高可靠性,調(diào)度機(jī)負(fù)責(zé)用戶的請(qǐng)求,負(fù)責(zé)調(diào)度底下發(fā)送機(jī)發(fā)送短信。用戶請(qǐng)求高峰時(shí)候,調(diào)度機(jī)成為瓶頸和依賴。
年輕總是在失敗中成長(zhǎng)著,很快他們考慮自己手頭現(xiàn)有的軟硬件設(shè)備,重新制定出了新的解決方案,所以第二版設(shè)計(jì)方案在測(cè)試階段輕松解決了他們的苛刻要求,這中間經(jīng)歷過(guò)多少個(gè)不眠不休夜晚,相信程序員都能體會(huì)!
第二版設(shè)計(jì): nginx +tomcat集群。分布式程序,數(shù)據(jù)庫(kù)采用redis集群。
硬件配置
手頭上有很多個(gè)學(xué)校給的ip,3臺(tái)8g配置的G6服務(wù)器,還有一臺(tái)忘記什么型號(hào),就知道它有32G內(nèi)存。
做法
1、如何充分利用完這些資源呢?我們采用了虛擬化技術(shù)。利用proxmox EX進(jìn)行虛擬化平臺(tái)的集群,上面分別跑2G內(nèi)存的小機(jī)器,這樣算下來(lái)我們有了十幾臺(tái)服務(wù)器了。(新開(kāi)博客不能上傳圖片,有機(jī)會(huì)再貼上proxmox的管理界面),壓力測(cè)試中,4臺(tái)虛擬機(jī)器。一個(gè)做nginx進(jìn)行負(fù)載均衡。3臺(tái)虛擬機(jī)上分別做tomcat集群和redis集群。一天發(fā)了430萬(wàn)條短信,未見(jiàn)異常。更加堅(jiān)定了采用虛擬化技術(shù)。
2、其實(shí)采用redis之前,我們?cè)胢emcached+oracle。發(fā)現(xiàn)memcached不適合,原因兩個(gè):一、memcached提供的功能不能滿足我們,我們要在上面封裝多一層,來(lái)滿足我們業(yè)務(wù)需要。二、我們采用xmemcached這個(gè)客戶端,是知名的memcached java 客戶端,采用nio連接。在壓力測(cè)試中,速度很慢很慢。采用loadRunner分析一下函數(shù)調(diào)用周期,發(fā)現(xiàn)xmemcached里面的動(dòng)作是單線程的,所有請(qǐng)求都有一個(gè)wait。所以導(dǎo)致在高并發(fā)下非常慢。經(jīng)過(guò)決定,采用了redis數(shù)據(jù)庫(kù)。它的功能非常強(qiáng)大。對(duì)于redis的并非處理能力,我們產(chǎn)生過(guò)2w個(gè)連接,單機(jī)無(wú)壓力。后來(lái)我們就采用了redis集群。
3、公司需要人工審核短信,首先想到是Ajax刷新去讀出短信內(nèi)容,感覺(jué)這樣辦法很笨。后來(lái)采用了dwr推送技術(shù),后臺(tái)通過(guò)aop切面,把短信內(nèi)容取出通過(guò)dwr推送出web界面。
4、提供了axis和axis2實(shí)現(xiàn)的webservice接口,http接口。壓力測(cè)試中,axis和axis2的速度差不多。
5、對(duì)于災(zāi)難的應(yīng)對(duì),nginx和redis切換掉死掉的集群點(diǎn),毫無(wú)壓力啊。
男孩總結(jié)說(shuō)自己,在這段經(jīng)歷里學(xué)會(huì)spring,memcached,redis,nginx+tomcat,dwr,axis,axis2,mybatis,proxmox虛擬化。
這樣的框架設(shè)計(jì),在大神眼中可能很小兒科,不過(guò)對(duì)于還在上學(xué)的大學(xué)生確實(shí),讓人很是慶幸。我們都是一樣的畢業(yè)之后,開(kāi)始了自己的新旅程,雖然過(guò)了當(dāng)初校園中學(xué)習(xí)探索,激情成長(zhǎng)的歲月,但卻迎來(lái)了人生新征途,歲月總是在不經(jīng)意間被消磨,我們時(shí)長(zhǎng)感覺(jué)到的力不從心,并不是真得難以達(dá)到,只是你已經(jīng)失去了當(dāng)年不顧一切的努力奮斗的決心,畢竟當(dāng)年工作看信念,如今工作看的是薪水,人的物欲一旦被挑起,再多情懷都是枉然的。
不過(guò)我確實(shí)得承認(rèn),一個(gè)大二的小孩子,居然能夠做出這樣的產(chǎn)品而慶幸,畢竟我們253云通訊專(zhuān)業(yè)從事電信增值業(yè)務(wù)的企業(yè)也是使用的大致相似的原理。只是作為企業(yè)我們的硬件設(shè)施要相對(duì)有優(yōu)勢(shì),我們的抗災(zāi)能力更加即時(shí)更加多元,線路優(yōu)勢(shì)也更強(qiáng),當(dāng)然還有很多其他方面的優(yōu)化我們都已經(jīng)完成了。小編完成這篇文章目的也很單純,我們一直認(rèn)為的萬(wàn)事最終都趨于大同的想法是對(duì)的,這篇文章里我們可以看出的是一種辦事方式,我們其實(shí)已經(jīng)使用的很習(xí)慣了。
模擬下基本分解成以下步驟:
當(dāng)然趨于大同的事情,最終還是得落到細(xì)節(jié),就是我們上面提到的優(yōu)化,包含我們的硬件設(shè)施改善,軟件方面的革新跟新興技術(shù)的投入,在這個(gè)人人追逐大趨勢(shì)的氛圍下,就看誰(shuí)能夠更好整合資源和異業(yè)聯(lián)盟,很顯然我們走在了前列,我們也希望有越來(lái)越多的朋友可以跟我們合作,成為行業(yè)領(lǐng)頭羊!