Spring Cloud Tencent 是騰訊開源的一站式微服務解決方案。
Spring Cloud Tencent 實現了Spring Cloud 標準微服務 SPI,開發者可以基於 Spring Cloud Tencent 快速開發 Spring Cloud 雲原生分布式應用。 Spring Cloud Tencent 的核心依託騰訊開源的一站式服務發現與治理平台 PolarisMesh ,實現各種分布式微服務場景。
一、 PolarisMesh 是什麼?
北極星是騰訊開源的服務治理平台,致力於解決分布式和微服務架構中的服務管理、流量管理、配置管理、故障容錯和可觀測性問題,針對不同的技術棧和環境提供服務治理的標準方案和最佳實踐。下面介紹北極星的應用場景、功能特性、系統組件和常見問題。支持多語言、多框架的雲原生服務治理平台,服務管理、流量管理、故障容錯、配置管理、可觀測性。
1.1 一站式服務治理平台
北極星為服務治理提供一站式解決方案,覆蓋服務註冊中心、服務網格和配置中心的功能,提供業務監控、流量監控、事件中心和操作記錄等全方位的可觀測性能力,幫助用戶快速構建微服務架構。
1.2 支持異構技術棧和環境
通過 Proxyless 和 Proxy 兩種形態實現服務發現和治理,提供多語言 SDK、開發框架、Java Agent 和網格代理等接入方式,支持虛擬機、容器和混合雲等部署環境,滿足不同業務場景和開發模式。
1.3 支持常用開發框架
提供 Spring Cloud,Dubbo 和 gRPC 等開發框架無縫集成北極星的依賴包,使用開發框架的用戶不需要改動業務代碼即可接入。
1.4 兼容 Kubernetes
提供 K8s Controller,支持 K8s 服務註冊和網格代理注入,可以實現 K8s 和非 K8s 服務、多個 K8s 集群之間的服務發現和治理。
二、具備那些功能?
北極星具備服務管理、流量管理、故障容錯、配置管理和可觀測性五大功能:
- 服務管理:包含服務發現、服務註冊、健康檢查和元數據管理。 服務發現:支持 HTTP、SDK 和 DNS 服務發現方式。服務註冊:支持 HTTP、SDK、控制台操作和 K8s 服務註冊方式。健康檢查:支持服務實例上報心跳,通過心跳判斷實例是否健康,及時剔除異常實例。元數據管理:支持在服務和實例上配置協議、版本和位置等標籤,實現動態路由等功能。
- 流量管理:包含動態路由、負載均衡和訪問限流。 動態路由:支持自定義路由策略,將服務的部分請求路由到部分實例,用於灰度發布等應用場景。負載均衡:支持權重輪訓、權重隨機和權重一致性 Hash 等負載均衡算法。訪問限流:支持本地和分布式兩種模式,被限流的請求支持排隊和自定義響應。
- 故障容錯:包含服務熔斷和節點熔斷。 服務熔斷:對服務或者接口進行熔斷,如果服務或者接口發生熔斷,返回自定義響應。節點熔斷:對服務實例進行熔斷,不會將請求路由到熔斷的服務實例,降低請求失敗率。主動探測:服務和節點熔斷除了被動探測,還支持主動探測,進一步降低請求失敗率。
- 配置管理:包含配置變更、配置校驗、版本管理和灰度發布等功能。
- 可觀測性:提供業務流量、系統事件和操作記錄等監控視圖。
北極星的功能需要控制面和數據面配合實現:
- 控制面:負責服務和配置數據的管理和下發,負責流量管理和熔斷降級策略的管理和下發。
- 數據面:負責全部服務發現和治理功能的客戶端實現,採用插件化設計,支持按需加載和使用。
數據面功能分為三個部分:
- 服務作為被調:當一個服務被其他服務調用時,可以使用服務註冊、上報心跳、訪問限流和訪問鑒權功能。
- 服務作為主調:當一個服務調用其他服務時,可以使用服務發現、動態路由、負載均衡和熔斷降級功能。
- 公共部分:支持拉取配置數據和上報監控數據
三、 包含那些組件
北極星的系統組件分為控制台、控制面和數據面三個部分:
- 控制台:提供簡單易用的管理頁面,支持用戶和權限管理。
- 控制面:包含核心組件 Polaris 和可選的功能組件,核心組件可以滿足絕大部分業務需求,可選的功能組件按需部署。
- 數據面:提供多語言 SDK、開發框架、Java Agent 和網格代理四種形態的實現,滿足不同的業務場景和開發模式,支持異構服務的互聯互通和統一治理。
控制面組件:
- Polaris:支持各種形態的數據面接入,支持服務和配置數據的管理和下發,支持流量管理和熔斷降級策略的管理和下發,可以覆蓋服務註冊中心、服務網格控制面和配置中心的功能。
- Polaris Controller:可選的功能組件,支持 K8s 服務同步和網格代理注入。K8s 服務同步將 K8s 服務按需同步到北極星,用戶不需要在應用程式里顯式地註冊服務。網格代理注入按需在應用程式 Pod 里注入北極星 Sidecar,以流量代理的方式實現服務發現和治理功能。
數據面組件:
- SDK:北極星提供輕量級的多語言 SDK,使用方法和絕大部分客戶端軟體類似,用戶在應用程式里引入北極星 SDK。這種數據面形態以無流量代理的方式實現服務發現和治理功能,沒有額外的性能和資源損耗,不會增加現網運維和問題定位的成本。
- 開發框架:北極星 SDK 可以被集成到開發框架內部,如果用戶使用開發框架,不需要顯式地引入北極星 SDK。對於 Spring Cloud、Dubbo 和 gRPC 等開發框架,北極星提供可以無縫集成的依賴包。另外,go-micro、go-kratos、go-zero、GoFrame 和 CloudWeGo 等開發框架社區也提供北極星插件。
- Java Agent:對於 Spring Cloud 和 Dubbo 等 Java 開發框架,北極星支持 Java 生態常用的 Agent 接入模式。用戶只需要在應用程式的啟動命令中引入 Polaris Java Agent,即可將北極星的服務發現和治理功能引入應用程式,不需要改動任何代碼和配置文件。
- 網格代理:北極星網格代理在應用程式 Pod 里注入 Polaris Sidecar 和 Proxy,前者通過劫持 DNS 解析將請求轉到後者,後者通過流量代理實現服務發現和治理功能。這種數據面形態適合性能和資源損耗不敏感的業務,要求業務具備網格代理的運維能力。
四、環境體驗
- 管控台地址: http://14.116.241.63:8080/ 帳號:polaris密碼:polaris
- 控制面地址: gRPC://183.47.111.80:8091
spring-cloud-tencent-example 下 example 地址都默認指向了體驗服務地址(grpc://183.47.111.80:8091),如果您只是體驗 Spring Cloud Tencent,可直接一鍵運行任何 example。
五、項目概覽
5.1 pom 結構圖
5.2 模塊依賴圖
5.3 模塊說明
模塊名 |
模塊說明 |
spring-cloud-tencent-commons |
所有模塊的基礎模塊,定義最核心的工具類,數據模型 |
spring-cloud-tencent-plugin-starters |
插件模塊,提供常見場景的快速應用 |
spring-cloud-tencent-polaris-context |
polaris 的上下文模塊,例如裝載 polaris 服務的地址信息等。所有 polaris starter 都依賴此模塊 |
spring-cloud-tencent-polaris-loadbalancer |
polaris 的負載均衡模塊,用於承載 polaris 的路由插件 |
spring-cloud-tencent-rpc-enhancement |
RPC調用增強模塊,提供 Feign、RestTemplate 的增強拓展功能 |
spring-cloud-starter-tencent-metadata-transfer |
擴展 feign 的能力,自動在鏈路上傳遞元信息。例如用於路由標籤信息傳遞、tracer上下文信息傳遞等 |
模塊名 |
模塊說明 |
spring-cloud-starter-tencent-polaris-discovery |
北極星的服務發現模塊 |
spring-cloud-starter-tencent-polaris-ratelimit |
北極星的限流模塊 |
spring-cloud-starter-tencent-polaris-circuitebreaker |
北極星的熔斷模塊 |
spring-cloud-starter-tencent-polaris-router |
北極星的路由模塊 |
spring-cloud-starter-tencent-polaris-config |
北極星的配置中心模塊 |
5.4 目錄結構
spring-cloud-tencent
|
-- pom.xml
|
-- spring-cloud-tencent-dependencies
|
-- spring-cloud-tencent-examples
|
-- spring-cloud-tencent-commons
|
-- spring-cloud-tencent-polaris-context
|
-- spring-cloud-tencent-polaris-loadbalancer
|
-- spring-cloud-starter-tencent-metadata-transfer
|
-- spring-cloud-starter-tencent-polaris-discovery
|
-- spring-cloud-starter-tencent-polaris-ratelimit
|
-- spring-cloud-starter-tencent-polaris-circuitbreaker
|
-- spring-cloud-starter-tencent-polaris-router
|
-- spring-cloud-starter-tencent-polaris-config
|
-- spring-cloud-tencent-rpc-enhancement
|
-- spring-cloud-tencent-plugin-starters
|
-- spring-cloud-tencent-featureenv-plugin
|
-- spring-cloud-tencent-gateway-plugin
六、 開源地址
github: https://github.com/Tencent/spring-cloud-tencent
gitee: https://gitee.com/Tencent/spring-cloud-tencent