thrift rpc 使用常見(jiàn)問(wèn)題解答和經(jīng)驗(yàn)

原文:http://blog.rushcj.com/2010/08/21/try-thrift/

Thrift是一個(gè)非常棒的工具,是Facebook的開(kāi)源項(xiàng)目笼蛛,目前的開(kāi)發(fā)非常的活躍洒放,由Apache管理,所以用的是Apache Software License滨砍,這非常重要往湿,因?yàn)榭梢苑判牡膶?duì)其修改并用到自己的項(xiàng)目中。

談到修改Thrift,這非常重要惋戏。因?yàn)槲矣X(jué)得如果要嚴(yán)肅的使用Thrift领追,不可避免的要深入了解它,并幾乎都要修改Thrift的代碼响逢。一個(gè)通信框架绒窑,它不可能幫你做到所有的事情,也不可能在不了解的情況下就貿(mào)然的使用舔亭。

1.Thrift 的Java Server/Client有個(gè)較為嚴(yán)重的bug(https://issues.apache.org/jira/browse/THRIFT-601 )些膨,隨機(jī)向thrift? sever的監(jiān)聽(tīng)端口發(fā)些數(shù)據(jù),可能會(huì)導(dǎo)致Server OutOfMemory钦铺,細(xì)細(xì)看看代碼订雾,這個(gè)bug有點(diǎn)土。

2.Thrift Client線程不安全矛洞,多線程下使用可能導(dǎo)致Server和客戶端程序崩潰洼哎。Client的每次調(diào)用遠(yuǎn)程方法其實(shí)是有多次Socket寫(xiě)操作,因此每個(gè)線程中使用的Client要保證獨(dú)立沼本,如果多個(gè)線程混用同一個(gè)Client(其實(shí)是用同一個(gè)Socket)噩峦,可能會(huì)導(dǎo)致傳輸?shù)淖止?jié)順序混亂,使得Server OutOfMemory(參考1)

3.Thrift定義數(shù)據(jù)結(jié)構(gòu)時(shí)抽兆,盡量避免用map, 或者set壕探。在cpp下, map被對(duì)應(yīng)為std::map(rb tree)和std::set,thrift生成的類(lèi)不會(huì)重載”<”郊丛,因此需要手動(dòng)修改生成類(lèi)李请,否則link沒(méi)法通過(guò)。較為麻煩厉熟。

4.如果Client端基于效率考慮导盅,要緩存Socket,需要重新實(shí)現(xiàn)其TTransport類(lèi)揍瑟,以支持 Socket緩存池白翻。當(dāng)然,這個(gè)實(shí)現(xiàn)其實(shí)跟thrift沒(méi)多大關(guān)系,算是2次開(kāi)發(fā)滤馍。但一般都要這么做的吧岛琼?

5.如果Client基于效率考慮,緩存了Socket巢株,那么thrift Server端的模式選擇就較為重要了槐瑞。如果使用同步的TThreadPoolServer,那么無(wú)可避免的阁苞,客戶端緩存1個(gè)Socket困檩,Server端就會(huì)有一個(gè)線程一直處于Server狀態(tài),等待peek這個(gè)Socket上的數(shù)據(jù)那槽。這個(gè)線程就不能用于其它請(qǐng)求了悼沿。所以,及時(shí)清理Client端的Socket及控制Socket池的大小是非常必要的骚灸。

6.聽(tīng)同事說(shuō)CPP Thrift Server的Epoll NonBlocking模式有效率問(wèn)題糟趾。其實(shí),并發(fā)要求不高的Server用LT模式的EPoll其實(shí)很方便的甚牲,當(dāng)然拉讯,這個(gè)要自己給Thrfit Server做patch了,不過(guò)也不麻煩鳖藕。開(kāi)發(fā)起來(lái)也是很方便的魔慷。我想給我們的Server加個(gè)EPOLLONESHOT的同步EPoll實(shí)現(xiàn)。

7.CPP下的 TThreadPoolServer和TThreadServer由一個(gè)有趣的問(wèn)題著恩,如果有客戶端維護(hù)長(zhǎng)連接院尔,那么對(duì)這個(gè)Server實(shí)例做析構(gòu)的時(shí)候會(huì)堵塞(前面說(shuō)過(guò)了,在peek中…)喉誊。

8.用valgrind看邀摆,thrift cpp似乎有一些內(nèi)存問(wèn)題。沒(méi)細(xì)看伍茄。

9.無(wú)論是Java栋盹,還是CPP,Server端都無(wú)法通過(guò)合法的方式獲取Client的ip, port敷矫±瘢可以通過(guò)編寫(xiě)ThriftServerEventHandler可以處理這件事情。如果想要獲取Client ip, port的話曹仗,可以看看這個(gè)東西榨汤。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市怎茫,隨后出現(xiàn)的幾起案子收壕,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蜜宪,死亡現(xiàn)場(chǎng)離奇詭異虫埂,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)圃验,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén)掉伏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人损谦,你說(shuō)我怎么就攤上這事岖免≡榔模” “怎么了照捡?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)话侧。 經(jīng)常有香客問(wèn)我栗精,道長(zhǎng),這世上最難降的妖魔是什么瞻鹏? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任悲立,我火速辦了婚禮,結(jié)果婚禮上新博,老公的妹妹穿的比我還像新娘薪夕。我一直安慰自己,他們只是感情好赫悄,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布原献。 她就那樣靜靜地躺著,像睡著了一般埂淮。 火紅的嫁衣襯著肌膚如雪姑隅。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,166評(píng)論 1 284
  • 那天倔撞,我揣著相機(jī)與錄音讲仰,去河邊找鬼。 笑死痪蝇,一個(gè)胖子當(dāng)著我的面吹牛鄙陡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播躏啰,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼柔吼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了丙唧?” 一聲冷哼從身側(cè)響起愈魏,我...
    開(kāi)封第一講書(shū)人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后培漏,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體溪厘,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年牌柄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了畸悬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡珊佣,死狀恐怖蹋宦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情咒锻,我是刑警寧澤冷冗,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站惑艇,受9級(jí)特大地震影響蒿辙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜滨巴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一思灌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧恭取,春花似錦泰偿、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至窃款,卻和暖如春课兄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背晨继。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工烟阐, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人紊扬。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓蜒茄,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親餐屎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子檀葛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

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

  • 轉(zhuǎn)自:http://blog.csdn.net/kesonyk/article/details/50924489 ...
    晴天哥_王志閱讀 24,772評(píng)論 2 38
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)腹缩,斷路器屿聋,智...
    卡卡羅2017閱讀 134,601評(píng)論 18 139
  • 轉(zhuǎn)自http://blog.csdn.net/xugangwen/article/details/44811783...
    扎Zn了老Fe閱讀 12,693評(píng)論 1 142
  • 1. Nginx的模塊與工作原理 Nginx由內(nèi)核和模塊組成空扎,其中,內(nèi)核的設(shè)計(jì)非常微小和簡(jiǎn)潔润讥,完成的工作也非常簡(jiǎn)單...
    rosekissyou閱讀 10,197評(píng)論 5 124
  • 我們常說(shuō):“近朱者赤转锈,近墨者黑”,這句話的意思是靠近什么你就會(huì)在他身上楚殿,沾染上一些他的習(xí)性撮慨。這里我并不是想談:“親...
    愛(ài)風(fēng)城閱讀 253評(píng)論 1 0