看板 Soft_Job 關於我們 聯絡資訊
個位前輩好, 不才小弟我前天與主管發生爭執, 是軟體架構上的設計想法不同。 文章可能有點長, 如果前輩們不喜愛, 還請見諒。 小弟寫後端的,有一個case分配剛好是 主管寫game server 我寫game logic 由於是第一個遊戲, 所以沒有任何前例或者範本或通用架構, 現在寫的一切就是未來的依循, 然而在前期討論都很順利, 意即 , game server就是包含除了實際遊戲邏輯以外全部的部份, 我只要寫好遊戲邏輯,例如牌類比大小, 我只消管怎麼比大小就好, 其餘的都由game server處理。 這看起來很完美, 但實際做出來的時候, 我原本預想由我提供幾個interface, server只要呼叫這幾個就能完成一局遊戲, 比如: 1. start 2. stop 3. command handle 争議點在command handle, 我原本期待的是game server收到任何 client傳來的命令,只需要by pass給這interface就好, 這個interface會自行處理。 但是主管堅持,他只提供client命令的讀寫 , 其餘的遊戲邏輯搞定。 也就是他只管server client之間溝通的library。 這樣變成我的遊戲邏輯得處理命令的接收, 邏輯得fork一個thread去聽有無命令進入, 而不是定義該怎麼處理命令, 然而這樣會讓未來每款遊戲都需要重覆的處理命令。 怎麼想都覺得這樣十分鬼異, 我說, 我想要的是只需要填肉,骨幹可以通用的架構。 主管回, 你別管這麼多,以後的人寫不好寫不順, 我會開除他,別管骨幹通用。 争論到最後,主管直接爆氣講, 你別覺得自己寫code很厲害, 我說這樣就是這樣。 當然,主管都講到這份上了, 我只能默默的說, 只是想提醒這樣架構會造成重覆, 以及通用性不足。 然後就吞了。 唉,小弟以前寫bios的,單兵作業比較多, 請問我該如何處理這種多人協同作業上的歧義呢? 感謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.217.165.21 ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1476555697.A.B3C.html
tommady: 喔對了,主管還挑明,以後誰敢改他這方式架構,殺全家。 10/16 02:25
tommady: 。。 10/16 02:25
tommady: 十分的無言。 10/16 02:25
richard07250: 聽話 辭職 選一個 10/16 02:28
sing10407: 吞阿 他是主管欸。反正出事責任是他扛 10/16 02:30
iFEELing: 你有遇過平常大小聲 出事就把屬下推出去擋的主管嗎? 10/16 03:00
iFEELing: 他會負責就照他的指示寫 他不負責就早點閃免得當替死鬼 10/16 03:12
pttworld: 至少這case的要拿到。 10/16 06:09
Jichang: 你把他想成 你有兩層要寫 不就好了 10/16 06:44
steve1012: 再寫一層interface? 10/16 07:05
wesley234: 你的主管是對的 10/16 08:58
maxqq: 反正他要負責,就給他負責,輕鬆點,拿錢辦事,又不是一輩 10/16 09:17
maxqq: 子在這家公司做事 10/16 09:17
maxqq: 如果依照上一層是接收指令後,分析指令,呼叫邏輯 10/16 09:28
maxqq: 那其實,你主管的方式可能是比較正確 10/16 09:29
maxqq: 把 command_handle 拆細一點,比對 start/stop 10/16 09:35
luckyshin: 你是被主管聘來幫他做事,不是被聘來跟他吵架的 10/16 11:15
f124: 照主管說的做阿 我只管錢有沒有進來而已 干我屁事 10/16 11:18
yyc1217: 你不是老闆 就是需要妥協 客戶要大便就給他大便 頂多提醒 10/16 11:28
yyc1217: 一下這是大便 10/16 11:28
vi000246: 寫個負責處理命令的去呼叫interface 10/16 11:41
longlyeagle: 這不是軟體架構問題 是工作分配問題 10/16 11:49
badyy: 寫清楚接手時就是被這樣要求的,別被牽拖就好 10/16 12:47
badyy: 總比哪種前面接手就有問題,還反過來問你為什麼的好 10/16 12:56
stosto: 我覺得你主管是對的耶.... 10/16 13:59
balaking: 我比較偏向你主管的架構分類... 10/16 15:04
shadow0326: 本來就不會只有兩層 中間一層主管不想寫 叫你寫而已 10/16 15:27
giantwinter: 離職 10/16 15:30
balaking: 而且我覺得你主管的工作不叫game server, 應該是api ada 10/16 15:50
balaking: pter lib, 可以參考別人架構 https://goo.gl/DMx1WT 10/16 15:50
balaking: 你的工作就是用主管的lib把remote data存進db, 懂了吧 10/16 15:56
htury: 想太多,趕快做完交差領錢就對了,在台灣還期待什麼是對的 10/16 16:06
bobju: 這主管好啊~ 很明確地表明了分工態度, 誰聽誰的很清楚; 要 10/16 17:30
bobju: 是遇到打混戰的主管跟你說好好好, 最後再翻臉不認帳, 那才 10/16 17:31
bobju: 要幹在心裏. 10/16 17:31
anr2: 學習被領導,學習cowork 10/16 17:45
dnabossking: 還好,不是只有我覺得主管是對的 10/16 18:05
massrelay: client 跟 server 溝通不能因為處理遊戲邏輯卡住或等待 10/16 19:07
massrelay: 。 10/16 19:07
抱歉, 小弟圖和文的解釋中沒有提到命令的收送方式, 我們用Golang實做, 所以client每個命令進來game server, 都是一個單獨的goroutine, 我的想法是, 這條goroutine應該要直接呼叫interface的command handle, 而非還得傳channel給game logic去處理.
now99: 離職阿 10/16 19:12
mathrew: 先不管這個架構誰對誰錯 基本上主管要負責 你就照他說 10/16 19:57
mathrew: 的做,然後錢有進戶頭就好了 10/16 19:57
※ 編輯: tommady (114.44.197.244), 10/16/2016 20:26:01
AlanSung: 一進來就生一條 goroutine ? really? 10/16 21:26
badyy: 這厲害了,一個cmd一個goroutine ??? 怪可怕的 10/16 23:52
對, 因為關於balance的部份, 有另一台server在玩家進入game server之前就先管理, 所以一台game server, 不會有過多玩家的問題, 況且依照golang的特性, 幾百萬條goroutine都不是問題, 因此很放心的就每個命令一條goroutine XD. ※ 編輯: tommady (114.44.197.244), 10/17/2016 07:19:03
AlanSung: 所以看來你沒有做過 profiling,有用過 runtime/pprof嗎 10/17 08:00
AlanSung: 而且如你所述的話,你把程式的穩定性交給前一台srv 10/17 08:02
AlanSung: 一個 goroutine 算你 2KB 好了 1M 就 2G 了 10/17 08:04
AlanSung: 而且你什麼時候有去做 GC 呢? 不管怎麼看風險都很大 10/17 08:05
AlanSung: 如果有看系統 dashboard , memory 一直往上,你家的 10/17 08:06
AlanSung: DevOps / Ops 不會跳腳嗎? 有沒有考慮用 channel 10/17 08:06
AlanSung: 加固定數量的 goroutine 比較好呢? 10/17 08:06
Argos: 這種沒有什麼標準答案的東西你是在爭什麼?不就兩條路 10/17 09:33
anr2: https://goo.gl/YgmfY2 不覺得一個cmd一個goroutine是個好注 10/17 09:48
anr2: 意, 還是需要有 load balance 跟 worker pool 10/17 09:49
anr2: 我沒有實際遇過goroutine, 但是從文件來看一個 thread block 10/17 09:49
anr2: 應該說一個 goroutine block 就會在建立一個 goroutine 10/17 09:50
anr2: 把資源分配全部交給go 感覺就很危險 除非你有座 backpresure 10/17 09:51
iamshiao: 推 Jichang,我看的時候也是這樣想,不過時間要夠。 10/17 11:03
Argos: 建議原PO都依你主管的去做就好 甚至今天主管硬要我變數全部 10/17 13:26
Argos: 取a b c 但他一個月給我十萬 我照寫不誤 懂? 10/17 13:26
genesic: golang寫出來的東西無法模組化嗎? 為什麼會爭這個? 10/17 15:00
Sidney0503: 我覺得不想溝通的人是你 你沒去理解你主管的設計理念 10/17 18:04
Sidney0503: 你還是快點離職吧 不要繼續待比較好 10/17 18:05
受教了, 因為玩家數量永遠衝不過200... 所以profiling就懶惰了... 如果說要用channel去限制命令傳達的數量, 那何不直接game server在聽的時候, 就做管控呢? 為什麼得丟到game logic來管控呢? 這不是多費一道工嘛? 這也是我十分想不透的一點. 我以為game logic只要純粹定義怎麼玩一局遊戲就好, 而不是還得管其他拉里拉雜的. 一點拙見, 還請包含. 至於為什麼會爭執... 其實主管只要告訴我, 他的想法好壞在哪裡, 別情緒化就爆炸, 我一定會接受的, 至於現在, 我就是"當狗"聽他的作法, 但是十分好奇他的設計想法, 又或者是我想法太狹隘, 所以才來板上請求賜教. 感謝. ※ 編輯: tommady (114.44.197.244), 10/17/2016 21:00:45
AlanSung: 就你上面回的第二段,請查一下 defensive programming 10/17 21:07
AlanSung: 如果你不能理解為什麼,可以問問主管或是其他比較有 10/17 21:08
AlanSung: 經驗的人 10/17 21:08
謝謝您的回覆, 我的game logic裡面當然會有一些簡易的檢查判斷, 例如最高上限幾個人, 目前cpu, memory使用量, 然後反饋給game server, (其實cpu, memory 使用量我也覺得應該是game server要幫我監控才對 XDDD) 我想應該能阻擋一些可怕的例外, 但是小弟想理解的是令一層面的問題, 為什麼放著簡單的function call不用, 偏要IPC. 感謝您. ※ 編輯: tommady (114.44.197.244), 10/17/2016 21:22:08
gogogogo3333: 設計始終出自於需求,沒有絕對優勢的設計模式 10/18 07:12
AlanSung: 若是這樣,我想你能不能 show 一下你的 test cases 呢 10/18 08:06
AlanSung: 我們可以從 test case 看出來別人(api, server)怎麼用 10/18 08:06
AlanSung: 有助於討論原本的設計哪種比較好 10/18 08:07
Argos: 去上班講難聽點就是當狗啊 XDDDD 10/18 13:32
brightest: 聽他的記得錄音 10/18 13:36
justben: https://github.com/urfave/negroni 阿就裝個middleware 10/19 00:33
justben: inject response 10/19 00:34
badyy: 如果主管有提出實際分法就照做,最怕的是沒提又要等人提 10/20 00:36
badyy: 等人驗證,搞個好像是出錢的人才可怕 10/20 00:36
longlongint: 先閉嘴硬肏程式碼 做完這期就閃 10/20 16:26