常用的Spring Cloud體系架構
系統部署採用阿里雲平臺,採用的技術架構為SpringCloud.
採用線上阿里雲架構製圖工具: Freedgo Design 地址:https://www.freedgo.com, 具體架構如下:
整體架構
主要居於Spring Cloud的分散式微服務架構。主要功能包括:
服務註冊發現中心(Eureka server)
通過服務發現可以抽象出部署服務的物理位置如IP,服務呼叫通過了邏輯名稱而不是實際的物理位置,同時服務發現也處理了註冊和登出。
服務配置中心(config server)
通過集中式的服務來處理應用程式配置資料。做到無論啟動多少個微服務例項,這些例項始終使用相同的配置,同時服務的配置可以和微服務系統分離
服務閘道器(ZUUL)
通過ZUUL閘道器,可以強制執行一些功能如內容過濾,路由轉發,過濾器等等
Spring Sleuth & ZIPKIN(分散式服務跟蹤)
通過Sleuth 相關ID進行全鏈路跟蹤,可以分析服務呼叫的效能
事件驅動及非同步訊息
用於處理非同步事件如短訊息推送,郵件傳送等。
使用者認證中心(auth2)
ZUUL閘道器
ZUUL閘道器主要的功能
路由及過濾器設定
通常在ZUUL閘道器設定過濾器包括前置過濾器、後置過濾器、路由過濾器,可以自定義一些邏輯,在大多數情況下,這種自定義邏輯用於強制執行一組一致的應用程式策略,如安全性、日誌記錄和對所有服務的跟蹤等等。
路由的設定可以指定路由地址URL對應的微服務如下圖:
服務註冊與發現:
ZUUL閘道器伺服器通過註冊到Eureka伺服器,實現了Eureka上註冊的微服務的發現從而轉發使用者的請求到各應用模組,閘道器伺服器中Ribbon同時會快取微服務相關資訊以減少對EureKa訪問。
微服務應用
Oauth2授權訪問
ZUUL閘道器負責請求的路由轉發,Request請求不僅僅來在使用者瀏覽器,有可能是微服務之間的相互呼叫。
登入使用者請求或服務之前呼叫會在request請求頭中攜帶Authorization 頭資訊來表示當前使用者的身份資訊,
Http Restful Api
微服務應用採用 Spring RestController 對外發布 Http Restful Api服務,
微服務之間的呼叫
微服務之間相互呼叫而不必知道被呼叫者所在位置是通過Eureka服務發現實現,當微服務啟動時會註冊自己到Eureka服務中心,服務消費者可以使 Ribbon 來進行互動。有三種方式的呼叫:
- Spring DiscoveryClient
- 啟用了 RestTemplate 的 Spring DiscoveryClient
- 通過 Netflix Feign 客戶端方式
部署方案(docker)
採用Docker通過spotify 的docker-maven-plugin工具進行docker image進行打包映象
灰度測試
通過ZUUL的過濾對新上線的服務做路由的權重演算法,做到限流,A/B測試。
平臺開發
- 開發語言:java,Java是一種可以撰寫跨平臺應用程式的物件導向的程式設計語言。
- 開發工具:eclipse,Eclipse 是一個開放原始碼的、基於Java的可擴充套件開發平臺。就其本身而言,它只是一個框架和一組服務,用於通過外掛元件構建開發環境。
- 主要使用的開源軟體
軟體 | 功能 | 版本 |
---|---|---|
JDK | JAVA開發SDK包 | 1.8 以上 |
Ubuntu | Linux伺服器作業系統 | 14 |
MySQL | 資料庫 | 5.7+ |
Maven | java 專案構建工具 | 4.0 |
Spring Framework | 系統架構 | 5.0以上 |
Spring cloud | 分散式微服務 | 2.0+ |
kafka | 訊息訂閱釋出框架 | |
Redis | 高效能Key value儲存 | |
Docker |