基于Rabbitmq的分布式判題系統(tǒng)

感謝明朝互動(dòng)對我的培養(yǎng),公司的強(qiáng)制每日總結(jié)制度讓我養(yǎng)成了總結(jié)的好習(xí)慣。我不希望遺忘這個(gè)難得的好習(xí)慣,借助簡書記錄成長的一點(diǎn)一滴;

內(nèi)容太龐大,感覺無從說起。但是不好好總結(jié)總結(jié),感覺對不起老師和自己。論文寫完了,ppt做完了,系統(tǒng)也上線了。這篇文章不想介紹什么技術(shù),只是想記錄一下心情。
Github地址:https://github.com/shanxuanchen/GdinojJudge


說實(shí)話,這個(gè)系統(tǒng)很龐大。龐大不是在于代碼量,而是在于架構(gòu)和思想,原理和難點(diǎn)。首先就是架構(gòu)的演變。

架構(gòu)的演變

image.png

原來的判題系統(tǒng)是集中式判題,內(nèi)核輪訓(xùn)數(shù)據(jù)庫的方式來獲取提交請求的。這個(gè)毛病其實(shí)很顯然的,數(shù)據(jù)庫存在鎖機(jī)制,用判題進(jìn)程去輪訓(xùn)修改數(shù)據(jù)庫這個(gè)做法其實(shí)是很糟糕的。但是我去向hustoj的老師去提出我的想法的時(shí)候,他們都覺得這個(gè)沒有問題。也不需要這樣的改進(jìn)。我做出來的結(jié)果證明了我是對的。

image.png

后來我就做了上圖的改進(jìn)。我使用了rabbitmq來做中間件,判題集群跟業(yè)務(wù)就可以完全解除耦合。這個(gè)輪訓(xùn)數(shù)據(jù)庫的傻逼做法終于得到解決。但是之前的想法是用erlang來封裝網(wǎng)絡(luò)層再用nif來封裝內(nèi)核,來調(diào)用判題服務(wù)的。不過我做著做著就感覺不對勁了。這個(gè)tm不是復(fù)雜了嗎,我只是想從消息隊(duì)列中獲取數(shù)據(jù)啊。


那時(shí)候距離要交小組項(xiàng)目演示已經(jīng)剩下不多的時(shí)間了,我心頭的那個(gè)急啊。那時(shí)候還剩5天,這5天我是基本都是通宵的。后來架構(gòu)發(fā)生了大規(guī)模的變化如下圖。

image.png

邏輯的架構(gòu)是沒有發(fā)生改變的。主要是判題服務(wù)器這個(gè)部分。我沒有用erlang來編寫網(wǎng)絡(luò)層了,我直接用C來獲取rabbitmq的消息!然后再直接開啟進(jìn)程判題。然后我開始思考消息的封裝協(xié)議,我一開始是打算用protobuf來打包消息的。性能也確實(shí)比較好。但是時(shí)間不夠了啊!!只能轉(zhuǎn)頭用json來封裝了。不過json也不差。也就是說,從web發(fā)送過來的請求放進(jìn)消息隊(duì)列之前都已經(jīng)被封裝成json格式了。在判題內(nèi)核中還需要對json解碼。這個(gè)難度不大。cpp大把的開源庫。

結(jié)果

連續(xù)5晚的幾乎通宵,更可氣的是web的版本拖了很久還沒上線,我還花了一天左右的時(shí)間硬是把web版本硬推上線,真是一把心酸一把淚。


感悟

一開始跟佳哥做了很多項(xiàng)目,堅(jiān)持到現(xiàn)在的就只剩下oj了。我是滿滿的沒有辦法啊。如果可以,我希望我能堅(jiān)持到佳哥退休。30多年,我相信可以的。對佳哥的感激和知遇之恩我覺得我一輩子都還不清了,多少感激的話都覺得很無力。

在明朝實(shí)習(xí)的時(shí)候,柳光要我研究rabbimq源碼。我那時(shí)候看得十分仔細(xì)和認(rèn)真,并且把各個(gè)模式我都自己用erlang寫了一遍。最后問思強(qiáng)我的畢設(shè)應(yīng)該怎么做的時(shí)候,我最終就確定了初步架構(gòu)。現(xiàn)在想起來感覺請柳光和思強(qiáng)一頓飯不夠啊。

有很多人覺得我,為了一個(gè)畢設(shè)放棄這么好的工作,放棄這么多東西不值得。但是他們不知道,這個(gè)畢設(shè)不僅僅是我一個(gè)人的東西。我做這個(gè)系統(tǒng)并不只是為了我畢業(yè)而做,我也是為了學(xué)校的acm/icpc而做。我曾經(jīng)說過,有一些恩情,就是要怎么還也還不清的。acm/icpc這個(gè)比賽對我來說有太重要的意義了。因?yàn)樗议_始愛上了編程;因?yàn)樗议_始沒天沒夜的學(xué)算法;因?yàn)樗议_始了人人推廣的創(chuàng)業(yè);因?yàn)樗医Y(jié)識(shí)了佳哥;因?yàn)樗腋矣谌⒓訑?shù)模;因?yàn)樗矣兄欠驳淖詫W(xué)能力和領(lǐng)悟能力。

然而我的學(xué)校卻沒有一個(gè)好的氛圍去參加這個(gè)比賽,甚至很多人都不知道它的存在。這是一個(gè)弱校的悲哀,更是我的無奈。但是,我不甘心。我只能用綿薄之力去一點(diǎn)點(diǎn)地改變它。


計(jì)劃

至于接下來要怎么走,我確實(shí)需要幾天好好想想。這次使用linux API編寫內(nèi)核驅(qū)動(dòng)讓我找回了當(dāng)年的感覺。估計(jì)也是這個(gè)方向比較好,現(xiàn)在還比較模糊。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,501評論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,673評論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,610評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,939評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,668評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 56,004評論 1 329
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,001評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,173評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,705評論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,426評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,656評論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,139評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,833評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,247評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,580評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,371評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,621評論 2 380

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,761評論 25 708
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,177評論 4 61
  • 親愛的兒子: 我突然想定期給你寫一些我暫時(shí)還收不到回復(fù)的信,一來記錄你的成長,另外,也能緩解我對你的思念。時(shí)間跑得...
    易清南閱讀 158評論 0 0
  • 文 劉若英 每年秋天一到,祖母總是提醒我“該上山看祖父了”。祖父的生日是祖母最重視的日子,即使祖父離開我們已經(jīng)有十...
    dalianmaoliang閱讀 294評論 0 0
  • ——2015年暑假西北之行掠影 每年的暑假,一年中最長的假期,是難得享受和愜意的時(shí)光。在這小縣城...
    凡塵葦子閱讀 1,770評論 0 4