吐槽公司自研RPC框架

2019年7月底入職了新的公司做祝,是一家創(chuàng)業(yè)公司砾省,在架構(gòu)組負(fù)責(zé)一些架構(gòu)方面的工作。公司人員流動(dòng)略大混槐,公司自研的RPC框架是前人留下的坑编兄,開(kāi)發(fā)團(tuán)隊(duì)已全部跑路,因?yàn)樽罱彩堑谝淮谓佑|声登,寫(xiě)一下自己的吐槽與思考

吐槽點(diǎn)

微服務(wù)框架為什么要自研

我覺(jué)得沒(méi)理由狠鸳,目前開(kāi)源成熟的服務(wù)框架非常多,具有代表性的:

  • spring-cloud體系:強(qiáng)大且易用
  • dubbo(可接入spring-cloud):阿里多年前開(kāi)源的SOA框架悯嗓,被很多大公司所用件舵,已是apache頂級(jí)項(xiàng)目
  • servicecomb:華為的開(kāi)源項(xiàng)目,已是apache頂級(jí)項(xiàng)目

成熟的開(kāi)源產(chǎn)品完全能滿(mǎn)足一般創(chuàng)業(yè)公司的使用脯厨,因此铅祸,對(duì)于現(xiàn)公司,我覺(jué)得完全沒(méi)有理由自研一套

自研卻缺少文檔

自研也就算了,沒(méi)有任何使用說(shuō)明文檔临梗,入門(mén)時(shí)一臉懵逼涡扼,加上開(kāi)發(fā)團(tuán)隊(duì)全部跑路,只能向使用過(guò)的同學(xué)學(xué)習(xí)如何使用

自研的非常差

自研就自研盟庞,但是能不能做好一點(diǎn)呢吃沪?從該rpc報(bào)出的異常棧以及調(diào)用方式就能看出其實(shí)現(xiàn)非常粗糙丑陋,毫無(wú)優(yōu)雅性可言

這里先說(shuō)一說(shuō)微服務(wù)框架的幾個(gè)考慮點(diǎn)什猖,自底向上分別是:

  • 序列化/反序列化
  • 服務(wù)端/客戶(hù)端的抽象票彪,用于處理接受請(qǐng)求與發(fā)送請(qǐng)求,封裝request/response語(yǔ)義
  • 通信協(xié)議卸伞,可選擇基于tcp或者h(yuǎn)ttp抹镊,或者其它
  • RPC協(xié)議,定義RPC過(guò)程中的數(shù)據(jù)傳輸方式荤傲,支持多種調(diào)用方式垮耳,比如同步調(diào)用,異步調(diào)用遂黍,不關(guān)心返回值以及是否成功的調(diào)用等
  • 對(duì)集群的抽象终佛,封裝負(fù)載均衡與失敗處理,負(fù)載均衡可使用roundover, hash等雾家,失敗處理可提供failover, failfast等方式铃彰,現(xiàn)在的服務(wù)框架的負(fù)載均衡都使用了軟負(fù)載
  • 服務(wù)主冊(cè)與服務(wù)發(fā)現(xiàn)
  • api/stub/與已有框架的結(jié)合等
  • 服務(wù)治理

但該rpc完全沒(méi)有考慮上述問(wèn)題,或者說(shuō)考慮的非常之少芯咧,該rpc的相關(guān)情況:

  • 序列化/反序列化:json牙捉,半自動(dòng)化,往往還需要人工做json反序列化
  • 服務(wù)端/客戶(hù)端的抽象:幾乎沒(méi)有敬飒,使用靜態(tài)方法調(diào)用邪铲,也沒(méi)有IO處理,依賴(lài)應(yīng)用本身的tomcat无拗,不是說(shuō)這樣不行带到,但是太粗糙
  • 通信協(xié)議:基于http,依賴(lài)應(yīng)用的tomcat以及8080端口英染,不是說(shuō)不能使用http協(xié)議揽惹,使用http協(xié)議是沒(méi)問(wèn)題的,但是依賴(lài)應(yīng)用的tomcat并不是一個(gè)好的方案四康,因?yàn)檫@樣導(dǎo)致應(yīng)用系統(tǒng)需要關(guān)心rpc框架的細(xì)節(jié)搪搏,比如想要寫(xiě)一個(gè)Servlet Filter對(duì)請(qǐng)求進(jìn)行攔截,我們需要考慮該Filter會(huì)不會(huì)攔截到rpc請(qǐng)求
  • 負(fù)載均衡與失敗處理:無(wú)考慮箭养,根據(jù)異常棧就能看出該rpc的服務(wù)注冊(cè)與服務(wù)發(fā)現(xiàn)過(guò)于粗糙慕嚷,它是通過(guò)域名做http調(diào)用,負(fù)載均衡依賴(lài)nginx,沒(méi)有軟負(fù)載喝检,不支持失敗處理
  • 服務(wù)注冊(cè)與服務(wù)發(fā)現(xiàn):基于域名的而不是基于服務(wù)的嗅辣,粒度太粗了,這就導(dǎo)致沒(méi)法實(shí)現(xiàn)對(duì)服務(wù)的精細(xì)化管控挠说,比如A/B測(cè)試澡谭,兼容性的平滑處理等
  • api實(shí)現(xiàn)極其丑陋,沒(méi)有stub或者遠(yuǎn)程代理這樣的概念损俭,rpc的調(diào)用是純手動(dòng)處理的json蛙奖,調(diào)用方式如下:
String jsonResult = RemoteClientUtil.callRpc(”appName.serviceName“, JSON.toJsonString(params));
Result result = JSON.parseObject(jsonResult, Result.class);
  • 完全沒(méi)有服務(wù)治理能力,且沒(méi)法接入spring-cloud體系杆兵,利用spring-cloud的相關(guān)能力

毫無(wú)擴(kuò)展性

該自研的rpc框架非常不完善雁仲,并且很難與已有的開(kāi)源項(xiàng)目結(jié)合,對(duì)于流程管控琐脏、服務(wù)治理的需求攒砖,該rpc框架難以滿(mǎn)足
如果要重構(gòu),那基本上是重寫(xiě)日裙,目前大量系統(tǒng)在使用吹艇,涉及到的系統(tǒng)改造非常大,基本上不現(xiàn)實(shí)

總結(jié)

對(duì)于這樣的rpc框架昂拂,如果只論技術(shù)受神,它做的非常差,在rpc框架中格侯,它就是demo級(jí)別的存在鼻听,不有參考價(jià)值。
當(dāng)然联四,你可以說(shuō)小公司不需要dubbo精算,不需要spring-cloud,但是我不這樣認(rèn)為碎连,我認(rèn)為我們當(dāng)前對(duì)spring-cloud中的組件還是有需求的,但是該rpc沒(méi)有考慮如何融入到成熟的微服務(wù)體系驮履,抬高了我們使用這些成熟組件的門(mén)檻

雖然我沒(méi)有自研過(guò)rpc框架鱼辙,但見(jiàn)到該rpc框架后也要吸取教訓(xùn),自研基礎(chǔ)組件一定要考慮周全玫镐,盡量避免與應(yīng)用共享資源倒戏,需要考慮擴(kuò)展性

最后建議優(yōu)先選擇開(kāi)源體系作為微服務(wù)架構(gòu)的基礎(chǔ),如果有不滿(mǎn)足公司特定需求的可基于開(kāi)源組件改造

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末恐似,一起剝皮案震驚了整個(gè)濱河市杜跷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖葛闷,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件憋槐,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡淑趾,警方通過(guò)查閱死者的電腦和手機(jī)阳仔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)扣泊,“玉大人近范,你說(shuō)我怎么就攤上這事⊙有罚” “怎么了评矩?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)阱飘。 經(jīng)常有香客問(wèn)我斥杜,道長(zhǎng),這世上最難降的妖魔是什么俯萌? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任果录,我火速辦了婚禮,結(jié)果婚禮上咐熙,老公的妹妹穿的比我還像新娘弱恒。我一直安慰自己,他們只是感情好棋恼,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布返弹。 她就那樣靜靜地躺著,像睡著了一般爪飘。 火紅的嫁衣襯著肌膚如雪义起。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,441評(píng)論 1 310
  • 那天师崎,我揣著相機(jī)與錄音默终,去河邊找鬼。 笑死犁罩,一個(gè)胖子當(dāng)著我的面吹牛齐蔽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播床估,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼含滴,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了丐巫?” 一聲冷哼從身側(cè)響起谈况,我...
    開(kāi)封第一講書(shū)人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤勺美,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后碑韵,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體赡茸,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年泼诱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了坛掠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡治筒,死狀恐怖屉栓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情耸袜,我是刑警寧澤友多,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站堤框,受9級(jí)特大地震影響域滥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蜈抓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一启绰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧沟使,春花似錦委可、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至燕少,卻和暖如春卡者,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背客们。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工崇决, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人底挫。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓嗽桩,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親凄敢。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

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

  • # 背景 # 關(guān)鍵設(shè)計(jì)點(diǎn) ## 模塊化 ## 資源隔離 ## 權(quán)限控制 ### RPC框架的需求分析和概要設(shè)計(jì) #...
    65902f77f84d閱讀 1,209評(píng)論 0 0
  • 一 傳統(tǒng)垂直mvc項(xiàng)目 1.垂直架構(gòu)圖 通常mvc并不包括數(shù)據(jù)訪問(wèn)層,運(yùn)行也比較簡(jiǎn)單,直接運(yùn)行在一個(gè)tomcat等...
    千鋒陳老師閱讀 491評(píng)論 0 0
  • 自打我進(jìn)簡(jiǎn)書(shū)以來(lái) 就獨(dú)得簡(jiǎn)叔的恩寵 這后宮佳麗三千啊 簡(jiǎn)叔就偏偏寵我一人 我勸簡(jiǎn)叔一定要雨露均沾 可簡(jiǎn)叔非是不聽(tīng)吶...
    此木梅花閱讀 820評(píng)論 6 18
  • 今天早晨湿痢,早起洗漱之后涝缝,去參加了一次技術(shù)大會(huì)扑庞,看到了云計(jì)算領(lǐng)域發(fā)展的最新的動(dòng)態(tài),聽(tīng)到了軟件業(yè)內(nèi)的目前最具優(yōu)勢(shì)的演講...
    LiHongxi閱讀 86評(píng)論 0 0
  • 平時(shí)喜歡打籃球拒逮,知道自己上肢力量比較弱罐氨,為了在對(duì)抗中能保持優(yōu)勢(shì),辦了張健身房的卡滩援,通過(guò)訓(xùn)練以加強(qiáng)上肢力量栅隐。 去過(guò)健...
    學(xué)習(xí)之術(shù)閱讀 360評(píng)論 0 0