1. 程式人生 > >thrift rpc 使用常見問題解答和經驗

thrift rpc 使用常見問題解答和經驗

Thrift是一個非常棒的工具,是Facebook的開源專案,目前的開發非常的活躍,由Apache管理,所以用的是Apache Software License,這非常重要,因為可以放心的對其修改並用到自己的專案中。

談到修改Thrift,這非常重要。因為我覺得如果要嚴肅的使用Thrift,不可避免的要深入瞭解它,並幾乎都要修改Thrift的程式碼。一個通訊框架,它不可能幫你做到所有的事情,也不可能在不瞭解的情況下就貿然的使用。

1.Thrift 的Java Server/Client有個較為嚴重的bug(https://issues.apache.org/jira/browse/THRIFT-601 ),隨機向thrift  sever的監聽埠發些資料,可能會導致Server OutOfMemory,細細看看程式碼,這個bug有點土。

2.Thrift Client執行緒不安全,多執行緒下使用可能導致Server和客戶端程式崩潰。Client的每次呼叫遠端方法其實是有多次Socket寫操作,因此每個執行緒中使用的Client要保證獨立,如果多個執行緒混用同一個Client(其實是用同一個Socket),可能會導致傳輸的位元組順序混亂,使得Server OutOfMemory(參考1)

3.Thrift定義資料結構時,儘量避免用map, 或者set。在cpp下, map被對應為std::map(rb tree)和std::set,thrift生成的類不會過載”<”,因此需要手動修改生成類,否則link沒法通過。較為麻煩。

4.如果Client端基於效率考慮,要快取Socket,需要重新實現其TTransport類,以支援 Socket快取池。當然,這個實現其實跟thrift沒多大關係,算是2次開發。但一般都要這麼做的吧?

5.如果Client基於效率考慮,快取了Socket,那麼thrift Server端的模式選擇就較為重要了。如果使用同步的TThreadPoolServer,那麼無可避免的,客戶端快取1個Socket,Server端就會有一個執行緒一直處於Server狀態,等待peek這個Socket上的資料。這個執行緒就不能用於其它請求了。所以,及時清理Client端的Socket及控制Socket池的大小是非常必要的。

6.聽同事說CPP Thrift Server的Epoll NonBlocking模式有效率問題。其實,併發要求不高的Server用LT模式的EPoll其實很方便的,當然,這個要自己給Thrfit Server做patch了,不過也不麻煩。開發起來也是很方便的。我想給我們的Server加個EPOLLONESHOT的同步EPoll實現。

7.CPP下的 TThreadPoolServer和TThreadServer由一個有趣的問題,如果有客戶端維護長連線,那麼對這個Server例項做析構的時候會堵塞(前面說過了,在peek中…)。

8.用valgrind看,thrift cpp似乎有一些記憶體問題。沒細看。

9.無論是Java,還是CPP,Server端都無法通過合法的方式獲取Client的ip, port。可以通過編寫ThriftServerEventHandler可以處理這件事情。如果想要獲取Client ip, port的話,可以看看這個東西。


相關推薦

thrift rpc 使用常見問題解答經驗

Thrift是一個非常棒的工具,是Facebook的開源專案,目前的開發非常的活躍,由Apache管理,所以用的是Apache Software License,這非常重要,因為可以放心的對其修改並用到自己的專案中。 談到修改Thrift,這非常重要。因為我覺得如

Linux的常見問題解答管理技巧

軟件升級 中國軟件 自己 安裝程序 成了 就是 下載 光盤 控制臺   Linux的常見問題解答和管理技巧   一、 如何建立多用戶   提醒大家一句,別一直使用root用戶,因為root用戶在系統中有著至高無上的權力,一不小心就可能破壞系統。比如我們想刪除/temp目錄下

Oracle幾個常見問題解答

  1.解釋冷備份和熱備份的不同點以及各自的優點   解答:熱備份針對歸檔模式的資料庫,在資料庫仍舊處於工作狀態時進行備份。而冷備份指在資料庫關閉後,進行備份,適用於所有模式的資料庫。熱備份的優點在於當備份時,資料庫仍舊可以被使用並且可以將資料庫恢復到任意一個時間點。冷備份的優點在於它的備份和恢復操作相當簡單

說一說本人對linux系統學習的方法經驗

linux 百度 應用程序 操作系統 多線程 相信大夥都聽說過linux系統,然而對於這個系統,總使讓新手感覺茫然,諾達的系統。下面是一段百度中的介紹:Linux系統是一套開源的並且能夠自由傳播的類似與Unix操作系統,是一個基於POSIX和UNIX的多任務、多用戶、支持多線程和多CPU的

CSS技巧經驗列表

bsp 隱藏元素 psi nowrap abs 選擇 css logs for 如何清除圖片下方出現幾像素的空白間隙? img{display:block;} 如何讓文本垂直對齊文本輸入框? input{vertical-align:middle;} 如何使文本溢出邊界顯示

成為一個優秀的測試工程師需要具備哪些知識經驗

重構 集成 常常 頁面 匹配 archive 靜態代碼檢查工具 作用 安全測試 根據我的觀察,優秀的測試人員可以做的事情可以包括如下3點: 由單純的測試變成項目質量保證工作持續集成探索和推動和自動化測試技術研究測試相關工具的開發1、我們先來講第一點,由單純的測試變成項目質量

軟件測試的方法-------基於直覺經驗的方法

軟件測試 alac 測試 定義:基於直覺和經驗的測試方法,不是嚴格意義上的科學測試方法,帶有一定的隨機性,測試結果不夠可靠,甚至可以看作是沒有辦法的辦法。但是,軟件測試是具有社會性,呈現一定的不確定性。這時,采用直覺和經驗往往能夠發揮更好的作用。 1.Ad-hoc測試方法和ALAC測試1.1、自由

嘮一嘮Linux系統入門的方法經驗

真的是 外設 學習方法 軟件 基於 都是 net 入門書籍 穩定 相信大夥都聽說過linux系統,然而對於這個系統,總使讓新手感覺茫然,偌大的系統。下面是一段百度中的介紹: Linux是一套免費使用和自由傳播的類Unix操作系統,是一個基於POSIX和UNIX的多用戶、多任

常見試題算法

strlen explode text handle 計算 subst ever return bubble 一、常見字符串和文件操作 1、PHP翻轉中文字符串 1 2 3 4 5 6 7 8 9 function reverse($str){ $r =

css常見屬性屬性值

eight mil -s 0.00 back 支持 erl 等待 inset CSS常見屬性和屬性值 字體屬性 Font-family 字體族科 宋體|微軟雅黑 Font-size 字體大小 Font-style 字體樣式 normal|italic(傾斜)|ob

github常見操作常見錯誤

leg 我們 找到 指向 nec mailto 根目錄 常見操作 error: 如果輸入$ Git remote add origin [email protected]:github帳號名/項目名.git 提示出錯信息:fatal: remote o

Asp.net相關知識經驗的碎片化記錄

class xquery 配置 lte 方案 字符 慎用 code run 1、解決IIS7.0下“HTTP 錯誤 404.15 - Not Found 請求篩選模塊被配置為拒絕包含的查詢字符串過長的請求”問題 方案1:在程序的web.config中system.web節點

OA常見問題解決方案

es2017 安裝目錄 常見 如果 更新 快速 關閉 快捷方式 message 本文檔:主要用來記錄OA常見的問題和解決方案。 (一)更新問題(登陸不了,或者登陸出錯) 由於很多用戶使用的是XP系統,導致每次進行OA進行升級的時候,他們都不支持自動升級。

selenium 總結篇,常見方法頁面元素的操作

itl www. 打開 總結 bar exce esc 上傳文件 標簽 今天,總結一下selenium怎麽操作web頁面常見的元素。 主要有: 上傳 alter dialog prompt dialog confirm dialog select list radio b

Supervisord常見用法介紹

進程 管理工具 share viso 使用介紹 開啟 com aso process Supervisord是用Python實現的一款非常實用的進程管理工具。supervisord會幫你把管理的應用程序轉成daemon程序,而且可以方便的通過命令開啟、關閉、重啟等操作,而且

利用thrift rpc進行C++與Go的通信

span 網絡 gen generate golang fun package should edt 一:什麽是rpc rpc通俗來理解就是遠程調用函數,相對於本地調用來說,只需要在主調函數中調用被掉函數即可,代碼如下: 1 void fun(int i) 2 {

QT常見問題解決方案整理

cpp recommend log 實現 utf tro int 發現 ring  最近重拾QT,發現百度能搜索到的東西甚少,所以上StackOverFlow上查了一些資料,覺得對自己有用的就做了記錄,方便以後查看,本篇基於Qt4.8.5,windows平臺。  問題1.

菜鳥筆記 -- Chapter 09 常見接口

菜鳥 compareto 必須 body 是我 不同 自己 jdk 深度   Java為我們提供了豐富的jar包支持,這其中很多都是我們日常開發所必須的,了解這些包和類,十分有助於我們的開發,深度了解源代碼也有助於我們代碼的優化和提高;JDK1.8為我們提供了多於4000個

github常見操作常見錯誤!錯誤提示:fatal: remote origin already exists.

空格 多余 因此 ear rem detail tco acs core 如果輸入$ git remote add origin [email protected]:djqiang(github帳號名)/gitdemo(項目名).git 提示出錯信息:fatal: re

[development][thrift] RPC框架 thrift

ava dev clas work 例如 ibm per eth -a wiki:https://zh.wikipedia.org/wiki/Thrift 來自IBM的介紹:https://www.ibm.com/developerworks/cn/java/j-lo-