API網關的作用?企業如何應用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網關解決方案

私有云開源解決方案如下:

  • Kong kong是基于Nginx+Lua進行二次開發的方案:

    • https://konghq.com/

  • Netflix Zuul,zuul是spring cloud的一個推薦組件:

    • https://github.com/Netflix/zuul

  • orange,這個開源程序是國人開發的:

    • http://orange.sumory.com/

公有云解決方案:

  • 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網關才是正確的選擇。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/76427.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/76427.shtml
英文地址,請注明出處:http://en.pswp.cn/web/76427.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

國網B接口協議圖像數據上報通知接口流程詳解以及上報失敗原因(電網B接口)

文章目錄 一、B接口協議圖像數據上報通知接口介紹B.13.1 接口描述B.13.2 接口流程B.13.3 接口參數B.13.3.1 SIP頭字段B.13.3.2 SIP響應碼B.13.3.3 XML Schema參數定義 B.13.4 消息示例B.13.4.1 圖像數據上報請求B.13.4.2 圖像數據上報響應 二、B接口圖像數據上報通知失敗常見問…

springAi---智能客服

首先被取代的是客服類,智能客服機器人都能夠高效地完成任務。 spring Ai 大模型應用相關開發demo,智能客服系統; 在需求分析階段,把功能屬于傳統Java處理的和ai的功能進行分離 梳理為流程圖如下: 在大模型中&#…

Java面試(2025)——基礎

Java語言有哪些特點? Java語言具有多個顯著特點,使其在編程領域廣受歡迎。首先,Java的跨平臺性非常強,通過Java虛擬機(JVM)實現“編寫一次,隨處運行”,使得開發者能夠在不同操作系統…

Linux壓縮與解壓命令完全指南:tar.gz、zip等格式詳解

Linux壓縮與解壓命令完全指南:tar.gz、zip等格式詳解 在Linux系統中,文件壓縮和解壓是日常操作中不可或缺的一部分。本文將全面介紹Linux下常用的壓縮和解壓命令,包括tar.gz、tar、zip等格式的區別和使用方法,幫助你高效管理文件…

C++ STL 環形隊列模擬實現

C STL 環形隊列模擬實現 下面是一個使用C STL實現的環形隊列&#xff08;Circular Queue&#xff09;的完整示例&#xff1a; #include <iostream> #include <vector> #include <stdexcept>template <typename T> class CircularQueue { private:std…

部署rocketmq集群

容器化部署RocketMQ5.3.1集群 背景: 生產環境單機的MQ不具有高可用,所以我們應該部署成集群模式,這里給大家部署一個雙主雙從異步復制的Broker集群 一、安裝docker yum install -y docker systemctl enable docker --now # 單機部署參考: https://www.cnblogs.com/hsyw/p/1…

mysql的函數(第一期)

一、字符串函數?? 處理文本數據&#xff0c;常用函數&#xff1a; ??CONCAT(str1, str2, ...)?? ??作用??&#xff1a;拼接字符串。??示例??&#xff1a;SELECT CONCAT(Hello, , World); → Hello World??注意??&#xff1a;若任一參數為 NULL&#xff0c;…

Linux下的網絡管理

注意&#xff1a;本文使用的Linux系統版本為Red Hat Enterprise Linux 9 (RHEL 9)。 在RHEL9上&#xff0c;使用NM&#xff08;NetworkManager&#xff09;進行網絡配置&#xff0c;ifcfg &#xff08;也稱為 文件&#xff09;將不再是網絡配置文件的主存儲。雖然 ifcfg 樣式仍…

游戲引擎學習第233天

原地歸并排序地方很蒙圈 game_render_group.cpp&#xff1a;注意當前的SortEntries函數是O(n^2)&#xff0c;并引入一個提前退出的條件 其實我們不太討論這些話題&#xff0c;因為我并沒有深入研究過計算機科學&#xff0c;所以我也沒有太多內容可以分享。但希望在過去幾天里…

從《周游記3》演繹歌劇版《菊花臺》,周杰倫婚禮曲目意大利文版驚喜亮相

今天&#xff08;4月19日&#xff09;22:00&#xff0c;由魔胴西西里咖啡冠名的戶外實境互動綜藝《周游記3》第四期即將播出。本期節目中&#xff0c;“J式之旅”發起人周杰倫和林暐恒、杜國璋、陳冠霖、陳冠廷&#xff0c;將繼續意大利之旅&#xff0c;從那不勒斯的百年老店到…

Linux系統編程 day6 進程間通信mmap

父子共享的信息&#xff1a;文件描述符&#xff0c;mmap建立的共享映射區&#xff08;MAP_SHARED&#xff09; mmap父子間進程通信 var的時候 &#xff1a;讀時共享&#xff0c;寫時復制 父進程先創建映射區&#xff0c;指定共享MAP_SHARED權限 &#xff0c; fork創建子進程…

opencv--圖像處理

圖像處理技術 圖像處理技術是利用計算機對圖像進行計算,分析和處理的技術,包括數字圖像處理和計算機視覺兩大領域。 對圖像的處理包括濾波,縮放,分割,識別(兩種信息對比)等。 鏈接 數字圖像處理 1. 數字圖像處理(Digital Image Processing) 數字圖像處理主要關注圖…

Spring 學習筆記之 @Transactional詳解

一、數據庫事務基礎 數據庫事務&#xff08;Transaction&#xff09;是數據庫管理系統中用于確保數據一致性和完整性的一種機制。它是一組操作的集合&#xff0c;這些操作要么全部成功&#xff0c;要么全部失敗&#xff0c;從而保證數據庫狀態的正確性。 1.1 事務的基本概念 定…

【Openlayers】Openlayers 入門教程

Openlayers 入門教程 -系列文章列表 openlayers 入門教程&#xff08;一&#xff09;&#xff1a;openlayers簡介 openlayers 入門教程&#xff08;二&#xff09;&#xff1a;Map 篇 openlayers 入門教程&#xff08;三&#xff09;&#xff1a;View 篇 openlayers 入門教程&a…

【Lua語言】Lua語言快速入門

初始Lua Lua是一種輕量小巧的腳本語言&#xff0c;他使用標準C語言編寫并以源代碼形式開放。這意味著Lua虛擬機可以很方便的嵌入別的程序中&#xff0c;從而為應用程序提供靈活的擴展和定制功能。同時&#xff0c;在目前腳本引擎中&#xff0c;Lua的運行速度占有絕對優勢。 變…

車載診斷新架構--- SOVD初入門(上)

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 周末洗了一個澡,換了一身衣服,出了門卻不知道去哪兒,不知道去找誰,漫無目的走著,大概這就是成年人最深的孤獨吧! 舊人不知我近況,新人不知我過…

linux查看目錄相關命令

查看目錄命令 學習目標 能夠使用Linux命令查看目錄信息 1. 查看目錄命令的使用 命令說明ls查看當前目錄信息tree以樹狀方式顯示目錄信息 ls命令效果圖: tree命令效果圖: 2. 查看當前目錄路徑 命令說明pwd查看當前目錄路徑 pwd命令效果圖: 3. 清除終端內容 命令說明clear…

JavaScript中的Event事件對象詳解

一、事件對象&#xff08;Event&#xff09;概述 1. 事件對象的定義 event 對象是瀏覽器自動生成的對象&#xff0c;當用戶與頁面進行交互時&#xff08;如點擊、鍵盤輸入、鼠標移動等&#xff09;&#xff0c;事件觸發時就會自動傳遞給事件處理函數。event 對象包含了與事件…

OSPF綜合實驗(HCIP)

1&#xff0c;R5為ISP&#xff0c;其上只能配置Ip地址&#xff1b;R4作為企業邊界路由器&#xff0c; 出口公網地址需要通過ppp協議獲取&#xff0c;并進行chap認證 2&#xff0c;整個OSPF環境IP基于172.16.0.0/16劃分&#xff1b; 3&#xff0c;所有設備均可訪問R5的環回&…

2024-04-19| Java: Documented注解學習 JavaDoc

在 Java 中&#xff0c;Documented 是一個元注解&#xff08;meta-annotation&#xff09;&#xff0c;用于標記其他注解&#xff0c;表明這些注解應該被包含在 JavaDoc 文檔中。以下是關于 Documented 注解的作用的簡要說明&#xff1a; 作用 記錄注解信息到 JavaDoc&#x…