使用gRPC微服務(wù)的內(nèi)部通信優(yōu)化
使用gRPC做微服務(wù)的內(nèi)部通信
gRPC是一個由Google開源的遠(yuǎn)程服務(wù)調(diào)用框架,具有多路復(fù)用和雙向流式通信的特性。
大家好,在本文中將為大家介紹為什么我們應(yīng)該使用gRPC代替RESTful或JSON,來開發(fā)微服務(wù)內(nèi)部的通信接口。
什么是gRPC?
gRPC是一個高性能的、開源的、普遍通用的RPC框架。簡單地說,它能夠幫助我們建立透明的服務(wù)端和客戶端通信系統(tǒng)。Google開發(fā)了GRPC并且將其開源。 通過它,一個客戶端消費者服務(wù)可以像調(diào)用本地方法一樣,調(diào)用另一臺主機上面的服務(wù)端方法。
gRPC本質(zhì)上仍然遵循常規(guī)的Remote Procedure Call (RPC) 技術(shù),但是在實現(xiàn)上使用了HTTP2.0、協(xié)議緩沖區(qū)等更現(xiàn)代化的技術(shù)方案,從而最大程度上確保服務(wù)端和客戶端的互操作性及性能上的提升。
服務(wù)之間如何使用gRPC通信?
當(dāng)客戶端向服務(wù)端發(fā)起請求的時候,客戶端gRPC類庫使用協(xié)議緩沖區(qū)并且封裝遠(yuǎn)程過程調(diào)用(RPC),并且將其通過HTTP2發(fā)送到服務(wù)端。服務(wù)端將其拆封,并且使用協(xié)議緩沖區(qū)調(diào)用對應(yīng)的程序。響應(yīng)數(shù)據(jù)的過程和發(fā)送請求的過程是類似的,只不過一個是從客戶端到服務(wù)端,一個是從服務(wù)端到客戶端。
從開發(fā)的角度,在服務(wù)端和客戶端使用gRPC最大的好處在于:你的服務(wù)端的代碼和客戶端的代碼不需要擔(dān)心它會影響你解析JSON或者其他類似的文本格式消息。gRPC雖然接收到的是二進(jìn)制格式,但會并將其反序列化為對象。同樣的我們可以通過IDL來定義服務(wù)接口,IDL是非常強大的一個特性,幫助我們處理多個微服務(wù)之間的互操作。
為什么gRPC是高效的?
- 它基于HTTP2構(gòu)建,既支持傳統(tǒng)的請求-響應(yīng)模型,也支持雙向流模型。
- 可以將JSON數(shù)據(jù)轉(zhuǎn)換到協(xié)議緩沖區(qū)
- 多路復(fù)用
- 雙向流模型
- 網(wǎng)絡(luò)傳輸?shù)氖嵌M(jìn)制數(shù)據(jù),相對于JSON等文本數(shù)據(jù)更加輕量級。
- 多語言支持
什么時候使用gRPC?
最初,幾乎所有的微服務(wù)之間都是通過JSON數(shù)據(jù)接口通信的,一個服務(wù)可能調(diào)用空一個服務(wù)或者多個服務(wù),被調(diào)用的服務(wù)可能還調(diào)用其他服務(wù)。如果其中任何一個服務(wù)運行緩慢,將影響整個系統(tǒng)的運行速度,因為RESTful(JSON) API不支持HTTP2的多路復(fù)用和雙向流模型。傳統(tǒng)的RESTful接口使用JSON、XML或者其他的一些格式作為數(shù)據(jù)載體,使得服務(wù)運行緩慢,內(nèi)存占用較高、并且傳輸過程沒有壓縮。
gRPC解決所有的這些問題,但是它僅僅用于系統(tǒng)應(yīng)用微服務(wù)之間的通信的情況,系統(tǒng)的對外服務(wù)接口仍然使用HTTP-JSON接口。這樣保證對外部用戶的開發(fā)技術(shù)棧沒有任何影響。
總結(jié) Conclusion
與傳統(tǒng)REST API相比,使用gRPC創(chuàng)建的API可以為你的應(yīng)用帶來令人難以置信的性能改進(jìn)。
以上就是使用gRPC微服務(wù)的內(nèi)部通信優(yōu)化的詳細(xì)內(nèi)容,更多關(guān)于gRPC微服務(wù)內(nèi)部通信的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
jvm中指定時區(qū)信息user.timezone問題及解決方式
同一份程序使用時間LocalDateTime類型,在國內(nèi)和國外部署后,返回的時間信息前端使用出問題,這篇文章主要介紹了jvm中指定時區(qū)信息user.timezone問題及解決方法,需要的朋友可以參考下2023-02-02Java NIO三大組件與ByteBuffer深入理解及使用
這篇文章主要介紹了Java NIO三大組件與ByteBuffer,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-01-01數(shù)據(jù)結(jié)構(gòu)與算法之并查集(不相交集合)
并查集是一種挺高效的數(shù)據(jù)結(jié)構(gòu)。實現(xiàn)簡單,只是所有元素統(tǒng)一遵從一個規(guī)律所以讓辦事情的效率高效起來。這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu)與算法——并查集(不相交集合),需要的朋友可以參考下2019-11-11Java 如何將前端傳來的數(shù)字轉(zhuǎn)化為日期
這篇文章主要介紹了Java 如何將前端傳來的數(shù)字轉(zhuǎn)化為日期,本文通過示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06