在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

分布式網關介紹及動態路由實現

jf_78858299 ? 來源:牧羊人的方向 ? 作者:大唐小少 ? 2023-05-04 17:37 ? 次閱讀

服務網關作為分布式系統對外服務的統一入口,設計功能上具有路由轉發、熔斷限流、安全認證以及監控等功能。本文簡要介紹服務網關的基本概念,以及動態路由的實現方式,以加深了解。

1、什么是分布式服務網關

1.1 服務網關的基本概念

網關是客戶端訪問系統請求及系統響應所要經過的網絡關口,網關封裝了系統內部功能架構,為每個客戶端訪問提供不同的接口。網關在功能上主要是進行請求過濾,具體包括請求路由轉發、安全認證、流量控制、負載均衡、日志、監控等功能。

在分布式系統尤其是微服務架構中,一個應用系統被拆分為多個服務,但是像路由請求、安全認證、流量控制、日志和監控等功能對每個服務來說都是標準的功能模塊。如果沒有服務網關,那么每個服務就需要單獨實現一套這樣的模塊,功能重復并且不利于統一管理。另外,多個微服務可能部署在不同的服務器上,傳統的直接訪問應用服務的方式增加了客戶端的復雜度,因此需要一個統一的客戶端訪問入口進行標準化管理。

圖片

1.2 服務網關的作用及功能

服務網關作為客戶端請求的統一入口,具備以下功能:

  1. 動態路由 :根據請求路由到對應的服務上去,如果服務不可用還會有重試機制
  2. 負載均衡 :多服務器提供同一種服務,網關會從配置中心拉取各服務注冊信息,然后將請求負載到這些服務器進行處理
  3. 流量控制 :限制并發請求的流量,避免內部系統受到沖擊
  4. 安全認證 :網關對相關權限驗證、脫敏和流量清洗、簽名和黑名單功能
  5. 熔斷降級 :當服務不可用或者訪問量過大,網關可以將請求做降級,將流量打到其他服務器或者做其他處理,提示用戶暫時不可用
  6. 灰度發布 :先進行小部分服務器升級,通過網關將少量的服務路由到已升級的服務器用來測試服務是否正常,大部分請求依舊在老版本服務器上處理
  7. 日志服務 :服務訪問情況監控和統計報表,請求的吞吐量、并發數、流量監控、性能監控和日常告警等
1.3 常見的分布式服務網關

常見的分布式服務網關有以下幾種:

  1. Nginx+Lua :基于Nginx的服務端網關方案,實現web服務器、反向代理、負載均衡、動靜分離等功能;
  2. Kong :基于OpenResty實現,是一款高性能、云原生、可擴展的網關系統;
  3. SpringCloud Zuul :基于Netty實現了異步IO,可自定義過濾器來處理請求,同時提供了動態路由、監控、彈性負載和安全功能
  4. SpringCloud Gateway :基于Spring WebFlux,提供統一的路由方式,并且基于Filter鏈的方式提供了網關的基本功能,如安全、限流、監控等
1.3.1 Nginx+Lua實現

在《簡單聊聊Nginx實現原理》中對Nginx的功能做了簡單的介紹,可以實現反向代理、負載均衡、動靜分離等功能。

圖片

1.3.2 Kong

Kong基于OpenResty實現 ,OpenResty是基于Nginx的庫,它將Nginx進行封裝,使用Lua腳本就可以對Nginx進行插件化管理。

  • 使用PostgreSQL或Cassandra來對其配置文件進行持久化存儲,使得可以進行集群管理
  • 提供了插件模型,使用 Lua腳本來對Nginx整個生命周期進行擴展 。實現了一些常用插件( 限流、熔斷、驗權等 )
  • 提供了Http/Rest的接口來實現配置,使得其可以更簡單的構建圖形化界面進行動態配置

圖片

1.3.3 Spring Cloud Zuul

Zuul是來自Netflix的基于JVM的路由器和服務器端負載均衡器,為微服務架構提供了前門保護的作用,同時將權限控制這些較重的非業務邏輯內容遷移到服務路由層面,使得服務集群主體能夠具備更高的可復用性和可測試性。官方定義如下:

Zuul是在云平臺上提供動態路由,監控,彈性,安全等邊緣服務的框架。Zuul 相當于是設備和 Netflix 流應用的 Web 網站后端所有請求的前門。即Zuul為微服務集群提供代理、過濾和路由等功能。

Zuul會把外部的請求過程分為不同階段,每個階段提供一系列的過濾器。這些過濾器實現了以下功能:

  1. 身份驗證和安全性 :對需要身份驗證的資源進行過濾,拒絕處理不符合身份認證的請求。
  2. 觀察和監控 :跟蹤重要的數據,為我們展示準確的請求狀況
  3. 動態路由 :將請求動態路由到不同的服務集群
  4. 負載均衡 :設置每種請求的處理能力,刪除那些超出限制的請求
  5. 靜態響應處理 :提供靜態的過濾器,直接響應一些請求,而不將它們轉發到集群內部
  6. 路由多樣化 :除了將請求路由到Spring Cloud集群內部,還可以將請求路由到其他服務

圖片

Zuul的 核心原理是一系列filters ,在請求路由合并到用戶處理邏輯的過程中,這些過濾器參與驗證、加載等過濾處理。zul定義了四種標準過濾器類型,用于請求的典型生命周期。

  1. PRE:這樣的過濾器在請求被路由之前被調用 。可以利用這樣的過濾器實現認證,選擇集群內要求的微服務器,記錄調試信息。
  2. ROUTING:該過濾器將請求路由到微服務 。此過濾器用于生成發送到微服務的請求,并使用Apachehttp客戶端或Netfilx Ribbon請求微服務。
  3. POST:在路由到微服務之后執行該過濾器 。使用此過濾器可以將標準HTTP Header添加到響應中,收集統計信息和指標,以及將響應從微服務器發送到客戶端。
  4. ERROR:如果在其他階段發生錯誤 ,則執行該過濾器。
1.3.4 Spring Cloud Gateway

Spring Cloud Gateway是Spring官方基于Spring5.0,Spring Boot2.0和Project Reactor等技術開發的網關,Spring Cloud Gateway旨在為微服務架構提供簡單,有效且統一的API路由管理方式。 Spring Cloud Gateway作為Spring Cloud 生態系統中的網關 ,目標是替代Netflix Zuul,其不僅提供統一的路由方式,并且還基于Filter鏈的方式提供了網關基本的功能,例如:安全,監控、埋點,限流等。

圖片

1)Spring Cloud Gateway特性

  • 基于Spring Framework 5、Reactor和Spring Boot 2.0框架。
  • 根據請求的屬性可以匹配對應的路由。
  • 集成Hystrix。
  • 集成Spring Cloud DiscoveryClient。
  • 把易于編寫的Predicates和Filters作用于特定路由。
  • 具備一些網關的高級功能,如動態路由、限流、路徑重寫。

2)Spring Cloud Gateway核心概念

  • Filter(過濾器) :和Zuul的過濾器在概念上類似,可以使用Filter攔截和修改請求,實現對上游的響應,進行二次處理,實現橫切與應用無關的功能,如安全、訪問超時設置、限流等功能。
  • Route(路由) :網關配置的基本組成模塊,和Zuul的路由配置模塊類似。一個Route模塊由一個ID、一個目標URI、一組斷言和一組過濾器組成。如果斷言為真,則路由匹配,目標URI會被訪問。
  • Predicate(斷言) :Predicate來自Java 8的接口,它可以用來匹配來自HTTP請求的任何內容,例如headers或參數。接口包含多種默認方法,并將Predicate組合成復雜的邏輯(與、或、非),可以用于接口參數校驗、路由轉發判斷等。

3)Spring Cloud Gateway核心處理流程

圖片

  1. Gateway的客戶端回向Spring Cloud Gateway發起請求
  2. 請求首先會被HttpWebHandlerAdapter進行 提取組裝成網關的上下文 ,然后網關的上下文會傳遞到DispatcherHandler。
  3. DispatcherHandler是所有請求的分發處理器,DispatcherHandler主要 負責分發請求對應的處理器 ,比如將請求分發到對應RoutePredicateHandlerMapping(路由斷言處理器映射器)。
  4. 路由斷言處理映射器 主要用于路由的查找 ,以及找到路由后返回對應的FilteringWebHandler。
  5. FilteringWebHandler主要 負責組裝Filter鏈表并調用Filter執行一系列Filter處理 ,然后把請求轉到后端對應的代理服務處理,
  6. 處理完畢后,將Response 返回到Gateway客戶端
1.3.5 Zuul和Gateway對比

Spring cloud Zuul和Spring Cloud Gateway處理的都是http請求,底層是serverlet服務。不同之處有以下幾點:

  • 內部實現
    • gateway對比zuul多依賴了spring-webflux,在spring的支持下,功能更強大,內部實現了限流、負載均衡等,擴展性也更強,但同時也限制了僅適合于Spring Cloud套件
    • zuul則可以擴展至其他微服務框架中,其內部沒有實現限流、負載均衡等
  • 是否支持異步
    • Zuul 1.x只支持同步。Zuul 2.x基于Netty實現了異步IO
    • Gateway支持異步。 理論上gateway則更適合于提高系統吞吐量(但不一定能有更好的性能),最終性能還需要通過嚴密的壓測來決定
  • 擴展性
    • Gateway具有更好的擴展性,穩定性也是非常好的
  • 性能
    • Spring webflux 有一個全新的非堵塞的函數式 Reactive Web 框架,可以用來構建異步的、非堵塞的、事件驅動的服務,在伸縮性方面表現非常好
    • Zuul 1.x,是一個基于阻塞io的API Gateway。Zuul已經發布了Zuul 2.x,基于Netty,也是非阻塞的,支持長連接,但Spring Cloud暫時還沒有整合計劃

在實際生產使用中,Zuul 1.x雖然使用的是同步io,但是可以通過參數優化提高性能理論上可以達到極限性能,而springcloud gateway使用的是異步io,不需優化既可以達到接近極限的性能。

2、分布式網關動態路由實現

相比較靜態路由,動態路由的好處是對路由配置的修改、新增或者刪除,可以動態生效,不需要重啟網關服務。這里主要介紹 基于Spring Cloud Gateway的動態路由幾種實現方式 ,包括:

  • 基于Nacos
  • 基于數據庫
  • 基于內存
2.1 基于Nacos的動態路由

Nacos集成在Spring Cloud中,提供了快速實現動態服務發現、服務配置、服務元數據及流量管理等功能。基于Nacos動態路由是通過Nacos更新修改路由配置,通過接口調用動態更新到本地緩存中。

圖片

1)加載配置和監聽路由

configInfo = configService.getConfig(NACOS_ROUTE_DATA_ID, NACOS_ROUTE_GROUP, DEFAULT_TIMEOUT);
configService.addListener(dataId, group, new Listener()

2)路由的動態添加和刪除

routeDefinitionWriter.delete(Mono.just(id)).subscribe()
routeDefinitionWriter.save(Mono.just(definition)).subscribe();

3)路由信息刷新到本地緩存

publisher.publishEvent(new RefreshRoutesEvent(this));
2.2 基于數據庫的動態路由

基于數據庫的動態路由實現,是 將路由信息寫入數據庫中 ,再通過接口讀取路由配置信息以及更新路由信息,最后刷新到本地緩存中。

圖片

2.3 基于內存的動態路由

基于本地內存的方式比較簡單,Spring Boot已經提供了兩個組件Spring Boot Admin和Spring Boot Actuator。 通過調用接口更新路由信息,再刷新即可完成路由更新

o.s.c.g.a.GatewayControllerEndpoint:
{GET /routes/{id}}: route(String)
{GET /routes}: routes()
{GET /routedefinitions}: routesdef()
{GET /globalfilters}: globalfilters()
{GET /routefilters}: routefilers()
{GET /routepredicates}: routepredicates()
{GET /routes/{id}/combinedfilters}: combinedfilters(String)
{DELETE /routes/{id}}: delete(String)
{POST /routes/{id}}: save(String,RouteDefinition)
{POST /refresh}: refresh()

圖片

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 網關
    +關注

    關注

    9

    文章

    4528

    瀏覽量

    51225
  • 路由
    +關注

    關注

    0

    文章

    278

    瀏覽量

    41874
收藏 人收藏

    評論

    相關推薦

    分布式軟件系統

    降到最低。負載在各處理機之間分擔,可以避免臨界瓶頸。 4、當現有機構中已存在幾個數據庫系統,而且實現全局應用的必要性增加時,就可以由這些數據庫自下而上構成分布式數據庫系統。 5、相等規模的分布式
    發表于 07-22 14:53

    關于分布式系統的全面介紹

    操作系統-----分布式系統概述
    發表于 07-25 06:59

    如何設計分布式干擾系統?

    ”的電子戰系統,共同完成對敵信號的探測、定位、干擾任務。因此,嵌入網關分布式干擾系統研究的關鍵技術之一。目前國內對分布式干擾系統的研究還停留在理論基礎上,而對其關鍵技術的研究不多。
    發表于 08-08 06:57

    HarmonyOS應用開發-分布式設計

    設計理念HarmonyOS 是面向未來全場景智慧生活方式的分布式操作系統。對消費者而言,HarmonyOS 將生活場景中的各類終端進行能力整合,形成“One Super Device”,以實現
    發表于 09-22 17:11

    如何高效完成HarmonyOS分布式應用測試?

    對HarmonyOS分布式應用測試解決方案,具體方案介紹如下。二、分布式應用測試解決方案DevEco Testing是一款全新的HarmonyOS測試解決方案。如圖2所示,是DevEco Testing測試能力
    發表于 12-13 18:07

    分布式軟總線實現近場設備間統一的分布式通信管理能力如何?

    現實中多設備間通信方式多種多樣(WIFI、藍牙等),不同的通信方式使用差異大,導致通信問題多;同時還面臨設備間通信鏈路的融合共享和沖突無法處理等挑戰。那么分布式軟總線實現近場設備間統一的分布式通信管理能力如何呢?
    發表于 03-16 11:03

    基于ZigBee的分布式井蓋監控系統

    隨著我國現代經濟發展水平的不斷提高,城市井蓋數目逐漸增加。由于較多井蓋被盜,致使路面形成陷阱,危害到過往車輛和行人安全。本文提出了一種基于 ZigBee無線網絡的智能安全監控系統,解決分布式布控困難
    發表于 09-18 08:46

    WebGIS動態匹配分布式設計

    針對WebGIS 在稅務系統應用中遇到的對地圖數據要求動態更新和動態匹配的問題進行了分析,給出了納稅戶到街道動態匹配的方法,結合分布式對象技術,對納稅戶到街道
    發表于 06-16 09:27 ?10次下載

    F0rCES路由分布式事務研究

    研究了分布式事務在ForCES路由器中的應用及實現機制。首先對ForCES中分布式事務的需求做了詳細分析,在此基礎上將修改的2PC機制引入ForCES,之后提出了一種基于狀態機的
    發表于 09-26 15:24 ?17次下載
    F0rCES<b class='flag-5'>路由</b>器<b class='flag-5'>分布式</b>事務研究

    基于Dijkstra算法的分布式電能路由策略的實現

    拓撲;以Dijkstra為基礎,節點僅根據其相鄰節點的狀態調節其自身狀態,搜尋最短路徑,完成電能路由實現電能的分布式管理和協調控制,使系統運行在優化狀態。多代理系統(multi-agent system,MAS)技術為
    發表于 12-22 11:46 ?5次下載
    基于Dijkstra算法的<b class='flag-5'>分布式</b>電能<b class='flag-5'>路由</b>策略的<b class='flag-5'>實現</b>

    分布式無紙化交互系統的實現原理

    維訊維分布式無紙化交互系統的實現原理主要是基于IP分布式網絡,將分布式系統、無紙化系統、會議智慧屏、顯示大屏幕等有機融合,實現數據的
    的頭像 發表于 09-04 16:11 ?637次閱讀

    springcloud如何實現分布式

    Spring Cloud是基于Spring Boot開發的一套分布式系統解決方案,它主要包括了多個子項目,如服務注冊與發現、配置中心、負載均衡、斷路器、路由等等。通過使用Spring Cloud
    的頭像 發表于 11-16 11:01 ?698次閱讀

    如何實現Redis分布式

    機制,下面將詳細介紹如何實現Redis分布式鎖。 一、引言 在分布式系統中,多個節點可能同時讀寫同一共享資源。如果沒有實現互斥訪問和同步機制
    的頭像 發表于 12-04 11:24 ?721次閱讀

    分布式鎖的三種實現方式

    ,下面將分別介紹三種常見的實現方式。 一、基于數據庫實現分布式鎖 在分布式系統中,數據庫是最常用的共享資源之一。因此,可以通過數據庫的特性
    的頭像 發表于 12-28 10:01 ?929次閱讀

    Redis實現分布式多規則限流的方式介紹

    市面上很多介紹 Redis 如何實現限流的,但是大部分都有一個缺點,就是只能實現單一的限流,比如 1 分鐘訪問 1 次或者 60 分鐘訪問 10 次這種,但是如果想一個接口兩種規則都需要滿足呢,我們的項目又是
    的頭像 發表于 02-26 10:07 ?519次閱讀
    Redis<b class='flag-5'>實現</b><b class='flag-5'>分布式</b>多規則限流的方式<b class='flag-5'>介紹</b>
    主站蜘蛛池模板: 天天摸天天做天天爽| 亚州免费一级毛片| 好爽好大www视频在线播放| 老湿影院免费体验区| 69日本xxxxxxxxx19| 人人看人人做人人爱精品| 色天使视频| 欧美综合影院| 噜噜噜狠狠夜夜躁| 看大片全色黄大色黄| 日本在线观看一区| 国产精品久久久久久久免费大片 | 亚洲ay| 天堂电影在线| 欧美一级视频在线观看欧美| 精品欧美一区二区三区在线观看| 国产成人亚洲综合a∨婷婷| 夜夜操网| 男女一级大黄| 黄色在线观看视频网站| 国产在线99| 色伊人网| 亚欧色视频在线观看免费| 手机在线色| 女性一级全黄生活片免费看| 韩国a级床戏大尺度在线观看| 成人亚洲精品| 毛片午夜| 69pao强力打造免费高清| 91九色porny蝌蚪| 色香视频在线| 国产一级特黄的片子| 亚洲免费黄色网址| www天天操| 老熟女一级毛片| 手机精品在线| 国产色妞妞在线观看| 天天操夜夜干| 永久免费av网站| 四虎影院新网址| 日本污视频网站|