微服務RPC框架選美

2020-11-24 搜狐

原標題:微服務RPC框架選美

轉載本文需註明出處:EAII企業架構創新研究院(微信號:eaworld),違者必究。如需加入微信群參與微課堂、架構設計與討論直播請直接回復此公眾號:「加群 姓名 公司 職位 微信號」。

1、RPC 框架誰最美?

Hello,everybody!說到RPC框架,可能大家能想到一堆RPC開源框架,那麼在微服務平臺中,微服務間的服務調用,不可避免的會遇到一個問題,該選用哪一個RPC框架好呢?今天我們就請到三位RPC框架,來進行一場選美大賽,看看誰更適合微服務平臺中的服務間調用。

大家好,我是Dubbo!我是阿里開源的分布式服務框架,最大的特點是按照分層的方式來架構,使用這種方式可以使各個層之間解耦合(或者最大限度地鬆耦合)。

大家好,我是Motan!我是微博開源的一套高性能、易於使用的分布式遠程服務調用(RPC)框架。

大家好,我是gRPC!我是Google開源的一套面向移動和HTTP/2設計的,高性能的、通用的遠程調用框架。

2、RPC框架的形體爭美

  • 配置方式

    Motan:我支持 Xml 配置和 Spring註解配置。

    Dubbo:我支持 Xml 配置 、 註解配置、 屬性配置 、 API 配置 !

    gRPC:我,我只支持 API 配置 。

    主持人: Xml 配置是用 xml 文件來配置協議 、 服務 、 註冊中心等信息 ,這是 rpc 框架最常用的配置方式,也是最基本的配置方式; 屬性配置 是 用 properties 文件來配置協議 、 服務 、 註冊中心等信息 , 和Xml 配置使用上異曲同工 ; 注釋配置是聲明 Annotation 用來指定需要解析的包名 , 使用 spring-boot 啟動服務 ,這是很多 RPC 所追求的,簡化了我們代碼的書寫, Maton 也是最新版本才開始支持的; API 配置是 Dubbo 的 API 配置僅用於 OpenAPI, ESB, Test, Mock 等系統集成 , API 屬性與配置項一對一。

  • 服務通信協議

    Motan:我支持 Motan 協議,使用tcp 長連接模式,基於 netty通信。

    Dubbo:我支持 Dubbo 協議、 Rmi 協議、 Hessian 協議、 HTTP 協議、 WebService 協議、Dubbo Thrift 協議、Memcached 協議!

    gRPC:我,我支持 HTTP/2.0 協議,基於 Netty4.1.3 通信。

  • 序列化

    Motan:我默認使用對 java 更友好的 hessian2 進行序列化,還支持 Json 格式。

    Dubbo:Dubbo 協議預設序列化為hessian2 , rmi 協議預設為java , http 協議預設為 json!

    gRPC:哼!說到序列化,我是獨一無二的!我使用 ProtoBuf 來定義服務!

    主持人: gRPC 使用的 ProtoBuf 是由 Google 開發的一種數據序列化協議,用戶使用 .proto 文件定義服務,並支持定義多種類型的方法參數。 ProtoBuf 能夠將數據進行序列化,並廣泛應用在數據存儲、通信協議等方面。不過,當前 gRPC 僅支持 Protobuf ,且不支持在瀏覽器中使用。但由於 gRPC 的設計能夠支持支持多種數據格式,所以能夠很容易實現對其他數據格式(如 XML 、 JSON 等)的支持。這就是我強大的 IDL 特性!

  • ActiveWeight / LeastActive :低並發度優先, referer 的某時刻的 call 數越小優先級越高。

  • Random :隨機,按權重設置隨機概率。在一個截面上碰撞的概率高,但調用量越大分布越均勻,而且按概率使用權重後也比較均勻,有利於動態調整提供者權重。

  • RoundRobin :輪循,按公約後的權重設置輪循比率。存在慢的提供者累積請求問題,比如:第二臺機器很慢,但沒掛,當請求調到第二臺時就卡在那,久而久之,所有請求都卡在調到第二臺上。

  • LocalFirst :本地服務優先獲取策略。

  • Consistent :一致性 Hash ,相同參數的請求總是發到同一提供者。當某一臺提供者掛時,原本發往該提供者的請求,基於虛擬節點,平攤到其它提供者,不會引起劇烈變動。

  • ConfigurableWeight :權重可配置的負載均衡策略。

  • 容錯

    Motan:我支持 Failover 失效切換、Failfast 快速失敗。

    Dubbo:我支持 Failover 、 Failfast 、Failsafe 、 Failback 、 Forking、 Broadcast 。

    gRPC:我,我 具有 Failover 失效切換的容錯策略。

    主持人:依舊由我給大家介紹下各種容錯機制 !

  • Failover :失敗自動切換,當出現失敗,重試其它伺服器。通常用於讀操作,但重試會帶來更長延遲。

  • Failfast :快速失敗,只發起一次調用,失敗立即報錯。通常用於非冪等性的寫操作,比如新增記錄。

  • Failsafe :失敗安全,出現異常時,直接忽略。通常用於寫入審計日誌等操作。

  • Failback :失敗自動恢復,後臺記錄失敗請求,定時重發。通常用於消息通知操作。

  • Forking :並行調用多個伺服器,只要一個成功即返回。通常用於實時性要求較高的讀操作,但需要浪費更多服務資源。

  • Broadcast :廣播調用所有提供者,逐個調用,任意一臺報錯則報錯。通常用於通知所有提供者更新緩存或日誌等本地資源信息。

  • 註冊中心與服務發現

    Motan:我支持使用 Consul 作為註冊中心、使用 Zookeeper 作為註冊中心、點對點直連。

    Dubbo:我支持使用 Zookeeper 作為註冊中心、使用 Redis 註冊中心、使用 Multicast 註冊中心、使用 Simple 註冊中心。

    gRPC:我,我只能讓用戶自己擴展註冊中心 。

  • 性能

    Motan:在高並發、高負載場景的場景下,我的 平均 TPS 和平均響應時間依舊保持良好,我具備在高壓力場景下的高可用能力。

    Dubbo:Dubbo2.0 相比較 Dubbo1.0(默認使用的都是 hessian2序列化)性能均有提升。如對性能有更高要求可以使用dubbo 序列化,由其是在處理複雜對象時。 Dubbo 的設計目的是為了滿足高並發小數據量的 rpc 調用,在大數據量下的性能表現並不好,建議使用 rmi 或 http 協議。

    gRPC:我採用的是 ProtoBuf 序列化協議 , ProtoBuf 與其他協議的性能對比 ,非常明顯 的ProtoBuf 要遠遠優於其他 。

    主持人:三者的性能測試在各自官方說明上都可以看到詳細的性能測試報告 , 這裡我們 並不做 詳細說明 。

3、RPC框架的才藝角逐

Motan :通過 spring 配置方式集成,無需額外編寫代碼即可為服務提供分布式調用能力完全不需要任何 xml 配置文件, Dubbo 的註解配置還需要配合 xml 文件的哦 。

Dubbo :無論從支持的註冊中心還是容錯機制上看,都是我 Dubbo 的優勢更大!

Motan : 明顯支持負載均衡的模式我更多 。 我 擁有自定義動態負載均衡、跨機房流量調整等高級服務調度能力。

Dubbo :成熟度更高的我在健壯性和伸縮性上還能比你們差麼?讓我來一一例舉。 說到健壯性 ,監控中心宕掉不影響使用,只是丟失部分採樣數據;資料庫宕掉後,註冊中心仍能通過緩存提供服務列表查詢,但不能註冊新服務;註冊中心對等集群,任意一臺宕掉後,將自動切換到另一臺;註冊中心全部宕掉後,服務提供者和服務消費者仍能通過本地緩存通訊;服務提供者無狀態,任意一臺宕掉後,不影響使用;服務提供者全部宕掉後,服務消費者應用將無法使用,並無限次重連等待服務提供者恢復。至於伸縮性,註冊中心為對等集群,可動態增加機器部署實例,所有客戶端將自動發現新的註冊中心;服務提供者無狀態,可動態增加機器部署實例,註冊中心將推送新的服務提供者信息給消費者。

Motan :對,我在功能上或許不是那麼全面,但我更注重簡單、易用以及在高並發高可用場景的使用。服務發現靈活支持多種配置管理組件,基於高並發高負載場景的高可用策略優化,良好的 SPI(Service Provider Interface) 擴展,詳細的調用統計,靈活支持多種 RPC 傳輸協議。

Dubbo :說了這麼多你能支持泛型調用麼?我能! Dubbo 提供 GenericService 泛型調用接口 , 讓用戶的調用更加靈活 。

Motan : 我的 工程依賴只涉及核心 5 個模塊,且可以按需依賴,不要的說捨棄就捨棄。看看你那麼一堆堆的工程,嘖嘖嘖 ……

gRPC : 哼 ! 本寶寶支持 服務的跨語言調用,目前所支持語言類型有 C++ 、 JAVA 、 GO 、 Python 、 Ruby 、 Node.js 、 Android 、 C# 、 PHP 、 Objective-C ,你們可以麼?

Motan : 額 ,是啊,我們不能,可是你有服務發現相關機制麼?

Dubbo :而且你的負載均衡和容錯也太弱了 …..

gRPC : 嚶嚶嚶 ……

4、RPC框架的終極PK

Dubbo作為阿里開源的分布式服務框架,實現高性能的 RPC 調用同時提供了豐富的管理功能,是一款應用廣泛的優秀的 RPC 框架,但現在較少維護更新。如果你需要一款高成熟度的服務治理型的RPC框架,不如選我!

Motan作為微博的 Motan RPC 傾向於服務治理型,與 Dubbo 系列相比在功能上或許不是那麼全,擴展實現也沒有那麼多,但如果你需要一款高性能輕量級易上手的RPC框架,記得選我!

gRPC作為google2015年才開源的跨語言調用型的RPC框架,側重於服務的跨語言調用,能夠支持大部分的語言進行語言無關的調用,非常適合多語言調用場景。如果你需要支持多語言,跨語言調用的RPC框架,選我吧!

看了以上三位RPC框架的選美比賽不知道大家是否都有了自己的選擇。當然,現如今的市場中開源的RPC遠遠不止這三個,到底哪個才是你現在所需要的,這裡也只是個參考,也是我們在微服務中RPC框架選擇的一個方向,最終的選擇還是要「因地制宜」。

作為踏入微服務行列的普元,我們的微服務平臺採用了 Maton RPC 框架,高並發高負載 、輕量易維護 以及無需任何額外代碼和配置的 Spring 註解配置,都是我們所需要的。當然我們也並不是完全滿足於當前的Maton 功能,不過 Motan 良好的擴展機制,也給我們提供了便利,我們擴展了 ETCD 註冊中心以及我們自己的日誌記錄方式,當然還有更多的貼合我們實際應用的改造。相信在每個正在尋找微服務交互的 RPC 框架的你們,經過反覆的對比研究,也能找到你們心中的那個唯一!

關於作者

葉婉婷

現任普元信息SOA產品部高級軟體工程師,為普元新一代數位化企業雲平臺開發團隊一員。在過去的兩年參與流程平臺項目,主要負責Eclipse插件開發及自動化測試平臺開發。在數位化企業雲平臺項目中參與了業務平臺領域系統的開發。愛好:旅遊、電影、美食、遊泳。

關於EAII

EAII(Enterprise Architecture Innovation Institute)企業架構創新研究院,致力於軟體架構創新與實踐,加速企業數位化轉型。

eaworld項目(微信號:eaworld,長按二維碼關注)

eaworld是EAII的官方微信帳號。返回搜狐,查看更多

責任編輯:

相關焦點

  • 【行業資訊】SOFARPC v5.7.4 發布,螞蟻金服開源 Java RPC 框架
    SOFARPC 是一個高可擴展性、高性能、生產級的 Java RPC 框架。在螞蟻金服 SOFARPC 已經經歷了十多年及五代版本的發展。SOFARPC 致力於簡化應用之間的 RPC 調用,為應用提供方便透明、穩定高效的點對點遠程服務調用方案。
  • 微服務實踐之路--RPC
    在選型一文中說到我們選定的RPC框架是Apache Thrift,它的用法是在Main方法中重啟服務,在Client端連接服務去調用。而我的想法是要跟Dubblo、HSF的用法一樣,因為很多人都熟悉這兩個框架的用法,特別是我們好幾個項目都是基於EDAS開發的,而且世面上用Dubbo的公司也很多。
  • gRPC首頁、文檔和下載 - RPC 框架 - OSCHINA - 中文開源技術交流...
    gRPC 是一個高性能、開源和通用的 RPC 框架目前提供 C、Java 和 Go 語言版本,分別是:grpc, grpc-java, grpc-go. 其中 C 版本支持 C, C++, Node.js, Python, Ruby, Objective-C, PHP 和 C# 支持.
  • 騰訊開源微服務架構 Tars,高性能 RPC 開發框架
    騰訊微服務架構 Tars 於今日正式開源。
  • 從零開始,徒手擼一個簡單的 RPC 框架,輕鬆搞定!
    所以就想著試試自己實現一個簡單的RPC框架,即鞏固了基礎的知識,也能更加深入的了解RPC原理。當然一個完整的RPC框架包含了許多的功能,例如服務的發現與治理,網關等等。本篇只是簡單的實現了一個調用的過程。傳參出參分析一個簡單請求可以抽象為兩步
  • 開源微服務框架,你知道幾個?
    其包含一整套開發框架與管理平臺,兼顧多語言、易用性、高性能與服務治理,理念是讓開發更聚焦業務邏輯,讓運營更高效。HelidonHelidon 是甲骨文開源的一個微服務框架,編寫的微服務運行在由 Netty
  • rpc分布式服務 - CSDN
    第一章聊了【「為什麼要進行服務化,服務化究竟解決什麼問題」】第二章聊了【「微服務的服務粒度選型」】今天開始聊一些微服務的實踐,第一塊,RPC框架的原理及實踐,為什麼說要搞定微服務架構,先搞定RPC框架呢?
  • rpc、json Rpc和http區別
    帶索引數組參數的rpc調用--> {"jsonrpc": "2.0", "method": "subtract", "params": [42, 23], "id": 1}<-- {"jsonrpc": "2.0", "result": 19, "id": 1} 2.
  • 搜狗開源srpc:自研高性能通用RPC框架
    9月15日,作為Workflow最重要的生態項目——srpc,一個基於其打造的輕量級RPC框架,也在GitHub上開源了。GitHub搜索「sogou srpc」即可找到該項目。一個性能更好的thrift/brpcsrpc與thrift/brpc是協議與IDL均互通的。
  • gRPC 通信框架實現存在數據洩露等安全問題
    gRPC 是一個高性能、開源和通用的 RPC 框架,面向移動和 HTTP/2 設計。目前提供 C、Java 和 Go 語言版本,分別是:grpc, grpc-java, grpc-go.當前企業正在慢慢改用微服務架構來構建面向未來的應用程式,微服務使企業能夠有效管理基礎架構,輕鬆部署更新或改進,並幫助IT團隊的創新和學習。它還可以幫助企業能夠設計出可以輕鬆按需擴展的應用程式,此外,隨著企業轉換架構(從傳統的單片式服務過渡到微服務),出現了在微服務之間進行有效通信的需求。
  • 後端工程師,必須搞懂的 RPC 框架
    去年我面試一位高級後端工程師的時候,看他簡歷上寫著「熟練掌握 RPC 框架」,所以我就試探著問了他幾個原理方面的問題,比如,「大概說下 RPC 框架的核心原理」「、描述下序列化部分的邏輯」。但聊了半天,我發現他其實並不熟,他的回答基本都是在告訴我怎麼用,以及怎麼更好地用好這些框架。
  • 螞蟻金服高性能 Java RPC 框架 SOFARPC 5.4.4 發布
    新特性改進修復SOFARPC 是一個高可擴展性、高性能、生產級的 Java RPC 框架。在螞蟻金服 SOFARPC 已經經歷了十多年及五代版本的發展。SOFARPC 致力於簡化應用之間的 RPC 調用,為應用提供方便透明、穩定高效的點對點遠程服務調用方案。
  • 微服務架構技術棧
    下圖是我近期工作總結和參考的一個微服務技術體系,我想同時分享給一線架構師或者工程師參考,其中粉紅色標註的模塊是和微服務關係最密切的模塊,大家在做技術選型時,可以同時對照這個體系。.四、服務框架選型服務框架是一個比較成熟的領域,有太多可選項。
  • 從0 到 1:全面理解 RPC 遠程調用!
    SimpleXMLRPCServer 是基於 xml-rpc 實現的遠程調用,上面我們也提到 除了 xml-rpc 之外,還有 json-rpc 協議。答案是很多,很多web框架其自身都自己實現了json-rpc,但我們要獨立這些框架之外,要尋求一種較為乾淨的解決方案,我查找到的選擇有兩種第一種是 jsonrpclibpip install jsonrpclib -i https://pypi.douban.com/simple第二種是 python-jsonrpcpip install
  • 微服務之RPC簡述
    比如說兩臺伺服器A,B,一個應用部署在A伺服器上,想要調用B伺服器上應用提供的函數/方法,由於不在一個內存空間,不能直接調用,就需要通過網絡來表達調用的語義和傳達調用的數據,而這種方式就是rpcRPC 的主要功能目標是讓構建分布式計算(應用)更容易,在提供強大的遠程調用能力時不損失本地調用的語義簡潔性。
  • 老闆要搞微服務,只能硬著頭皮上了...
    如果你正準備做微服務轉型,或者在微服務化過程中遇到了困難。此文很可能會幫到你!正文開始前,為了讓各位讀友更好的理解本文內容,先花兩分鐘了解一下微服務的優缺點。聊起微服務,很多朋友都了解微服務帶來的好處,羅列幾點: 模塊化,降低耦合。將單體應用按業務模塊拆分成多個服務,如果某個功能需要改動,大多數情況,我們只需要弄清楚並改動對應的服務即可。
  • 基於容器雲的微服務架構實踐
    【編者按】微服務架構的誕生和容器技術的流行,幾乎是同時發生的,這並非偶然,而是網際網路時代倒逼傳統技術和架構而產生的變革,而以Docker為代表的容器技術則為微服務理念提供了匹配的實現機制,本文作者從什麼是微服務切入,詳細的介紹了微服務架構的優勢,最後從自身實踐出發,給出了微服務架構的雲端實踐。
  • Golang 語言使用標準庫 net/rpc/jsonrpc 包跨語言遠程調用
    encoding/gob 包編解碼傳輸數據,gob 編解碼方式僅適用於 Go 應用,如果需要跨語言遠程調用,可以指定支持跨語言的其他編解碼方式,比如 protobuf,或使用 net/rpc 的子包 net/rpc/jsonrpc,它支持JSON-RPC 1.0,通過 json 格式傳輸數據。
  • 2021升級版微服務教程—為什麼會有微服務?什麼是SpringCloud?
    以上就是分布式的架構5.服務化於是公司進入轟轟烈烈的服務化時代,但是有幾個問題需要被解決,如下image-20200317151634243 每一個模塊都是一個獨立的項目 都可以獨立啟動 這樣的做法 就叫做服務化 模塊變成項目之後我們稱之為服務 首頁模塊---》首頁服務這就是服務化 這就是微服務,微服務是:特殊的分布式架構【服務化
  • 微服務這麼流行,你理解嘛?
    2、微服務和微服務架構的區別是什麼?3、微服務技術有什麼?4、微服務的優缺點是什麼?5、為什麼選擇Springcloud作為微服務架構?就是我們今天所說的微服務架構。二、什麼是微服務由於業界還沒有對微服務的概念有一個統一的解釋,但是你可以這樣去理解,微服務其實就是一種思想,這個思想是:考慮如何把一個複雜的項目拆分成一個個獨立的小項目。就好比是電腦中的進程,拆分成一個個小的線程一樣。