首頁(yè) 都市

當(dāng)程序員開(kāi)了外掛

第四十二章 大哥,你快收了神通吧

  雖然報(bào)警是來(lái)自開(kāi)發(fā)環(huán)境,但是這個(gè)產(chǎn)品的意義重大,他們可是立了軍令狀的,如果有問(wèn)題,他們就要提頭去見(jiàn)了。

  說(shuō)實(shí)在的他們也工作了有好幾年了,像這種項(xiàng)目他們也是頭一遭遇到,這可是有關(guān)他們的去留問(wèn)題。

  報(bào)警是在開(kāi)發(fā)環(huán)境,這對(duì)于他們來(lái)說(shuō)那太好了。

  找到了問(wèn)題解決后,上線就不會(huì)有同樣的問(wèn)題了,如果沒(méi)有在開(kāi)發(fā)環(huán)境沒(méi)有發(fā)現(xiàn),而是到了線上才有的這個(gè)問(wèn)題,那他們就真的沒(méi)法交代了。

  在回去的路上,他們幾個(gè)開(kāi)發(fā)還在交流。

  “到底是怎么回事,為什么開(kāi)發(fā)環(huán)境的負(fù)載會(huì)突然升高?”

  “對(duì)啊,是有什么bug了嗎?”

  “一切都等回去了我們好好的檢查檢查代碼,一定要找出來(lái)原因,不能帶著問(wèn)題上線?!边@是他們開(kāi)發(fā)的leader說(shuō)的。

  宋飛翼主導(dǎo)了這一次開(kāi)發(fā)的整體架構(gòu),是開(kāi)發(fā)團(tuán)隊(duì)的負(fù)責(zé)人,也是架構(gòu)師,這次的技術(shù)選型什么的都是他在搞。

  他的這一次的技術(shù)選型自認(rèn)為還是非常不錯(cuò)的,上傳的時(shí)候不管是二進(jìn)制還是需要從別的網(wǎng)站抓取的url,他是先放入到了一個(gè)本地的redis(一個(gè)內(nèi)存數(shù)據(jù)庫(kù),速度非常快),同時(shí)也把這個(gè)信息寫(xiě)入到了消息隊(duì)列中。

  這樣就可以利用線上n多臺(tái)物理機(jī)來(lái)做分布式的操作。

  這樣做不僅可以避免都訪問(wèn)一個(gè)主redis的壓力,還能利用多臺(tái)機(jī)器上的內(nèi)存,直接連的是本機(jī)的數(shù)據(jù)庫(kù),所以讀寫(xiě)速度也會(huì)非??臁?p>  把數(shù)據(jù)放到本地之后,會(huì)有返回一個(gè)任務(wù)的標(biāo)志給上傳端,這個(gè)任務(wù)的數(shù)據(jù)是寫(xiě)到公共的數(shù)據(jù)庫(kù)中的。

  因?yàn)樯蟼鞫丝赡軙?huì)過(guò)一會(huì)兒就來(lái)問(wèn)一下,剛才那個(gè)圖片上傳成功了沒(méi),如果成功了訪問(wèn)地址是什么,如果沒(méi)有成功也告訴我一下,我一會(huì)兒再來(lái)問(wèn)一下。

  但是上傳端來(lái)問(wèn)的時(shí)候,服務(wù)器端是有負(fù)載均衡的。(一個(gè)出口,后面掛了好多個(gè)機(jī)器,可以想像一下百度的域名,他下面是有好多的物理機(jī)的,但是對(duì)外只暴露了一個(gè)域名,就是baidu,同理,其它大型的網(wǎng)站也基本是這個(gè)套路,不過(guò)沒(méi)有百度那么多的機(jī)器罷了)

  有負(fù)載均衡,所以不確實(shí)這個(gè)提問(wèn)的動(dòng)作會(huì)具體的落到哪一臺(tái),實(shí)際上大概率都不會(huì)是剛才上傳的那一臺(tái)了。

  所以這個(gè)時(shí)候有人來(lái)問(wèn)了,就需要任何一個(gè)機(jī)器都能訪問(wèn)到的主庫(kù),可以從這里取出來(lái)剛才那個(gè)上傳任務(wù)的一些信息,返回給那個(gè)詢問(wèn)的人。

  這是客戶端輪詢來(lái)要結(jié)果,其實(shí)還有一個(gè)是回調(diào),就是在上傳圖片的時(shí)候就寫(xiě)好,一個(gè)通知接口,如果成功了,服務(wù)器端就調(diào)用一下這個(gè)接口,告訴它結(jié)果。

  然后就是上傳的機(jī)器怎么把圖片的數(shù)據(jù)存起來(lái)的問(wèn)題了。

  宋飛翼在每個(gè)機(jī)器上啟動(dòng)了一個(gè)任務(wù)調(diào)度系統(tǒng)。

  這個(gè)調(diào)度系統(tǒng)會(huì)依次把剛才那個(gè)消息隊(duì)列中的消息給消費(fèi)者,消費(fèi)者去真正的執(zhí)行上傳的操作。

  其實(shí)說(shuō)白了也就是把一個(gè)二進(jìn)制的數(shù)據(jù)存到了一個(gè)數(shù)據(jù)庫(kù)集群中,不過(guò)這個(gè)是一個(gè)特殊的數(shù)據(jù)庫(kù),并不是常見(jiàn)的mysql(也是一個(gè)數(shù)據(jù)庫(kù),內(nèi)容存在磁盤(pán)里)。

  接著再更新一下公共數(shù)據(jù)庫(kù)的信息,這樣再有人來(lái)問(wèn)的時(shí)候,它就能告訴對(duì)方應(yīng)該用哪個(gè)地址來(lái)訪問(wèn)。

  這樣的架構(gòu)用在線上是很好的,但是用在開(kāi)發(fā)環(huán)境基本沒(méi)有什么太大的用途。

  畢竟開(kāi)發(fā)環(huán)境只有兩個(gè)物理機(jī)而已,不能發(fā)揮出來(lái)他設(shè)計(jì)的這一套架構(gòu)的優(yōu)勢(shì)。

  其實(shí)一般的情況下開(kāi)發(fā)環(huán)境都用的是虛擬機(jī),還是低配的那種,而且還有很多的項(xiàng)目都是共用這個(gè)。

  宋飛翼說(shuō)他們的開(kāi)發(fā)環(huán)境只有兩個(gè)物理機(jī)還而已,就太氣人了。

  可就算不能發(fā)揮出來(lái)這個(gè)架構(gòu)的優(yōu)勢(shì),那也不應(yīng)該報(bào)警??!

  宋飛翼想不明白,到底是哪個(gè)環(huán)節(jié)出了問(wèn)題,居然能把兩臺(tái)物理機(jī)給逼到這個(gè)份上。

  回到了工位,他們立刻就登錄上了機(jī)器查看問(wèn)題。

  不過(guò)那兩臺(tái)服務(wù)器卡的厲害,他們登上去都慢的很。

  用linux(和windowns、macos,是一個(gè)操作系統(tǒng),互聯(lián)網(wǎng)服務(wù)器多用這種系統(tǒng))特有的幾個(gè)命令,很快他們就看到了問(wèn)題出在哪里。

  是cpu占用的特別高,所以把整個(gè)系統(tǒng)的負(fù)載給拉上去了。

  網(wǎng)絡(luò)連接、文件讀寫(xiě)、內(nèi)存都還好。

  “cpu為什么會(huì)占用的這么多?!彼麄兛戳艘幌逻M(jìn)程,是nginx(一個(gè)web服務(wù)器)進(jìn)程占用了很高的cpu。

  有一個(gè)人在測(cè)試群里問(wèn)了一下,“大家有做過(guò)什么操作嗎?現(xiàn)在服務(wù)器卡的很,負(fù)載特別高?!?p>  【沒(méi)有】

  【沒(méi)有】

  ……

  好幾個(gè)人都說(shuō)沒(méi)有做什么特殊的操作。

  程文也看到了這個(gè)消息,他在內(nèi)心深處想,不會(huì)是我的問(wèn)題吧?

  【我做了灰盒測(cè)試】

  程文決定還是盡早的坦白,不然被人抓到了把柄,那就不好了。

  “灰盒測(cè)試,你是測(cè)試了哪里的功能?”有一個(gè)開(kāi)發(fā)直接找過(guò)來(lái)了。

  “測(cè)試的是那個(gè)下載的時(shí)候指定參數(shù)的縮放。”

  “好的,多謝,我知道是哪里的問(wèn)題了,我去看一下。”

  當(dāng)他回到他的工位上的時(shí)候,宋飛翼也從nginx的日志上看到了一些端倪。

  好像是有幾個(gè)請(qǐng)求導(dǎo)致的這個(gè)問(wèn)題。

  “應(yīng)該是縮放那里的問(wèn)題?!敝苯优苋?wèn)程文的那個(gè)開(kāi)發(fā),立刻對(duì)其他人說(shuō)道。

  “嗯,我也找到了這個(gè)問(wèn)題,這個(gè)參數(shù)怎么這么大?”宋飛翼從日志中看到了一個(gè)有問(wèn)題的參數(shù)。

  縮放的時(shí)候一般都是有固定的大小的,幾百乘幾百,最多也就幾千乘幾千,但是這幾個(gè)訪問(wèn)的連接,光是url顯示出來(lái)就有十幾厘米長(zhǎng)。

  屏幕上看別的請(qǐng)求都很正常,但這個(gè)都多換了一行。

  “臥槽,難道就硬生生去縮放了,并沒(méi)有限制一下大???”宋飛翼想到了一個(gè)可能的原因。

  “大意了,大意了?!?p>  嘴里說(shuō)著這些,手上的動(dòng)作卻是一點(diǎn)也沒(méi)有停。

  “你先讓程文把他的腳本停一下吧,我知道問(wèn)題了,馬上就修改?!彼物w翼對(duì)剛才回來(lái)的那個(gè)人說(shuō)道。

  “好的。”

  【大哥,你快收了神通吧!】

  程文:……

  【好,我這就把腳本停了】

  程文知道已經(jīng)找出來(lái)了問(wèn)題,他也非常開(kāi)心,總算是在上線之前找到了bug,這樣就不怕上線的時(shí)候會(huì)有重大的事故了。

  要不然不僅開(kāi)發(fā)有責(zé)任,他們這些測(cè)試同樣也有責(zé)任,誰(shuí)讓他們沒(méi)有測(cè)試出來(lái)這個(gè)問(wèn)題。

  其實(shí)其他人也測(cè)試到了這個(gè)功能,只是他們沒(méi)有用那么大的值去測(cè)試。

  ps:

  這個(gè)是在實(shí)際中是遇到的一個(gè)案例,項(xiàng)目已經(jīng)穩(wěn)定的運(yùn)行了好多年了,從來(lái)沒(méi)有過(guò)問(wèn)題,但是有一次突然出現(xiàn)了問(wèn)題,后來(lái)排查問(wèn)題,發(fā)現(xiàn)有這么一個(gè)bug。

  不知道是在當(dāng)初就有,還是中間被人改過(guò),反正線上是有這個(gè)問(wèn)題的。

雪天蛤蟆跳跳

求推薦,求收藏!

按 “鍵盤(pán)左鍵←” 返回上一章  按 “鍵盤(pán)右鍵→” 進(jìn)入下一章  按 “空格鍵” 向下滾動(dòng)
目錄
目錄
設(shè)置
設(shè)置
書(shū)架
加入書(shū)架
書(shū)頁(yè)
返回書(shū)頁(yè)
指南