淺析服務網關對企業核心應用架構的重要性
本文轉載自微信公眾號「新鈦云服」,作者楊良春。轉載本文請聯系新鈦云服公眾號。
無論您是企業內部、云廠商或服務商架構師,在梳理業務場景,規劃、部署應用架構之時,服務網關設計與實現的成敗,是直接決定您系統交付價值的最直接體現。
服務網關作用何在?
簡言之,路由轉發和過濾器。
· 路由轉發:接收一切外界請求,轉發至后端;
· 過濾器:完成權限校驗、限流以及監控等一系列橫切功能。
服務網關功能體現在哪?
近些年,隨著微服務輕量級應用不斷盛行,API網關正扮演著舉足輕重的角色。因為它既需要承擔企業應用服務對外的唯一門戶,更重要的是它提取了許多應用的共性功能。
目前API網關實現的功能包括請求分發、條件路由、API管理、限流隔離、熔斷降級、安全策略、監控報警以及調用鏈追蹤等。
一、請求分發
API進行服務發現時給不同url前綴以及微服務應用構建不同的namespace對象,在進行請求匹配時候只需根據url前綴選取到對應的namespace即可匹配到對應微服務應用,后續就是現有微服務框架sdk的功能:路由、負載均衡直至完成整個調用。
二、條件路由&灰度發布
條件路由依然是復用現有的微服務框架,避免重復造輪,網關進行服務發現初始化時會給每個應用創建Invoker代理對象,Invoker內會根據不同的分組創建不同的Space空間,請求調用時會對這些Space空間進行規則匹配,從而決定是否路由到特定分組上。
三、API管理
當大部分應用還是裸連網關而非經過BFF聚合時,有必要對每個接口都進行管理,以區分哪些是微服務間調用,哪些是暴露給前端/客戶端調用。
四、限流隔離/熔斷降級
API網關作為南北流量的唯一入口,整體治理必要性非常大。
限流隔離主要是作用在流入方向服務端測的流量控制,其中限流主要是控制qps,隔離主要是控制并發數。通過相關SDK(基于Prometheus)暴露metrics數據給監控平臺,以便我們隨時觀察到流量控制水平。
五、安全策略
針對惡意爬蟲類異常流量,用戶可以在網關管控平臺手動進行規則配置,經由配置中心下發到網關的Security Control進行熱更新。在請求來臨時由它判斷是否符合規則,被封禁的流量同樣暴露metrics數據給監控平臺供我們隨時查看。
同時還會將網關日志實時采集至大數據分析平臺,經分析如果判斷某個ip或者用戶存在異常情況,會自動配置安全策略規則至網關管控平臺,同時觸發一個報警提醒業務owner。目前支持包括根據客戶端IP、用戶ID、其余http header/attribute等。
六、監控報警
API網關有完善的監控報警、調用鏈追蹤、日志查詢等功能。這里監控主要指查詢metrics、調用鏈主要指查詢tracing,日志即logging,三者是監控領域典型指標:
此外還支持主機層面的報警,通過內嵌了的metrics sdk暴露metrics指標到endpoint供監控中心拉取,tracing sdk負責埋點打印tracing日志,tracing日志和業務日志均會通過日志采集器輸入監控中心處理。在監控平臺上,用戶可以查詢調用鏈、監控、日志信息,API網關發生的主機異?;蛘邩I務異常也會報警給owner。
技術選型
若讀者有興趣自建一個輕量級的服務網關,技術選型推薦如下:
· 開發語言:java + groovy,groovy的好處是網關服務無需重啟動態添加filter實現
· 微服務基礎框架:Springboot;
· 網關基礎組件:Netflix Zuul;
· 服務注冊中心:Consul;
· 權限校驗:JWT;
· API監控:Prometheus + Grafana;
· API統一日志收集:Logback + ELK;
· 壓力測試:Jmeter。