SpringCloud微服務系列- 分散式能力建設之微服務閘道器

欢乐豆123發表於2024-06-29

SpringCloud微服務系列- 分散式能力建設之微服務閘道器

概要

在微服務環境中,閘道器是微服務叢集中必不可少的設施之一。

微服務中閘道器的首要職責,就是以統一的地址對外提供服務,將外部訪問這個地址的流量,根據適當的規則路由到內部叢集中正確的服務節點之上。也正是因為這樣,微服務中的閘道器,也常被稱為“服務閘道器”或者“API 閘道器”。

閘道器 = 路由器(基礎職能) + 過濾器(可選職能)

一、 Spring Cloud Gateway的相關介紹

在各種微服務閘道器元件中,Zuul、Zuul2基於servlet阻塞式IO開發出來的,效能比較差,已經被淘汰了。

Spring Cloud Gateway是Spring Cloud生態系統中的閘道器,它是基於Spring5.0、SpringBoot2.O和Project Reactor等技術開發的,旨在為微服務架構提供一種簡單有效的、
統一的API路由管理方式,併為微服務架構提供安全、監控、指標和彈性等功能。其目標是替代Zuul。

注意:Spring Cloud Gateway用 "Netty + Webflux" 實現,不要加入Web依賴,否則會報錯,它需要加入Webflux依賴。

1) 什麼是Webflux

Webflux模式替換了舊的Servlet執行緒模型。用少量的執行緒處理request和response io操作,這些執行緒稱為Looρ執行緒,而業務交給響應式程式設計框架處理,響應式程式設計是非常靈活
的,使用者可以將業務中阻塞的操作提交到響應式框架的wok執行緒中執行,而不阻塞的操作依然可以在Loop執行緒中進行處理,大大提高了Loop執行緒的利用率。

注意:Webflux雖然可以相容多個底層的通訊框架,但是一般情況下,底層使用的還是Netty,畢竟,Netty是目前業界認可的最高效能的通訊框架。而webflux的Loop執行緒
正好就是著名的Reactor模式lO處理模型的Reactor執行緒,如果使用的是高效能的通訊框架Netty。

2)什麼是Netty

Netty是一個基於NIO的客戶、伺服器端的程式設計框架。提供非同步的、事件驅動的網路應用程式框架和工具,用以快速開發高效能、高可靠性的網路伺服器和客戶端程式。


二、 Spring Cloud Gateway 特點

1)易於編寫謂詞(Predicates)和過濾器(Filters)。其Predicates和Filters可作用於特定路由。

2)支援路徑重寫。

3)支援動態路由。

4)整合了Spring Cloud DiscoveryClient(服務發現)

三、Spring Cloud Stream

1. 什麼是Spring Cloud Stream?
官方定義Spring Cloud Stream是一個構建訊息驅動微服務的框架。實現了一套輕量級的訊息驅動的微服務框架。透過使用Spring Cloud Stream,可以有效簡化開發人員對訊息中介軟體的使用複雜度,讓系統開發人員可以有更多的精力關注於核心業務邏輯的處理。

2. 為什麼使用Spring Cloud Stream?

流行的訊息中介軟體過多,有可能一個工程中使用MQ,比方說我們用到了RabbitMQ和Kafka,由於這兩個訊息中介軟體的架構上的不同,像RabbitMQ有exchange,kafka有
Topic,partitions 分割槽,這些中介軟體的差異性導致我們實際專案開發給我們造成了一定的困擾,我們如果用了兩個訊息佇列的其中一種,後面的業務需求,我想往另外一種訊息佇列進行遷移,這時候無疑就是一個災難性的,一大堆東西都要重新推倒重新做,因為它跟我們的系統耦合了,這時候springcloud Stream給我們提供了一種解耦合的方式。

作用:遮蔽底層訊息中介軟體的差異,降低了切換成本,統一了訊息的程式設計模型

注意:
Stream解決了開發人員無感知的使用訊息中介軟體的問題,因為Stream對訊息中介軟體的進一步封裝,可以做到程式碼層面對中介軟體的無感知,甚至於動態的切換中介軟體,使得微
服務開發的高度解耦,服務可以關注更多自己的業務流程。

我們之前使用的資料庫連結工具:JDBC

相關文章