1. 程式人生 > >.NET微服務體系結構中為什麼使用Ocelot實現API閘道器

.NET微服務體系結構中為什麼使用Ocelot實現API閘道器

為什麼要使用API閘道器而不是直接通訊?

在微服務架構中,客戶端應用程式通常需要使用來自多個微服務的功能。如果直接執行該消費,則客戶端需要處理多個微服務端點以進行呼叫。當應用程式發展並引入新的微服務或更新現有的微服務時會發生什麼?如果您的應用程式有許多微服務,則從客戶端應用程式處理如此多的端點可能是一場噩夢,並且由於客戶端應用程式將耦合到這些內部端點,因此未來發展微服務可能會對客戶端應用程式造成很大影響。

因此,具有中間級別或間接層級(閘道器)對於基於微服務的應用程式非常方便。如果您沒有API閘道器,則客戶端應用程式必須將請求直接傳送到微服務,並引發問題,例如以下問題。

  • 耦合:如果沒有API閘道器模式,客戶端應用程式將耦合到內部微服務。客戶端應用程式需要知道應用程式的多個區域如何在微服務中分解。在發展和重構將影響客戶端應用程式的內部微服務時,由於客戶端應用程式需要跟蹤多個微服務端點,因此很難維護它們。

  • 往返次數過多:客戶端應用程式中的單個頁面/螢幕可能需要多次呼叫多個服務。這可能導致客戶端和伺服器之間出現多次網路往返,增加了嚴重的延遲。在中間級別處理的聚合可以改善客戶端應用的效能和使用者體驗。

  • 安全問題:沒有閘道器,所有微服務必須暴露於“外部世界”,使得攻擊面比隱藏客戶端應用程式未直接使用的內部微服務更大。攻擊面越小,應用程式就越安全。

  • 跨領域問題:每個公開發布的微服務都必須處理諸如授權,SSL等問題。在許多情況下,這些問題可以在單層中處理,以便簡化內部微服務。

Ocelot:輕量級和開源API閘道器。非常適合使用.NET Core微服務開始學習這種模式

Ocelot是一款基於開源.NET核心的API閘道器,特別針對需要統一進入系統的微服務架構。它輕巧,快速,可擴充套件,並提供許多其他功能之間的路由和身份驗證。

選擇Ocelot用於eShopOnContainers參考應用程式的主要原因是因為它是一個.NET Core輕量級API閘道器,您可以將它部署到您部署微服務/容器的相同應用程式部署環境中,例如Docker主機, Kubernetes,Service Fabric等,由於它基於.NET Core,因此它是跨平臺的,允許您在Linux或Windows上進行部署。

在初始架構和模式解釋部分之後,下一部分將介紹如何使用Ocelot實現API閘道器。

什麼是API閘道器模式

當您使用多個客戶端應用程式設計和構建大型或複雜的基於微服務的應用程式時,考慮的一個好方法可以是API閘道器。這是為某些微服務組提供單一入口點的服務。它類似於外觀模式從物件-導向的設計,但在這種情況下,它是一種分散式系統的一部分。API閘道器模式的變體也被稱為“前端後端”(BFF),因為您可能會根據每個客戶端應用程式的不同需求建立多個API閘道器。

因此,API閘道器位於客戶端應用程式和微服務之間。它充當反向代理,將來自客戶端的請求路由到服務。它還可以提供額外的交叉功能,如身份驗證,SSL終止和快取。

下圖顯示了自定義API閘道器如何適用於基於微服務的體系結構。

使用實現為自定義Web API服務的API閘道器

在前面的示例中,API閘道器將作為以容器執行的自定義Web API或ASP.NET WebHost服務的形式實現。

突出顯示在該圖中非常重要,您將使用面向多個不同客戶端應用程式的單個定製API閘道器服務。這個事實可能是一個重要的風險,因為您的API閘道器服務將根據客戶端應用程式的許多不同要求而不斷增長和發展。最終,它會因為這些不同的需求而臃腫,並且它可能非常類似於單一應用程式或單一服務。這就是為什麼非常推薦將API閘道器分成多個服務或多個較小的API閘道器,例如每種形式的閘道器型別。

您需要注意API閘道器模式。通常,使用單個API閘道器彙總應用程式的所有內部微服務並不是一個好主意。如果確實如此,它就像一個單一的聚合器或協調器,並通過耦合所有微服務來違反微服務自治。

因此,API閘道器應該根據業務邊界和客戶端應用進行分離,而不是作為所有內部微服務的單一聚合器。

將API閘道器層拆分為多個API閘道器時,如果您的應用程式有多個客戶端應用程式,那麼在識別多個API閘道器型別時可能是主要關鍵點,以便您可以根據每個客戶端應用程式的需要設定不同的外觀。這種情況是一種名為“前端後端”(BFF)的模式,其中每個API閘道器都可以為每個客戶端應用型別提供不同的API,甚至可以基於客戶端形式因子實現特定的介面卡程式碼,該程式碼在下面呼叫多個內部微服務,如下圖所示。

上圖顯示了一個具有多個細粒度API閘道器的簡化體系結構。在這種情況下,為每個API閘道器確定的邊界完全基於“前端後端”(BFF)模式,因此僅基於每個客戶端應用程式所需的API。但是在更大的應用程式中,您還應該進一步研究並根據業務邊界建立其他API閘道器作為第二個設計支點。

API閘道器模式中的主要功能

API閘道器可以提供多種功能。但是,根據產品可能提供更豐富或更簡單的功能,任何API閘道器的最重要和最基本的功能都是以下設計模式。

反向代理或閘道器路由。API閘道器提供反向代理來重定向或路由請求(第7層路由,通常是Http請求)到內部微服務的端點。閘道器為客戶端應用程式提供單個端點或URL,然後在內部將請求對映到一組內部微服務。這種路由功能有助於將客戶端應用程式與微服務分離,但通過將API閘道器置於整體式API和客戶端應用程式之間來實現整體式API的現代化時,它也非常方便,然後您可以將新的API作為新的微服務新增,同時仍在使用傳統的單片API,直到將來它被分成許多微服務。由於API閘道器,客戶端應用程式不會注意到所使用的API是作為內部微服務還是單片API實現的,更重要的是

後來的我們

主演:井柏然 / 周冬雨 / 田壯壯

貓眼電影演出 廣告 購買

有關更多資訊,請檢視閘道器路由模式資訊。

請求聚合。作為閘道器模式的一部分,您可以將針對多個內部微服務的多個客戶端請求(通常是Http請求)聚合為一個客戶端請求。當客戶端頁面/螢幕需要來自多個微服務的資訊時,此模式特別方便。通過這種方法,客戶端應用程式將向API閘道器傳送一個請求,該請求將向內部微服務傳送幾個請求,然後彙總結果並將所有內容傳送回客戶端應用程式。這種設計模式的主要優點和目標是減少客戶端應用程式與後端API之間的溝通,這對於微服務所在資料中心內的遠端應用程式尤其重要,例如移動應用程式或來自SPA應用程式的請求客戶端遠端瀏覽器中的Javascript。

根據您使用的API閘道器產品,它可能能夠執行此聚合。但是,在許多情況下,在API閘道器的範圍內建立聚合微服務更加靈活,因此您可以在程式碼中定義聚合(即C#程式碼)。

有關更多資訊,請檢視閘道器聚合模式資訊。

交叉擔憂或閘道器解除安裝。根據每個API Gateway產品提供的功能,您可以將各個微服務的功能解除安裝到閘道器,從而通過將橫切關注點合併到一個層級中來簡化每個微服務的實施。這對於特殊功能來說尤其方便,因為這些功能在每個內部微服務(如以下功能)中都可以很複雜地實現。

  • 認證和授權

  • 服務發現整合

  • 響應快取

  • 重試策略,斷路器和QoS

  • 限速和節流

  • 負載均衡

  • 記錄,追蹤,關聯

  • 標題,查詢字串和宣告轉換

  • IP白名單

根據每種實現方式,API閘道器產品可能存在更多的交叉問題,但這些是最常見的功能。例如,Azure API Management提供了大多數這些功能以及許多對商業API非常有用的高階功能。但是,對於更簡單的方法,像Ocelot這樣的輕量級API閘道器非常靈活,因為您可以將它與微服務一起部署到選定的環境(任何編排器)。

相關文章:

原文地址:https://www.toutiao.com/a6556480905353888263

.NET社群新聞,深度好文,歡迎訪問公眾號文章彙總 http://www.csharpkit.com

長按二維碼向我轉賬

pic_reward_qrcode.2x3534de.png

受蘋果公司新規定影響,微信 iOS 版的讚賞功能被關閉,可通過二維碼轉賬支援公眾號。

相關推薦

.NET服務體系結構為什麼使用Ocelot實現API

為什麼要使用API閘道器而不是直接通訊?在微服務架構中,客戶端應用程式通常需要使用

.NET Core服務之基於Ocelot實現API服務

一、啥是API閘道器?   API 閘道器一般放到微服務的最前端,並且要讓API 閘道器變成由應用所發起的每個請求的入口。這樣就可以明顯的簡化客戶端實現和微服務應用程式之間的溝通方式。以前的話,客戶端不得不去請求微服務A(假設為Customers),然後再到微服務B(假設為Orders),然後是微服

.NET Core服務之基於Ocelot實現API服務(續)

一、負載均衡與請求快取 1.1 負載均衡   為了驗證負載均衡,這裡我們配置了兩個Consul Client節點,其中ClientService分別部署於這兩個節點內(192.168.80.70與192.168.80.71)。   為了更好的展示API Repsonse來自哪個節點,我們更改一下

spring cloud 入門系列六:使用Zuul 實現API服務

通過前面幾次的分享,我們瞭解了微服務架構的幾個核心設施,通過這些元件我們可以搭建簡單的微服務架構系統。比如通過Spring Cloud Eureka搭建高可用的服務註冊中心並實現服務的註冊和發現; 通過Spring Cloud Ribbon或Feign進行負載均衡;通過Spring Cloud Hyst

hystri斷路器+zuul實現ApI+Sidecar異構系統呼叫NodeJS

hystri斷路器:豪豬 代表了一種防禦機制 分散式系統中,依賴呼叫失敗是不可避免的,為了避免一個依賴影響全域性 Netfilx團隊開發了Hystrix,hystrix提供了熔斷 、隔離、fallback、cache、監控等功能,能在一個一個依賴出問題的情況下保證系統可用 請求合併 將一

.NET Core服務之基於Steeltoe整合Zuul實現統一API

一、關於Spring Cloud Zuul   API Gateway(API GW / API 閘道器),顧名思義,是出現在系統邊界上的一個面向API的、序列集中式的強管控服務,這裡的邊界是企業IT系統的邊界。   Zuul 是Netflix 提供的一個開源元件,致力於在雲平臺上提供動態路由,監

.NET Core服務二:Ocelot API

.NET Core微服務一:Consul服務中心 .NET Core微服務二:Ocelot API閘道器 .NET Core微服務三:polly熔斷與降級   本文的專案程式碼,在文章結尾處可以下載。 本文使用的環境:Windows10 64位 + VS 2019 + .NET Core

.Net Core服務入門全紀錄(四)——Ocelot-API(上)

# 前言 上一篇【[.Net Core微服務入門全紀錄(三)——Consul-服務註冊與發現(下)](https://www.cnblogs.com/xhznl/p/13096891.html)】已經使用Consul完成了服務的註冊與發現,實際中光有服務註冊與發現往往是不夠的,我們需要一個統一的入口來連線客戶

.Net Core服務入門全紀錄(五)——Ocelot-API(下)

# 前言 上一篇【[.Net Core微服務入門全紀錄(四)——Ocelot-API閘道器(上)](https://www.cnblogs.com/xhznl/p/13092535.html)】已經完成了Ocelot閘道器的基本搭建,實現了服務入口的統一。當然,這只是API閘道器的一個最基本功能,它的進階功能

.NET Core 服務API(Ocelot) 教程 [二]

上篇文章(.NET Core 微服務—API閘道器(Ocelot) 教程 [一])介紹了Ocelot 的相關介紹。 接下來就一起來看如何使用,讓它執行起來。 環境準備   為了驗證Ocelot 閘道器效果,我們先建立3個webapi專案:目錄api(Api.Catalog)、訂單api(Api.Or

.net core 服務ApiApi Gateway)

微服務閘道器目錄 1、 微服務引子 2、使用Nginx作為api閘道器 3、自創api閘道器(重複輪子) 3.1、構建初始化 3.2、構建中介軟體 4、結語

基於.NET CORE服務框架 -Api服務管理

最近也更新了surging新的版本 更新內容: 1. 擴充套件Zookeeper封裝 2. 增加服務元資料 3. 增加API閘道器 開源地址:https://github.com/dotnetcore/surging 2.軟體環境 IDE:Visual Studio 2017 1

使用 API 構建服務 & 服務架構的程序間通訊

本期內容 微服務系列文章的第一篇介紹了微服務架構模式,討論了使用微服務的優缺點,以及為什麼微服務雖然複雜度高卻是複雜應用程式的理想選擇。 在決定以一組微服務來構建自己的應用時,你需要確定應用客戶端如何與微服務互動。 在單體式程式中,通常只有一組冗餘的或者負載均衡的服

spring cloud+.net core搭建服務架構:Api(三)

前言 國慶假期,一直沒有時間更新。 根據群裡面的同學的提問,強烈推薦大家先熟悉下spring cloud。文章下面有純潔大神的spring cloud系列。 上一章最後說了,因為服務是不對外暴露的,所以在外網要訪問服務必須通過API閘道器來完成,而spring cloud 提供了現成的Api閘道器元件zuul

談談服務API API Gateway)

前言 又是很久沒寫部落格了,最近一段時間換了新工作,比較忙,所以沒有抽出來太多的時間寫給關注我的粉絲寫一些乾貨了,就有人問我怎麼最近沒有更新部落格了,在這裡給大家抱歉。 那麼,在本篇文章中,我們就一起來探討一下 API 閘道器在整個微服務分散式架構中的一個作用。 背景 我們知道在微服務架構風格中,一個大應用被

建立服務-用API實現

建立微服務-用API閘道器實現第一篇文章講述了微服務的建立、設計和部署。同時,也討論了關於應用微服務的優點和缺點。雖然微服務結構複雜,但它是處理複雜程式架構的理想選擇。本文講述通過API閘道器構造微服務。當你選擇採用微服務構建自己的程式,則你需要考慮客戶端怎樣與後端服務互動。

服務技術棧:API中心,落地實現方案

本文原始碼:[GitHub·點這裡](https://github.com/cicadasmile/husky-spring-cloud) || [GitEE·點這裡](https://gitee.com/cicadasmile/husky-spring-cloud) # 一、服務閘道器簡介 ## 1、

SpringCloud服務專案實戰 - APIGateway詳解實現

前面講過zuul的閘道器實現,那為什麼今天又要講Spring Cloud Gateway呢?原因很簡單。就是Spring Cloud已經放棄Netflix Zuul了。現在Spring Cloud中引用的還是Zuul 1.x版本,而這個版本是基於過濾器的,是阻塞IO,不支援長連線。Zuul 2.x版本跟1.x

[服務]API(API Gateway)

工作中使用了微服務架構,接下來的一段時間裡,我會寫一系列的文章來介紹微服務架構,同時我也會在github上寫一個microservices的應用框架(地址會在後續文章給出)。 這篇文章主要講述了微服務架構中的API Gateway。   翻譯和整理自:  

服務從零搭建——(二)搭建api(不帶驗證)

環境準備 建立空的core2.1 api專案  演示使用名稱APIGateWay  過程參考上一篇 完成後在appsettings.json 新增節點 "Setting": { "Port": "5000" } 搭建過程 新增檔案configuration.json