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