偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

微服務(wù)架構(gòu)的通信設(shè)計(jì)模式

開(kāi)發(fā) 架構(gòu)
今天我們來(lái)學(xué)習(xí)一下微服務(wù)的通信設(shè)計(jì)模式,通信是保證服務(wù)請(qǐng)求核心要素,選擇合適的一個(gè)通信協(xié)議對(duì)系統(tǒng)來(lái)說(shuō)可以達(dá)到事半功倍。

今天我們來(lái)學(xué)習(xí)一下微服務(wù)的通信設(shè)計(jì)模式,通信是保證服務(wù)請(qǐng)求核心要素,選擇合適的一個(gè)通信協(xié)議對(duì)系統(tǒng)來(lái)說(shuō)可以達(dá)到事半功倍。

一、RPC調(diào)用模式

目前各種微服務(wù)通信社區(qū)上,很多種支持RPC模式。有同步請(qǐng)求/響應(yīng)通信機(jī)制,例如基于 HTTP 的 REST 或 GraphQL,或 gRPC?;蛘呖梢允褂卯惒降摹⒒谙⒌耐ㄐ艡C(jī)制,例如 AMQP(高級(jí)消息隊(duì)列協(xié)議)或 STOMP(簡(jiǎn)單/流式面向文本的消息傳遞協(xié)議)。此外,還有許多不同的消息格式。這些格式可以是可讀的,例如 JSON 和 XML。他們還可以使用更高效的二進(jìn)制格式,例如 Avro 或 Protobuf。

1、RPC 選擇因素

在選擇 RPC 機(jī)制之前,考慮一下服務(wù)與其客戶(hù)端之間的交互方式是很有必要的??蛻?hù)服務(wù)交互有兩個(gè)維度。

(1)一對(duì)一還是一對(duì)多

  • 一對(duì)一:每個(gè)客戶(hù)端請(qǐng)求都由一個(gè)服務(wù)處理。
  • 一對(duì)多:每個(gè)客戶(hù)端請(qǐng)求都由多個(gè)服務(wù)處理。

(2)同步的還是異步的

  • 同步:客戶(hù)端在等待服務(wù)響應(yīng)時(shí)可能會(huì)阻塞。
  • 異步:客戶(hù)端不會(huì)阻塞,并且響應(yīng)(如果有)并不是立即發(fā)送。

2、一對(duì)一互動(dòng)

  1. 同步請(qǐng)求/響應(yīng):服務(wù)客戶(hù)端請(qǐng)求服務(wù)并等待響應(yīng)。服務(wù)的緊密耦合是這種交互方式的結(jié)果。
  2. 異步請(qǐng)求/響應(yīng):服務(wù)客戶(hù)端向服務(wù)發(fā)送請(qǐng)求,服務(wù)異步回復(fù)。
  3. 單向通知:客戶(hù)端向服務(wù)發(fā)送請(qǐng)求,但不期待響應(yīng)。

3、一對(duì)多交互

  1. 異步發(fā)布/訂閱:客戶(hù)端發(fā)布通知消息,由一個(gè)或多個(gè)訂閱服務(wù)使用。
  2. 異步發(fā)布/異步響應(yīng):在這種情況下,客戶(hù)端發(fā)布一條消息,然后等待來(lái)自感興趣服務(wù)的響應(yīng)。

4、消息格式

RPC 本質(zhì)上是一種消息交換。其中一個(gè)重要的設(shè)計(jì)是消息包含數(shù)據(jù)的格式。消息格式的選擇會(huì)影響 RPC 的效率、API 的可用性及其可演化性。

消息格式有兩種主要類(lèi)型:文本二進(jìn)制。

(1)基于文本的消息格式

JSON 和 XML 是最流行的基于文本的格式。

基于文本的消息格式的優(yōu)點(diǎn)

  • 可讀性高,可自我描述。

基于文本的消息格式的缺點(diǎn)

  • 消息很冗長(zhǎng)。
  • 除了它們的值之外,沒(méi)有必要的屬性及其他標(biāo)簽都會(huì)包含其中。
  • 解析文本性能開(kāi)銷(xiāo)很大。

(2)二進(jìn)制消息格式

Thrift、Protocol Buffers (Protobuf) 和 Avro 是最流行的二進(jìn)制格式。

二進(jìn)制消息格式的優(yōu)點(diǎn)

  • 元數(shù)據(jù)很少,因此有效負(fù)載很小。
  • 比基于文本的消息解析要快。

二進(jìn)制消息格式的缺點(diǎn)

  • 可讀性差,不可自我描述

二、遠(yuǎn)程過(guò)程調(diào)用模式

當(dāng)客戶(hù)端請(qǐng)求服務(wù)時(shí),服務(wù)會(huì)處理請(qǐng)求并發(fā)回響應(yīng)。雖然一些客戶(hù)端可能會(huì)在等待響應(yīng)時(shí)阻塞,但其他客戶(hù)端可能具有反應(yīng)性、非阻塞架構(gòu)。

代理接口通常封裝底層通信協(xié)議。

有多種通信協(xié)議可供選擇,例如 REST、gRPC 和 GraphQL 等。

三、使用同步模式進(jìn)行通信

1、REST(代表性狀態(tài)轉(zhuǎn)移)

REST 基于資源的概念,它表示單個(gè)業(yè)務(wù)對(duì)象。HTTP(超文本傳輸協(xié)議)用于實(shí)現(xiàn) REST。REST 使用 HTTP 來(lái)操作由 URL 引用的資源。

2、HTTP 調(diào)用方式

  1. GET: GET 方法向特定的資源發(fā)出請(qǐng)求。GET方法不應(yīng)當(dāng)被用于產(chǎn)生“副作用”的操作中,例如在Web Application中,其中一個(gè)原因是GET可能會(huì)被網(wǎng)絡(luò)蜘蛛等隨意訪(fǎng)問(wèn)
  2. HEAD: HEAD 方法向服務(wù)器索與GET請(qǐng)求相一致的響應(yīng),只不過(guò)響應(yīng)體將不會(huì)被返回。這一方法可以在不必傳輸整個(gè)響應(yīng)內(nèi)容的情況下,就可以獲取包含在響應(yīng)小消息頭中的元信息。
  3. POST: POST請(qǐng)求數(shù)據(jù)被包含在請(qǐng)求體中。POST請(qǐng)求可能會(huì)導(dǎo)致新的資源的建立和/或已有資源的修改。
  4. PUT: PUT 方法用請(qǐng)求有效負(fù)載替換目標(biāo)資源的所有當(dāng)前表示。
  5. DELETE: DELETE 方法請(qǐng)求服務(wù)器刪除Request-URL所標(biāo)識(shí)的資源
  6. CONNECT: CONNECT 方法建立由目標(biāo)資源標(biāo)識(shí)的服務(wù)器的隧道。
  7. OPTIONS: OPTIONS 方法描述了目標(biāo)資源的通信選項(xiàng)。
  8. TRACE: TRACE 方法沿到目標(biāo)資源的路徑執(zhí)行消息環(huán)回測(cè)試。
  9. PATCH: PATCH 方法將部分修改應(yīng)用于資源。

3、指定 REST API

API 必須使用 IDL(接口定義語(yǔ)言)定義。最流行的 REST IDL 之一是開(kāi)放 API 規(guī)范,它是從Swagger開(kāi)源項(xiàng)目演變而來(lái)的。

4、挑戰(zhàn)一:在單個(gè)請(qǐng)求中獲取多個(gè)資源

由于 REST API 通常基于業(yè)務(wù)對(duì)象,因此在一個(gè)請(qǐng)求中請(qǐng)求多個(gè)相關(guān)對(duì)象是設(shè)計(jì) REST API 時(shí)的常見(jiàn)難題之一??蛻?hù)端必須至少對(duì)相關(guān)對(duì)象發(fā)出多次請(qǐng)求。

使用查詢(xún)參數(shù),API 可以使客戶(hù)端在獲取資源時(shí)檢索相關(guān)資源。由于這種方法缺乏可擴(kuò)展性,GraphQL和Netflix Falcor等替代 API 技術(shù)變得越來(lái)越受歡迎。

5、挑戰(zhàn)二:映射操作到 HTTP 動(dòng)詞

另一個(gè)常見(jiàn)的 REST API 設(shè)計(jì)問(wèn)題是將要對(duì)業(yè)務(wù)對(duì)象執(zhí)行的操作映射到 HTTP 請(qǐng)求上。REST API 使用 PUT 來(lái)更新,但是有多種方法可以操作訂單,包括取消訂單、修改訂單等。一種解決方案是定義一個(gè)子資源,如 /orders/{orderId}/cancel 或 /orders/{orderId}/revise 以更新資源的特定方面或在 URL 查詢(xún)參數(shù)中指定動(dòng)詞。但這些解決方案并不是真正的 RESTful。

由于這個(gè)問(wèn)題,REST 的替代品(例如gRPC)越來(lái)越受歡迎。

6、REST 的優(yōu)勢(shì)

  1. 目前很多微服務(wù)框架都支持REST,實(shí)現(xiàn)起來(lái)相對(duì)容易
  2. Postman 等插件可以輕松地在瀏覽器中測(cè)試 HTTP API。
  3. 它支持直接請(qǐng)求/響應(yīng)通信。

7、REST 的缺點(diǎn)

  1. 僅支持請(qǐng)求/響應(yīng)通信。
  2. 由于要求客戶(hù)端和服務(wù)器同時(shí)在線(xiàn),可用性降低。
  3. 客戶(hù)端必須使用服務(wù)發(fā)現(xiàn)來(lái)發(fā)現(xiàn)服務(wù)實(shí)例的 URL。
  4. 在一個(gè)請(qǐng)求中獲取多個(gè)資源可能具有挑戰(zhàn)性。
  5. 將多個(gè)更新操作映射到 HTTP 動(dòng)詞可能具有挑戰(zhàn)性。

四、gRPC

由于 HTTP 僅提供一組有限的請(qǐng)求方式,因此設(shè)計(jì)支持多個(gè)更新操作的 REST API 可能具有挑戰(zhàn)性。

谷歌推出的跨語(yǔ)言客戶(hù)端和服務(wù)器的框架 gRPC 可以解決這個(gè)問(wèn)題。使用基于協(xié)議緩沖區(qū)的 IDL 定義 gRPC API,這是 Google 用于序列化結(jié)構(gòu)化數(shù)據(jù)的語(yǔ)言設(shè)計(jì)機(jī)制。是一種同步通信機(jī)制。使用 HTTP/2,客戶(hù)端和服務(wù)器以協(xié)議緩沖區(qū)格式交換二進(jìn)制消息。

1、gRPC 的優(yōu)勢(shì)

  1. 易于設(shè)計(jì)具有豐富更新操作集的 API 。
  2. 消息格式緊湊且高效。
  3. 雙向流使 RPC 和消息傳遞成為可能。
  4. 它支持以多種語(yǔ)言編寫(xiě)的客戶(hù)端和服務(wù)的互操作性。

2、gRPC 的缺點(diǎn)

  1. JS 客戶(hù)端必須做更多的工作來(lái)使用基于 gRPC 的 API,而不是基于 REST/JSON 的 API。

五、GraphQL

GraphQL 解決了使用單個(gè)請(qǐng)求獲取多個(gè)資源的問(wèn)題。GraphQL 主要用于從客戶(hù)端應(yīng)用程序查詢(xún)數(shù)據(jù)庫(kù)。在后端,GraphQL 向 API 指定如何將數(shù)據(jù)呈現(xiàn)給客戶(hù)端。GraphQL 重新定義了開(kāi)發(fā)人員使用 API 的方式,提供更大的靈活性和更快的上線(xiàn)速度;改進(jìn)了客戶(hù)端-服務(wù)器交互,使前者能夠進(jìn)行精確的數(shù)據(jù)請(qǐng)求,并只獲得他們需要的數(shù)據(jù)。

GraphQL 服務(wù)器為客戶(hù)端提供模式:可以請(qǐng)求的數(shù)據(jù)模型。

1、GraphQL 的優(yōu)勢(shì)

  1. 客戶(hù)端可以準(zhǔn)確地從服務(wù)器指定他們需要什么,服務(wù)器將以可預(yù)測(cè)的方式反饋該數(shù)據(jù)。
  2. API 使用者確切地知道哪些數(shù)據(jù)可用以及它是什么形式,因?yàn)樗菑?qiáng)類(lèi)型的。

2、GraphQL 的缺點(diǎn)

  1. 無(wú)論查詢(xún)成功與否,它總是返回一個(gè) HTTP 狀態(tài)碼 200。
  2. 沒(méi)有內(nèi)置緩存支持
  3. 它比 REST 更復(fù)雜

六、使用異步消息傳遞模式進(jìn)行通信

使用消息傳遞時(shí),服務(wù)會(huì)異步交換消息?;谙⒌膽?yīng)用程序通常使用像 RabbitMQ 這樣的消息代理,充當(dāng)服務(wù)之間的中介。服務(wù)客戶(hù)端通過(guò)向服務(wù)發(fā)送消息來(lái)向服務(wù)發(fā)出請(qǐng)求。如果期望響應(yīng),服務(wù)實(shí)例將向客戶(hù)端發(fā)送單獨(dú)的消息。由于通信是異步的,客戶(hù)端不會(huì)等待響應(yīng)。相反,客戶(hù)端是假設(shè)不會(huì)立即收到響應(yīng)的。

1、單向通知

異步消息傳遞使實(shí)現(xiàn)單向通知變得容易。通常,客戶(hù)端向服務(wù)擁有的點(diǎn)對(duì)點(diǎn)通道發(fā)送消息。服務(wù)訂閱頻道處理消息。沒(méi)有響應(yīng)被發(fā)回。

2、發(fā)布/訂閱

發(fā)布/訂閱交互樣式內(nèi)置于消息傳遞中??蛻?hù)端將消息發(fā)布到由多個(gè)訂閱者讀取的發(fā)布-訂閱通道。

3、發(fā)布/異步響應(yīng)

結(jié)合了發(fā)布/訂閱和請(qǐng)求/響應(yīng)的元素,形成了更高層次的交互風(fēng)格??蛻?hù)端將指定回復(fù)通道頭的消息發(fā)布到發(fā)布-訂閱通道。消費(fèi)者將包含相關(guān) id 的回復(fù)消息寫(xiě)入回復(fù)通道??蛻?hù)端利用相關(guān) id 將回復(fù)消息與收集響應(yīng)的請(qǐng)求進(jìn)行匹配。


責(zé)任編輯:姜華 來(lái)源: 今日頭條
相關(guān)推薦

2022-08-14 07:04:44

微服務(wù)架構(gòu)設(shè)計(jì)模式

2022-08-07 22:11:25

微服務(wù)架構(gòu)

2022-04-23 16:58:24

微服務(wù)微服務(wù)架構(gòu)

2024-06-03 00:00:10

微服務(wù)Python

2022-08-12 06:26:54

微服務(wù)架構(gòu)

2024-09-23 17:05:44

2024-11-07 08:00:00

2020-12-19 10:53:08

微服務(wù)架構(gòu)設(shè)計(jì)模式軟件開(kāi)發(fā)

2024-07-01 12:09:12

2021-01-04 16:00:24

微服務(wù)架構(gòu)數(shù)據(jù)

2019-08-02 08:50:47

API架構(gòu)微服務(wù)

2021-09-14 11:26:22

微服務(wù)架構(gòu)模式

2019-09-29 10:29:02

緩存模式微服務(wù)架構(gòu)

2022-08-09 12:27:37

API集成微服務(wù)

2021-07-02 06:54:45

軟件架構(gòu)模式

2024-04-11 09:13:17

設(shè)計(jì)模式開(kāi)發(fā)

2017-09-13 13:42:09

微服務(wù)緩存架構(gòu)

2023-09-07 23:25:34

微服務(wù)服務(wù)發(fā)現(xiàn)

2023-09-02 20:51:09

微服務(wù)業(yè)務(wù)服務(wù)

2023-11-02 17:52:30

架構(gòu)模式微服務(wù)服務(wù)治理
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)