基於Thrift的跨語言、高可用、高性能、輕量級的RPC框架
隨著公司業務的不斷發展,組件服務化是個必然趨勢,那麼服務之間如何高效通信?如何對其進行統一管理呢?使用統一的RPC框架是個不錯的選擇。雖然業內已經存在多套開源的RPC方案,但各有優劣,百分點結合自身的需求,也開發了一套RPC框架——HARPC,目前已經開源。百分點長期致力於大數據底層技術的研發,秉承開放共享精神,將此框架開源,以幫助更多的企業和個人開發者減少在RPC技術上的研發成本。
HARPC是什麼
HARPC(High AvailabilityRPC)是基於Thrift的跨語言、高可用的RPC框架。具備高性能、高可用、輕量級等特點,在百分點內部服務中廣泛使用。
與業內方案的對比
通常我們在選取RPC框架的過程中,主要考慮是否具備這幾個特點:跨語言、高可用、高性能、可視化、輕量級。我們認為只有都具備了這些特點的RPC框架,才能稱得上是「完美的」。下面我們來看下業內方案和HARPC在這些特點上的對比:
如上表所示,每種RPC方案的最終實現往往都是「顧此失彼」的,如:thrift在高可用上沒有支持,那麼服務如何容災?再看看dubbo,沒有支持跨語言(僅支持Java),那麼讓Python和C++的開發者「情何以堪」……於是,我們研發了自己的RPC框架,即HARPC,滿足了以上的所有特點,堪稱「完美」。
設計思路
HARPC的核心思想是高可用,那麼在保證高可用的基礎上,還需要具備跨語言、高性能、可視化及輕量級等特性。於是,我們在設計之初就選擇了基於thrift開發的方案,底層通信使用thrift來保證高性能和跨語言,然後HARPC來保證高可用和可視化,並且盡量保持簡單,來達到輕量級的需求。
整體結構
說明:
(1)四個部分:client(客戶端)、server(服務端)、registry(註冊中心,目前為zookeeper集群)、admin(服務管理系統)
(2)client和server又包括:your code(用戶代碼)、harpc(核心框架,包含Java、Python、C++三個版本)、thrift gen(thrift生成的源碼文件,用於底層通信)
針對不同的使用場景,我們提供了兩種方式,用戶只需要通過配置來區分。
1、註冊中心方式(推薦)
這是推薦的方式,支持服務端自動註冊、客戶端服務自動發現的功能。
說明:
(1)節點啟動時,地址信息註冊到zookeeper集群,並使用臨時節點;服務關閉時,節點自動刪除
(2)使用心跳檢測機制來進一步確保服務的可用性
(3)底層通信使用thrift
(4)可視化管理是基於zookeeper中的服務信息的
2、直連方式
適用於第三方的thrift服務或沒有集成HARPC的服務。
注意:該方式不支持自動發現新的服務節點。
說明:
(1)client啟動時,從配置文件中讀取服務的地址信息
(2)使用心跳檢測機制來進一步確保服務的可用性
(3)底層通信使用thrift
如何使用
HARPC目前支持使用Java、Python和C++三種開發語言,其他語言暫不支持。針對這三種語言,需要使用不同的集成方法,都非常簡單,具體參考開源地址。
總結
HARPC的開發是基於開源的Thrift,我們將HARPC開源也正是為了回饋開源社區。我們的下一步規劃是進一步完善自身,在性能和擴展性上進一步提升。另外,我們將積極解決來自用戶反饋的問題,歡迎大家使用!
源代碼:GitHub - baifendian/harpc: 基於Thrift的跨語言、高可用、高性能、輕量級的RPC框架。
推薦閱讀:
※約 1億條記錄, 每條1k左右,key =>value形式,用於前台查詢,選擇什麼作為存儲方案比較合適呢,要求效率比較高並且相對穩定可靠?
※AWS RDS Active-Active 雙活配置
※當OceanBase資料庫碰上挖掘機
※KV引擎到關係型資料庫存儲引擎之間的距離