16_Feign+Ribbon、Dubbo、gRPC的選型對比


Feign+Ribbon、Dubbo、gRPC的選型對比

RPC框架

手動寫一些構造HTTP請求的代碼去發送給評審員服務的服務器,去調用他的http接口,總不能這樣,RPC框架,舉報服務在代碼里就調用一個interface的接口,底層直接讓RPC框架發送請求到對應的服務器上去

儒猿技術窩,《21天互聯網Java工程師面試訓練營(分布式篇)》,視頻專欄,spring cloud的一些技術都一些講解


幾種RPC框架技術對比.png

spring cloud netflix

feign+ribbon,spring cloud netflix技術棧,RPC調用,用的就是feign框架+ribbon做負載均衡,暴露出來的服務接口,就是最最稀松平常的基於spring mvc寫的controller暴露出來的一些http接口,定義一個http的url地址

通過feign框架進行RPC調用:String result = serviceA.hello(name)【會把這一行代碼調用轉化成HTTP】,會按照http協議來組裝你的請求數據,數據格式都是按照http協議里的請求來做的,http請求還必須做一個序列化,序列化成二進制的字節流,通過底層的tcp連接發送過去

本質上服務A的部署是基於tomcat去進行部署的,tomcat會監聽你指定的端口號,當別人要發送http請求給你的時候,首先必須跟tomcat建立tcp網絡連接,發送http請求給tomcat,tomcat收到之后,解析出來這個http請求,交給你的spring mvc寫的controller來進行處理

【ribbon主要做負載均衡,選擇調用的服務實例】

【極為輕量級,沒有做很多其他的事情,性能中規中矩,一般的場景來用問題不大】

【demo比較簡單】


dubbo

dubbo自己使用的一套協議,自定義協議,也可以是別的協議,肯定不是http協議,去組裝請求數據,然后做一個序列化,二進制字節數組或者是字節流,都可以,通過底層的網絡連接把請求數據發送過去就可以了

ServiceA這個類,調用他里面的hello()這個方法,傳入name這個參數,獲取result這個返回值,然后通過網絡連接把響應數據按照自己的協議封裝,序列化,通過網絡連接發送給服務B就可以了

【很重的RPC框架,做 了很多的定制和優化,性能要好一些,功能強大很多,未來的主流和趨勢】

【demo比較重,按照它的方式去定義服務、發布服務、調用服務】


gRPC

【gRPC可以做到跨語言的通信可以做到跨語言的通信,通過服務定義和接口定義,gRPC框架可以做到生成類,生成代碼。多的環節是服務和接口可以定義文件,根據文件可以生成服務器端代碼】

【適合跨語言的場景,小眾的場景,不是未來比較普及和主流的框架】

【先寫服務和接口的定義文件,通過文件反向生成客戶端和服務端代碼,讓服務端和客戶端代碼跑起來,就可以實現RPC的調用】


spring cloud feign、dubbo、gRPC,分別百度一個hello world級別的demo,自己寫一下,感受和體驗一下就知道了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM