你連微服務的網關都說不清楚,還天天鼓搗著要把項目拆分微服務?

来源:https://www.cnblogs.com/coding-farmer/archive/2019/12/27/12110037.html
-Advertisement-
Play Games

​API網關我的分析中會用到以下三種場景:1、Open API,2、微服務網關,3、API服務管理平臺 ...


​一、API網關的用處

API網關我的分析中會用到以下三種場景。

1、Open API

企業需要將自身數據、能力等作為開發平臺向外開放,通常會以rest的方式向外提供。最好的例子就是淘寶開放平臺、騰訊公司的QQ開發平臺、微信開放平臺。

Open API開放平臺必然涉及到客戶應用的接入、API許可權的管理、調用次數管理等,必然會有一個統一的入口進行管理,這正是API網關可以發揮作用的時候。

2、微服務網關

微服務的概念最早在2012年提出,在Martin Fowler的大力推廣下,微服務在2014年後得到了大力發展。

在微服務架構中,有一個組件可以說是必不可少的,那就是微服務網關,微服務網關處理了負載均衡,緩存,路由,訪問控制,服務代理,監控,日誌等。

API 網關在微服務架構中正是以微服務網關的身份存在。

3、API服務管理平臺

上述的微服務架構對企業來說有可能實施上是困難的,企業有很多遺留系統,要全部抽取為微服務改動太大,對企業來說成本太高。

但是由於不同系統間存在大量的API服務互相調用,因此需要對系統間服務調用進行管理,清晰地看到各系統調用關係,對系統間調用進行監控等。

API網關可以解決這些問題,我們可以認為如果沒有大規模的實施微服務架構,那麼對企業來說微服務網關就是企業的API服務管理平臺。

二、API網關在企業架構中的地位

一個企業隨著信息系統複雜度的提高,必然出現外部合作伙伴應用、企業自身的公網應用、企業內網應用等。

在架構上應該將這三種應用區別開,三種應用的安排級別、訪問方式也不一樣。

因此在我的設計中將這三種應用分別用不同的網關進行API管理,分別是:API網關(OpenAPI合伙伙伴應用)、API網關(內部應用)、API網關(內部公網應用)。

如下圖所示:

三、企業中如何應用API網關

1、對於OpenAPI使用的API網關來說,一般合作伙伴要以應用的形式接入到OpenAPI平臺,合作伙伴需要到 OpenAPI平臺申請應用。

因此在OpenAPI網關之外,需要有一個面向合作伙伴的使用的平臺用於合作伙伴,這就要求OpenAPI網關需要提供API給這個用戶平臺進行訪問。

如下架構:

當然如果是在簡單的場景下,可能並不需要提供一個面向合作伙伴的門戶,只需要由公司的運營人員直接添加合作伙伴應用id/密鑰等,這種情況下也就不需要合作伙伴門戶子系統。

2、對於內網的API網關,在起到的作用上來說可以認為是微服務網關,也可以認為是內網的API服務治理平臺。

當企業將所有的應用使用微服務的架構管理起來,那麼API網關就起到了微服務網關的作用。

而當企業只是將系統與系統之間的調用使用rest api的方式進行訪問時使用API網關對調用進行管理,那麼API網關起到的就是API服務治理的作用。

架構參考如下:

3、對於公司內部公網應用(如APP、公司的網站),如果管理上比較細緻,在架構上可能由獨立的API網關來處理這部分內部公網應用。

如果想比較簡單的處理,也可以是使用面向合作伙伴的API網關。

如果使用獨立的API網關,有以下的好處:

  • 面向合作伙伴和麵向公司主體業務的優先順序不一樣,不同的API網關可以做到業務影響的隔離。

  • 內部API使用的管理流程和麵向合作伙伴的管理流程可能不一樣。

  • 內部的API在功能擴展等方面的需求一般會大於OpenAPI對於功能的要求。

基於以上的分析,如果公司有能力,那麼還是建議分開使用合作伙伴OPEN API網關和內部公網應用網關。

四、API網關有哪些競爭方案

1、對於Open API平臺的API網關,我分析只能選擇API網關作為解決方案。

業界沒有發現比較好的可以用來作為Open API平臺的入口的其他方案。

2、對於作為微服務網關的API網關,業界的選擇可以選擇的解決方案比較多,也取決於微伺服器的實現方案,有一些微服務架構的實現方案是不需要微服務網關的。

(1)Service Mesh

這是新興的基於無API網關的架構,通過在客戶端上的代理完成屏蔽網路層的訪問,這樣達到對應用層最小的改動。

當前Service Mesh的產品還正在開發中,並沒有非常成熟可直接應用的產品。發展最迅速的產品是Istio。建議大家密切關註相關產品的研發、業務使用進展。

(2)基於duboo架構

在這個架構中通常是不需要網關的,是由客戶端直接訪問服務提供方,由註冊中心向客戶端返回服務方的地址。

五、API網關解決方案

公有雲解決方案:

Amazon API Gateway:

https://aws.amazon.com/cn/api-gateway/

阿裡雲API網關:

https://www.aliyun.com/product/apigateway/

騰訊雲API網關:

https://cloud.tencent.com/product/apigateway

自開發解決方案:

基於Nginx+Lua+OpenResty的方案,可以看到Kong,orange都是基於這個方案

基於Netty、非阻塞IO模型。通過網上搜索可以看到國內的宜人貸等一些公司是基於這種方案,是一種成熟的方案。

基於Node.js的方案。這種方案是應用了Node.js天生的非阻塞的特性。

基於java Servlet的方案。zuul基於的就是這種方案,這種方案的效率不高,這也是zuul總是被詬病的原因。

六、企業怎麼選擇API網關

如果要選擇一款已有的API網關,需要從以下幾個方面去考慮。

1、性能與可用性

如果一旦採用了API網關,那麼API網關就會作為企業應用核心,因此性能和可用性是必須要求的。

從性能上來說,需要讓網關增加的時間消耗越短越好,個人覺得需要10ms以下。

系統需要採用非阻塞的IO,如epoll,NIO等,網關和各種依賴的交互也需要是非阻塞的,這樣才能保證整體系統的高可用性,如:Node.js的響應式編程和基於java體現的RxJava和Future。

網關必須支持集群部署,任務一臺伺服器的crash都應該不影響整體系統的可用性。

多套網關應該支持同一管理平臺和同一監控中心。如:一個企業的OpenAPI網關和內部應用的多個系統群的不同的微服務網關可以在同一監控中心進行監控。

2、可擴展性、可維護性

一款產品總有不能滿足生產需求的地方,因此需求思考產品在如何進行二次開發和維護,是否方便公司團隊接手維護產品。

3、需求匹配度

需要評估各API網關在需求上是否能滿足。

比如:如果是OpenAPI平臺需要使用API網關,那麼需要看API網關在合作伙伴應用接入、合作伙伴門戶集成、訪問次數限額等OpenAPI核心需求上去思考產品是否能滿足要求。

如果是微服務網關,那麼要從微服務的運維、監控、管理等方面去思考產品是否足夠強大。

4、是否開源?公司是否有自開發的能力?

現有的開源產品如kong,zuul,orange都有基礎的API網關的核心功能,這些開源產品大多離很好的使用有一定的距離

比如:沒有提供管理功能的UI界面、監控功能弱小,不支持OpenAPI平臺,沒有公司運營與運維的功能等。

當然開源產品能獲取源代碼,如果公司有比較強的研發能力,能hold住這些開源產品,經過二次開發kong、zuul應該還是適應一些公司,不過需求註意以下一些點:

kong是基於ngnix+lua的,從公司的角度比較難於找到能去維護這種架構產品的人。需求評估當前公司是否有這個能力去維護這個產品。

zuul因為架構的原因在高併發的情況下性能不高,同時需要去基於研究整合開源的適配zuul的監控和管理系統。

orange由於沒有被大量使用,同時是國內個人在開源,在可持續性和社區資源上不夠豐富,出了問題後可能不容易找到人問。

另外kong提供企業版本的API網關,當然也是基於ngnix+lua的,企業版本可以購買他們的技術支持、培訓等服務、以及擁有界面的管理、監控等功能。

5、公有雲還是私有雲

現在的亞馬遜、阿裡、騰訊雲都在提供基礎公有雲的API網關,當然這些網關的基礎功能肯定是沒有問題,但是二次開發,擴展功能、監控功能可能就不能滿足部分用戶的定製需求了。

另外很多企業因為自身信息安全的原因,不能使用外網公有網的API網關服務,這樣就只有選擇私有雲的方案了。

在需求上如果基於公有雲的API網關只能做到由內部人員為外網人員申請應用,無法做到定製的合作伙伴門戶,這也不適合於部分企業的需求。

如果作為微服務網關,大多數情況下是希望網關伺服器和服務提供方伺服器是要在內網的,在這裡情況下也只有私有雲的API網關才能滿足需求。

綜合上面的分析,基礎公有雲的API網關只有滿足一部分簡單客戶的需求,對於很多企業來說私有雲的API網關才是正確的選擇。

 

來源:https://www.jianshu.com/p/e30587bb9b06


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 原型的引入:解決:通過構造函數創建對象帶來的問題,即浪費記憶體(一個對象開一個記憶體,多個對象開多個記憶體) 通過原型來添加方法,解決數據共用,節省記憶體空間 <script> function Person(name, age) { this.name = name; this.age = age; } ...
  • 實例對象和構造函數之間的關係: 1. 實例對象是通過構造函數來創建的 創建的過程叫實例化 2. 如何判斷對象是不是這個數據類型? 1) 通過構造器的方式 實例對象.構造器==構造函數名字 2) 對象 instanceof 構造函數名字 儘可能的使用第二種方式來識別,為什麼?原型講完再說 //面向對象 ...
  • 創建對象:工廠模式和自定義構造函數的區別 共同點: 都是函數, 都可以創建對象, 都可以傳入參數 區別: 工廠模式: 函數名是小寫 有new, 有返回值 new之後的對象是當前的對象 直接調用函數就可以創建對象 //工廠模式創建對象 function createObject(name, age) ...
  • JS高級 三種創建對象的方式 字面量的方式 (實例對象) 調用系統的構造函數 自定義構造函數方式 //創建對象 >實例化一個對象,的同時對屬性進行初始化 var per=new Person("小紅",20); 自動逸構造函數創建對象做的事情: 1.開闢空間存儲對象 2.把this設置為當前的對象 ...
  • 前言 關於Hook的定義官方文檔是這麼說的: Hook 是 React 16.8 的新增特性。它可以讓你在不編寫 class 的情況下使用 state 以及其他的 React 特性。 簡單來說,就是在使用函數式組件時能用上state,還有一些生命周期函數等其他的特性。 如果想瞭解Hook怎麼用, " ...
  • HTTP 400 錯誤 復現錯誤 ajax請求後臺數據時有時會報 HTTP 400 錯誤 - 請求無效 (Bad request);出現這個請求無效報錯說明請求沒有進入到後臺服務里;原因:1)前端提交數據的欄位名稱或者是欄位類型和後臺的實體類不一致,導致無法封裝; 2)前端提交的到後臺的數據應該是j ...
  • HTML DOM 允許 JavaScript 更改 HTML 元素的樣式。 改變 HTML 樣式 如需更改 HTML 元素的樣式,請使用此語法: document.getElementById(id).style.property = new style 下麵的例子更改了 <p> 元素的樣式: 實例 ...
  • 轉載請註明出處:葡萄城官網,葡萄城為開發者提供專業的開發工具、解決方案和服務,賦能開發者。 原文出處:https://blog.bitsrc.io/do-your-buttons-lead-or-mislead-your-users-d5d83531238b 按鈕是UI/UX最關鍵的組件之一,在不同 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...