11 微服務架構學習與思考:開源 API 網關02-以 Java 為基礎的 API 網關詳細介紹( 二 )

  • Predicates 和 Filters 作用于特定路由,易于編寫的 Predicates 和 Filters
  • 集成了斷路器
  • 集成了 Spring Cloud DiscoveryClient
  • 很容易編寫 Predicates 和 Filters
  • 具備網關一些高級功能:動態路由、限流、路由重寫
  • Spring Cloud Gateway 與 Eureka、Ribbon、Hystrix 等組件配合使用 , 實現路由轉發、負載均衡、鑒權、熔斷、路由重寫、日志監控等功能 。
    Spring Cloud Gateway 中的重要概念:
    (1) Filter(過濾器)
    可以使用它來攔截和修改請求 , 并且對它的上文的響應進行處理 。
    (2) Route(路由)
    網關配置的基本組成模塊 。一個 Route 模塊由一個 ID , 一個目標 URI,一組斷言(Predicate)和一組過濾器(Filter)組成 。如果斷言為真,則路由匹配,目標 URI 會被訪問 。
    (3)Predicate(斷言):
    路由轉發的判斷條件,可以使用它來匹配來自 HTTP 請求的任何內容,例如修改請求方式、請求頭內容、請求路徑、請求參數等 。如果匹配成功,則轉發到相應的服務里 。
    Predicate 是路由的匹配條件,匹配之后,Filter 就對請求和響應進行精細化處理 。有了這兩個工具,再加上目標 URI 可以實現一個具體的路由,就可以對具體的路由進行處理操作 。
    2.3 Gateway 處理流程流程圖:
    11 微服務架構學習與思考:開源 API 網關02-以 Java 為基礎的 API 網關詳細介紹

    文章插圖
    1. 客戶端向 Spring Cloud Gateway 發出請求
    2. Spring Cloud Gateway 通過 Gateway Handler Mapping 找到與請求相匹配的路由,將其發送到 Gateway Web Handler 。
    3. Gateway Web Handler 通過指定的過濾器鏈(Filter Chain)來處理請求,然后發送到實際的執行業務服務中,業務邏輯執行完后返回 。
    4. 業務邏輯執行完成后,又經過了過濾器鏈(Filter Chain),這里又可以對執行完后的業務邏輯進行加工處理 。
    說明:過濾器鏈中的虛線分開過過濾器,是表示過濾器會在業務邏輯處理之前進行 Filter 或處理完之后在進行 Filter 。
    在請求轉發到服務端前(Proied Service 前),可以進行 Filter 處理(上圖中虛線左邊部分),例如權限檢查、參數效驗、流量監控、協議轉換等處理 。
    在服務端處理完業務邏輯后,也可以進行 Filter 處理(上圖中虛線右邊部分),例如修改響應頭、日志輸出、流量監控等處理 。
    三、Apache ShenYu(神禹)3.1 介紹Apache ShenYu 是使用 Java reactor 編程方式開發的,是一個可擴展、高性能、響應式的 API 網關 。
    官網:ShenYu 官網
    Doc: ShenYu Doc
    3.2 架構ShenYu version:2.5.0
    整體架構流程圖
    11 微服務架構學習與思考:開源 API 網關02-以 Java 為基礎的 API 網關詳細介紹

    文章插圖
    (來自:https://github.com/apache/shenyu)
    • ShenYu Cluster
    • ShenYu Admin,管理 ShenYu gateway
    • Plugin
    流量進入 -> ShenYu Cluster —> Predicate斷言匹配 -> Filter -> Plugins
    ShenYu 中的一些概念插件、選擇器、規則,這些元素都可以在 ShenYu Admin UI 后臺進行配置管理 。
    • 插件:Apache ShenYu 使用插件化設計思想,可以實現插件的熱插拔 , 易擴展 。內置了豐富的插件,包括 RPC 代理、熔斷和限流、權限認證、監控等等 。
    • 選擇器:每個插件可以設置多個選擇器 , 對流量進行初步篩選 。
    • 規則:每個選擇器可以設置多個規則 , 對流量進行更細粒度的控制 。
    插件、選擇器和規則執行規則:
    當流量進入到 Apache ShenYu 網關之后,會先判斷是否有對應的插件,該插件是否開啟;
    然后判斷流量是否匹配該插件的選擇器 。
    然后再判斷流量是否匹配該選擇器的規則 。
    如果請求流量能滿足匹配條件才會執行該插件 , 否則插件不會被執行,處理下一個 。
    他們之間的數據關系,數據庫 UML 圖:
    11 微服務架構學習與思考:開源 API 網關02-以 Java 為基礎的 API 網關詳細介紹

    文章插圖
    ?(來自:https://shenyu.apache.org/zh/docs/design/database-design)
    說明:一個插件可以對應多個選擇器 , 一個選擇器可以對應多個規則,一個規則可以對應多個匹配條件 。
    3.3 ShenYu Admin 后臺管理Apache ShenYu Admin 是網關的后臺管理系統,能夠可視化管理所有插件、選擇器和規則,設置用戶、角色、控制資源 。

    推薦閱讀