本文介紹選擇API閘道器應考慮的幾方面內容,API閘道器在微服務框架中的作用,API閘道器如何選型,用友雲開放平臺的API閘道器可以做什麼。
隨著網際網路的快速發展,當前已步入移動互聯、物聯網時代。企業內部系統,企業與客戶,企業供應鏈上下游之間,甚至於社會化公共資料的共享都對系統架構提出了新的需求。
微服務框架的強勢崛起,使更多企業迅速的完成了企業內部的API化,但在企業供應鏈和社會化開放資料和能力的強烈需求下,安全,隔離,共享成為剛性需求,所以API閘道器就成為了企業開放的必備產品。
很多網際網路平臺已基於閘道器的設計思路,構建自身平臺的API閘道器,國內主要有京東、攜程、唯品會等,國外主要有Netflix、Amazon等。
一.如何選擇自己的API閘道器?
不管用已有還是自研的API閘道器 我們都需要從以下幾個方面去考慮。
1、安全與防護
大型企業都把網路安全看成資訊化的重中之重,作為企業資料和服務的對外出口,API閘道器要自 帶基本的安全防護功能,能夠防注入,防重放,防篡改,防一定規模的DDOS攻擊,自定義規則對非 法流量進行過濾。
2、效能與穩定性
API閘道器就會作為企業應用核心,效能和可用性是最基本的需求要求。
(1)從效能上來說,需要讓閘道器增加的時間消耗越短越好,個人覺得需要10ms以下。 系統需要採用非阻塞的IO,如epoll,NIO等。閘道器和各種依賴的互動也需要是非阻塞的,這樣才能保證整體系統的高效能。
(2)閘道器必須支援叢集部署和高可用,能夠橫行擴充套件,支撐高併發和大流量,同時任何一個節點down掉都不能影響整體的可用性。
(3)儘可能多套閘道器應該支援同一管理平臺和同一監控中心。 如: 一個企業的OpenAPI閘道器和內部應用的多個系統群的不同的微服務閘道器可以在同一監控中心進行監控。
3、可擴充套件性、可維護性
企業的需求是多樣化的而且不斷變化,作為基礎平臺的核心元件,要提供二次開發能力,方便擴充套件以及和其他基礎平臺之間流程打通
4、需求匹配度
需要評估各API閘道器在需求上是否能滿足,如: 如果是OpenAPI平臺需要使用API閘道器,那麼需要看API閘道器在合作伙伴應用接入、合作伙伴門戶整合、訪問次數限額等OpenAPI核心需求上去思考產品是否能滿足要求。 如果是微服務閘道器,那麼要從微服務的運維、監控、管理等方面去思考產品是否足夠強大。
二.API閘道器在微服務框架中的作用?
1.企業安全隔離
企業內部系統在對公有云或者外部系統整合時,需要一個明顯的邊界去保證自己企業的業務資料安全及許可權的統一控制與管理,API閘道器在對外開放資料和提供能力時需要提供各種通用的安全認證標準。
2.統一管理,全域性入口
在微服務架構之下,服務被拆的非常零散,降低了耦合度的同時也給服務的統一管理增加了難度,
缺乏對外開放能力的全域性檢視管理及監控能力,API閘道器要完成全域性開放流量入口的分析與管理。
3.跨平臺,跨語言,易整合,方便擴充套件
用友雲平臺是基於JAVA語言開發的微服務治理平臺,在JAVA語言呼叫時很方便,但是PHP,C系列等其它語言呼叫微服務時需要開發SideCar ,這就造成整合的複雜度,API閘道器提供標準的restful介面給產品在整合時提供很大便利。
三.API閘道器如何選型? 為什麼是Nginx+Lua+c?
現在開源的API閘道器主要基於Nginx、ZUUL、Spring Cloud Gateway、Linkerd等開源專案,但是各有特點:
Linkerd也是一個非常有前途的專案,是基於Scala實現的、目前市面上僅有的生產級別的Service Mesh,但是資料少,學習成本高,二次開發和功能擴充套件困難, 整體開發生態還沒建立起來。
Spring Cloud Gateway 是Spring Cloud建立了一個嵌入式Zuul代理,所以兩者實質上都是Netflix Zuul, Zuul的效能不錯,Zuul 2.0 本身採用了Netty 的NIO,複雜度提高了,但效能更加強悍,Zuul1.0和Spring 框架也原生整合,基於JAVA開發語言,可以和Eureka,Ribbon,Hystrix等配件組合:很容易實現 身份認證,監 控,動態路由,壓力測試,負載分配,靜態響應等功能,Zuul 1.0已開源6年多,很易用,在實戰中也得到了檢驗,zuul 2.0 在超大型互聯應用中還有坑要趟,但整體來說,在強大的java生態中zuul是一個很不錯的技術選型方向。
Nginx生態的Nginx+Lua+c,主要代表產品有kong等開源產品。kong 自2015年在github開源以後,已有1.69萬+的star,其核心價值在於穩定,高效能,易擴充套件;基於nginx+c的Tengine在阿里巴巴集團內還在大量使用,尚在壯年; 京東更是用nginx+lua這套技術框架證實了億萬流量的最佳實踐。雖然開發效率比較低,好在閘道器的邏輯足夠簡單,穩定,所以這個技術組合對這樣一個業務場景尤其合適。用友雲API閘道器核心部分就是基於這套框架開發的。
四.用友雲開放平臺的API閘道器可以做什麼?
API閘道器(API Gateway)提供了API的全生命週期管理。輔助使用者簡單、快速、低成本、低風險的將資料、業務邏輯或功能安全可靠的開放出來,用以實現自身系統整合、以及與合作伙伴的業務連線。目前已成功應用於用友雲開放平臺,APILink。
產品特性:
1.安全防護
支援安全認證,自定義流量過濾,黑白名單,服務降級,流量限制,熔斷等基本功能。
2.API 生命週期管理
提供 API 建立、維護、釋出、執行、下線等操作的全生命週期管理。覆蓋API定義、測試、釋出用以部署API.同時提供便捷的日常管理、版本管理、支援在先版本升級和快速回滾。節約因 API 管理而造成的工作量與人力。
3.請求管理,鏈路追蹤
請求經過 API 閘道器,可根據您的配置進行引數型別、引數值的校驗,減少後端對非法請求、無效請求的資源消耗和處理成本。同時,您可以在 API 閘道器定義引數對映規則,閘道器通過對映規則將後端服務通過對映翻譯成任何形式,以滿足不同使用者的不同需求,從而避免功能重複開發。請求過程全鏈路追蹤機制,方便快捷定位問題。
4.監控告警,統計分析
提供實時、視覺化的 API 監控,包括:呼叫量、呼叫方式、響應時間、錯誤率,讓您能夠清楚的瞭解 API 的詳細資訊和分析使用者的行為習慣。方便使用者的運維管理,以便 API 的後期迭代與維護,提高效率。支援自定義報警規則,來針對異常情況進行報警,縮短故障處理時間。