gRPC 與 REST:差異、相似之處以及使用它們的原因

Mondo 娛樂 更新 2024-02-20

我們都知道,客戶端-伺服器架構將通訊分為兩部分:一部分承擔所有繁重的工作並提供服務,稱為伺服器,另一部分享受這些服務的人稱為客戶端。

在典型的客戶端-伺服器通訊中,客戶端只是向伺服器傳送資源或服務的請求,然後伺服器響應該請求。

對於客戶端-伺服器通訊,客戶端和伺服器需要具有能夠理解它們與之通訊的協議的庫。 協議是用於網際網絡通訊的一種語言或一組規則。 它們是傳輸機制,遵循一些通過 Internet 傳輸資料的準則。

客戶端通訊的第二個最重要的方面是客戶端和伺服器都可以識別的訊息格式。 此訊息格式遵循一種格式,如果不遵循它們就無法進行通訊。 訊息格式可以類似於 XML(特定表單)或 JSON 檔案(必須包含特定的鍵值對)。 關於這種型別的通訊,需要了解的另乙個重要方面是它基於請求和響應機制,這意味著伺服器僅在客戶端發起請求時進行通訊。

在 20 世紀初,一種稱為 SOAP 的流行客戶端-伺服器協議將 XML 訊息格式與硬編碼模式一起使用。 這種訊息格式的模式非常嚴格,並且嚴格按照指定的規則進行編碼,這導致了SOAP的逐漸放棄和REST的出現。 REST的出現是由於j**ascript的日益普及,這也直接導致了json檔案格式的流行。 它簡單易懂且方便。 它的訊息格式只有幾個鍵值對。 簡單來說,REST就是使用HTTP作為協議(傳輸機制)的JSON訊息的傳輸。 使用 REST,我們無需擔心如何開發訊息傳遞模式。

我們已經談到了REST的出現,讓我們仔細看看它的核心技術。 我們來看一下定義,REST是一種標準化的軟體架構風格,是業界廣泛使用的API。

1. REST簡單,有一套通訊架構標準。 使用 REST,我們不必每次都格式化訊息或資料。

2. REST是可擴充套件的。 如果您的服務變得更加複雜並需要更多功能,您可以輕鬆地改造伺服器端,而無需擔心伺服器的 REST 效能,並且可以完全隔離地新增新功能。

3. REST是無狀態的。 以前,每個請求都攜帶一些伺服器可以理解的資訊,伺服器的機制允許伺服器記住請求的資訊,但在REST架構中,會話狀態儲存在客戶端上,這使得伺服器效率更高,給伺服器帶來的工作量更少,從而實現更好的功能。

4. REST是高效能架構,支援快取。

想象一下,你正在為一家餐廳做乙個**。 您可以**獲取所有選單,食物分為三類:

1.開胃菜。 2.主菜。

3.飲料。 現在想**看看所有的飲料。 在REST架構中,我們可以輕鬆地對這些資訊進行分類,並向伺服器傳送GET請求,以獲取飲料的資料。 同樣,我們也可以做所有的CRUD(建立、讀取、更新、刪除),這使得REST適用於不需要超傳輸資料、不需要實時的大型專案。 REST 對於專注於高效資料傳輸的應用程式最有效。 快取是REST的另乙個功能,它對標準應用程式很有用,例如食品預訂應用程式,酒店預訂應用程式,部落格,論壇等。

REST功能強大,但也有一些缺點。

1.沒有雙向通訊,如果伺服器需要向客戶端傳送一些資料怎麼辦? 在 REST 體系結構中,這是不可能的。 當然,您可以使用一些技巧,但它們不實用。

2. 想象一下獲得實時分數**。 您將如何實現此更新分數的功能? 我們可以讓客戶端每 10 秒傳送一次請求,但這不是乙個好的做法。 它使伺服器過載,從而降低了伺服器響應的效率。

3. REST架構是純粹的請求和響應,不支援資料流(連續事件處理)。

4. REST無狀態屬性既有優點也有缺點,因為我們無法判斷REST架構上資料的狀態。

為了解決REST的第乙個問題,即雙向通訊的需求,WebSocket出現了,它允許伺服器發起通訊,但是WebSocket的問題在於它沒有格式,它只能傳送位元組,沒有任何限制。

websockets本身並沒有什麼問題,但真正的問題是,任何型別的通訊都需要乙個協議,並且每個協議都需要乙個可以與該協議通訊的客戶端庫(解析資料)。

如果要在基於 REST 的體系結構上建立 Python 應用程式,則需要乙個可以與伺服器通訊的 HTTP 客戶端。 在大多數情況下,客戶端庫是由第三方開發的。 使用第三方庫可能會暴露您自己的程式詳細資訊,不安全,並且整個應用程式將依賴第三方進行通訊。

對於 Web 應用程式,瀏覽器的作用類似於客戶端庫,但對於非 Web 專案,您需要第三方客戶端庫。 如果我們自己開發乙個應用程式,那就沒那麼容易了,你將有維護另乙個應用程式的負擔。

因此,為了解決 REST 的一些問題以及客戶端庫的問題,Google 在 2015 年發明了 GRPC。

對於 gRPC,Google 為幾乎所有流行語言維護了乙個客戶端庫。 它在後台使用 HTTP 2 協議,並使用 Protobuf 作為其訊息格式。 我們不需要擔心任何客戶端庫,因為 Google 正在為所有程式語言維護它。 單一的集中式客戶端庫是 grpc 的主要優勢之一。

grpc 的另乙個好處是它使用的訊息格式。 Protobuf 與語言無關,因此我們可以在 Python 中建立乙個客戶端,在 Go 中建立乙個伺服器,並且仍然能夠輕鬆通訊。

GRPC 本質上是乙個客戶端庫,也是一種可以在任何裝置上使用的協議。

GRPC 使用 Protobuf 進行通訊。 它將原型檔案序列化為二進位格式並將它們傳送到伺服器,在伺服器端將它們反序列化為原始格式。 同時,GRPC有不同的溝通形式。 可以將它們視為 gRPC 的函式。

單個請求:一種簡單的請求-響應通訊型別,客戶端傳送原始請求,伺服器在收到請求後等待一段時間以執行某些程序,然後返回一些響應。

伺服器流式處理:當發出單個請求時,伺服器會使用大量資料進行響應。 例如,當點選某個**時,大量與**相關的資料從伺服器端湧出。

客戶端流式處理:與伺服器流相反。 在這裡,客戶端一次向伺服器傳送大量資料。 例如,當您在 Internet 上共享大檔案或將影象或 ** 上傳到 Internet 時,就會發生這種情況。 客戶端不斷向伺服器端傳送資料。

雙向流動:在這種型別的通訊中,客戶端和伺服器傳送多條訊息。 聊天就是乙個很好的例子。

根據 gRPC 的功能,假設您要製作乙個聊天應用程式。 我們不會使用 REST API,因為它無法允許快速的雙向通訊流。 ,我們將使用 gRPC 流,這將提供比速度更多的好處。 首先,它的跨語言行為獨立於伺服器或其他客戶端編寫的程式語言。 在接受訊息格式之前,仍可以建立通訊。

因此,借助此功能,聊天應用程式的 Android 版本可以與 iOS 版本進行通訊,反之亦然。

有限的瀏覽器支援:gRPC 使用 HTTP 2,因此很難直接從瀏覽器呼叫 gRPC 服務。 有時需要設定**。

不可讀的表單:grpc 使用人類無法讀取的二進位格式。 在某些情況下,這是乙個缺點。

幼稚:gRPC 是在 2015 年開發的,所以與 REST 相比它仍然有點不成熟,有很多錯誤和問題需要解決。

入職成本:REST和GraphQL使用JSON,更易學。 大多數人會嘗試堅持使用它們,因為 protobuf 仍然是乙個新穎而複雜的話題,因此很難找到 grpc 專家。

資料格式:

REST使用的訊息格式主要是JSON(有時是XML),這種格式更易讀,更易於使用。 我們不必擔心REST中的模式。 而 grpc 使用協議緩衝區來序列化資料。 壓縮形式更輕,攜帶速度更快。 它採用二進位格式,因此資料在傳輸過程中被序列化和反序列化。

http 1.1 vs http 2:

REST API 通常使用 HTTP 11 作為其協議,而 grpc 使用 HTTP 2 作為其底層協議。 REST API 也可以使用 HTTP 2,但由於 REST 請求-響應機制,它仍然會受到限制。 GRPC 使用 HTTP 2 並利用 HTTP 2 支援進行客戶端響應和雙向通訊。 這是 grPC 優於 REST 的另乙個方面。 它可以像 http 1 一樣1 管理單向請求,或同時管理雙向請求,如 HTTP 2。

延遲:

grPC 的低延遲和高通訊速度使其成為連線由輕量級微服務架構組成的系統的理想選擇,從而實現更高效的訊息傳遞。 在大多數網路情況下,REST 延遲需要 25ms,而 grPC 延遲比 REST 小得多。

負載限制:

傳輸訊息時,REST 的最大負載限制為 45MB,而 grPC 沒有任何限制,這意味著傳輸訊息可以具有所需的大小。

安全:

在安全性方面,REST落後,因為它使用HTTP 11和JSON格式,易於解密和訪問。 另一方面,grPC 使用更安全的 HTTP 2,並使用二進位格式的 Protobuf,難以解密。

速度:

在這裡,grpc 再次獲勝,因為它比 REST 快 10 倍,出於同樣的原因,http 2 被用作協議,protobuf 被用作訊息格式。

**生成:

REST 不提供內建的生成功能,這意味著開發人員需要第三方應用程式來生成 API,而 gRPC 具有原生生成功能,這要歸功於其與多種程式語言相容的 ProtoBOF 編譯器。 這是另乙個好處,特別是對於微服務架構。

最後,我想說的是,REST仍然是最常用和最流行的架構,它不可能放棄。 REST有很多缺點,比如缺乏資料流、沒有雙向通訊、速度慢等,但它最適合我們在日常生活中看到的標準應用程式。 另一方面,grPC 還很年輕,很難學習,它提供了許多功能,例如客戶端和伺服器端的資料流量都很高,雙向資料流良好,快速緊湊,並且使用 HTTP 2。 在效能方面,grPC 最適合高工作負載應用程式,例如流媒體、歌曲流媒體、遊戲、檔案共享和聊天應用程式。

**10,000粉絲獎勵計畫

相關問題答案

    明朝與美國的驚人相似之處,是一面歷史的鏡子,也是對未來的隱憂

    中國歷史上有很多人懷念明朝,因為清朝是由少數民族統治的,明朝被認為是中國漢文化的最後乙個真正時代。本文將探討明朝與現代美國之間的驚人相似之處,從領導人的經歷到國家財富的分配,以及政治和軍事方面的共同點。儘管他出身貴族,但華盛頓無法擺脫貧困的命運。朱元璋的處境更加艱難,不僅出身貧寒,還經歷了自然災害,...

    歷史輪迴 北周與後周有著驚人的相似之處

    在中國漫長的年歷史中,總有一些驚人的相似之處,我們開玩笑地稱之為 歷史重演 然而,就像秦始皇英正建立的秦朝在春秋戰國時期結束了數百年的戰爭一樣,秦朝的存在是極其短暫的。相應地,隋陽涬溫帝建立的隋朝,結束了兩晉和南北兩朝數百年的紛爭,但也未能長期存在。而我們今天要討論的北周和後周,不僅國名相同,而且有...

    《無言的黑土》上線,與《漫》非常相似,能成為爆款嗎?

    由著名導演臧曦川執導的懸疑刑偵劇 無言黑土 正式開機,引發廣泛關注和熱議。這部劇匯集了陳建斌 胡軍 鄧家佳 石策等實力派演員展現了一幅錯綜複雜的刑偵畫面。作為年鵝工廠X劇場首部播出的懸疑刑偵劇,這帶來了新的期待,因為X劇場以製作高質量的懸疑刑偵劇而聞名。無言的黑土 的故事設定在上世紀年代的東北小城蘭...

    南宋與北宋歷史脈絡的延續與差異

    公元年,女真人千方百計戲弄宋朝後,終於決定一舉滅宋朝。康昭苟王倖存下來,成為南宋皇帝。但南宋真的是北宋的完全延續嗎?本文將從皇權與相對權力 文官與武將的地位 經濟 的方式三個方面分析宋朝的差異。南宋時期,封建皇權的味道越來越濃。劍言南渡後,南宋政權依舊不穩定,為了便宜,宋高宗打破了祖傳慣例,一切軍事...

    防爆叉車與普通叉車的區別及特點

    在物流和工業生產領域,叉車被廣泛用作重要的搬運裝置。但是,根據不同的工作環境和安全需求,叉車也有防爆型和普通型可供選擇。本文將詳細比較防爆叉車和普通叉車的區別,以幫助您的讀者更好地了解這兩類裝置的特點和使用場景。.定義和設計理念。普通叉車主要是為了滿足基本的搬運需求,追求高效 操作方便。它適用於各種...