
本文作者:玄北(曹傑),螞蟻金服 SOFAStack 開源組核心成員。
本文根據 5月26日 SOFA Meetup#2 上海站 《當 Spring Cloud 遇上 SOFAStack》主題分享整理,主要來聊聊 spring-cloud-antfin 包含的主要特性及如何使用 SOFAStack 和 SpringCloud 快讀建構微服務系統。
現場回顧視訊以及 PPT 見文末連結。
概念
Spring Cloud 是 Spring 社群開源的一套微服務開發架構,幫助開發人員快速建構分布式應用,Spring Cloud 的官網介紹如下:
Spring Cloud provides tools for developers to quickly build some of the common patterns in distributed systems (e.g. configuration management, service discovery, circuit breakers, intelligent routing, micro-proxy, control bus, one-time tokens, global locks, leadership election, distributed sessions, cluster state).
螞蟻金服從 2007 年開始在公司内部使用 SOFAStack 架構,2014 年基于 Spring Boot 研發了 SOFABoot,2016 年将 SOFAStack 在公有雲輸出,2018 年 4 月,螞蟻金服宣布開源 SOFAStack。SOFAStack(Scalable Open Financial Architecture Stack)是螞蟻金服開源的,用于快速建構金融級分布式架構的一套中間件,也是在金融場景裡錘煉出來的最佳實踐。SOFAStack :
https://github.com/sofastackSOFAStack 包含以下主要特性:
- 全面:覆寫多種場景,讓使用者更加專注于業務開發;
- 可靠:經曆過大規模場景的錘煉,特别是嚴苛的金融場景;
- 豐富:包含建構金融級雲原生架構所需的各個元件,滿足使用者場景的現狀和未來需求;
- 開放:相容開源生态,元件可插拔, SOFAStack 元件與其它開源元件可互相內建或替換。
SOFAStack 開源全景圖涵蓋了微服務領域的各個方面,同時也積極和業界流行的開源元件結合,包括阿裡巴巴集團開源的 Nacos、Sentinel 等,為使用者提供更加廣泛地選擇。
SOFAStack 開源已經超過一年,Spring Cloud 作為當下流行的微服務架構,社群使用者以及公司内部使用者迫切希望能夠将這兩個優秀的架構進行整合,将 SOFAStack 中間件适配 Spring Cloud 規範也就産生了我們今天的主角——spring-cloud-antfin。
spring-cloud-antfin 全景圖
Spring 官網提供了一份 Spring Cloud 的架構圖:
從 Spring Cloud 的架構圖可以看到,Spring Cloud 架構涵蓋了分布式應用開發的方方面面,包括:
- API 網關
- 熔斷與限流
- 服務發現
- 分布式配置
- 分布式鍊路
spring-cloud-antfin 是 Spring Cloud 微服務規範的 antfin 實作,同樣的,我們也有一份 spring-cloud-antfin 全景圖,涵蓋了螞蟻金服所有中間件:
與 Spring Cloud 全景圖不同,在 spring-cloud-antfin 中每種分布式元件都有具體的螞蟻中間件實作:
- API 網關:SOFAGateway
- 熔斷與限流:Guardian
- 服務發現: SOFARegistry
- 分布式配置:DRM
- 分布式鍊路: SOFATracer
在 spring-cloud-antfin 适配 Spring Cloud 的過程中,我們發現 Spring Cloud 制定的規範并不完整,對于一些 Spring Cloud 規範并未涵蓋的方面,spring-cloud-antfin 進行了擴充。
擴充 Spring Cloud
雖然 Spring Cloud 定義了很多微服務規範,但是在具體業務開發過程中,我們發現 Spring Cloud 還有很多不足,例如 Spring Cloud 對以下能力沒有進行規範化:
- 屬性級别動态配置
- 事務消息
- Big Table
- 分布式事務
Spring Cloud 的動态配置基于 RefreshScope 接口,預設 RefreshScope 會對整個 Bean 進行重新整理,而且實作自動重新整理需要配合 spring-cloud-bus,我們認為與 Apollo、Nacos 等屬性級别重新整理相比,這個是明顯的退步,是以 spring-cloud-antfin 定義一個 DynamicConfig 注解,對于打有這個注解的 Bean,spring-cloud-antfin 支援屬性級别動态配置:
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface DynamicConfig {
}
spring-cloud-stream 預設不支援事務消息,但是在金融級場景中事務消息是必不可少的,是以 spring-cloud-antfin 擴充了 spring-cloud-stream 的定義,對事務消息進行了支援:
- MQ 支援事務:對于使用 MQ 本身就支援事務消息的,spring-cloud-antfin 會在 MessageHeaders 中增加 Transcation 相關屬性,以此支援事務消息;
- MQ 不支援事務:對于使用 MQ 本身不支援事務的,spring-cloud-antfin 支援用本地事件表的模式支援事務消息。
- 消息發送端在同一個本地事務中記錄業務資料和消息事件;
- 事件恢複服務定時從事件表中恢複未釋出成功的事件,重新釋出成功後删除記錄的事件。
通過事件恢複服務的不停執行,我們保證了本地事件和消息發送到 Message Broker 必定同時成功或者同時失敗。
一些 SOFAStack 的使用者,一套代碼會在多種技術棧使用,當使用開源技術棧時,Big Table 的實作會使用 HBase,在使用商業技術棧時,Big Table 會使用阿裡雲的
TableStore,為了讓使用者實作不修改代碼在不同技術棧使用,spring-cloud-antfin 會定義一套統一接口,然後讓使用者針對 spring-cloud-antfin 的接口進行程式設計,這樣在替換底層實作時使用者代碼不需要修改:
public interface BigTableService {
Result get(Get get) throws StoreException;
Result[] get(List<Get> get) throws StoreException;
void put(Put put) throws StoreException;
void put(List<Put> puts) throws StoreException;
void delete(Delete delete) throws StoreException;
void delete(List<Delete> delete) throws StoreException;
ResultScanner getScaner(Scan scan) throws StoreException;
}
目前 Spring Cloud 規範不支援分布式事務,但是分布式事務又是在金融級場景中必不可少的,spring-cloud-antfin 将內建
Seata架構,幫助使用者更好的解決分布式場景下的資料一緻性問題。
spring-cloud-sofastack-samples
spring-cloud-antfin 目前已經在内部公測中,預計 7 月份釋出,雖然 spring-cloud-antfin 還未釋出,但是基于現有開源架構,SOFAStack 和 Spring Cloud 依然可以一起使用,我們提供了一個 Sample 工程用于示範使用 SOFAStack 和 SpringCloud 一起建構微服務系統 —— spring-cloud-sofastack-samples。
是基于 SOFAStack 和 SpringCloud 建構的一套微服務系統,通過此案例工程提供了一個完整的基于 SOFAStack 和 SpringCloud 體系建構的基礎工程模型。整個應用的架構圖如下:
通過此工程,可以幫助使用者更好的了解和使用 SOFAStack 開源生态提供的一系列基礎架構群組件。這個案例工程中包含了 SOFAStack 開源的大部分元件,包括 SOFABoot、SOFARPC、SOFATracer、SOFABolt 等。同時案例工程還內建了 Spring Cloud 的一些常用元件,包括 Feign、Hystrix、Ribbion、Zookeeper Discovery 等。對于業界的一些優秀開源架構,spring-cloud-sofastack-samples 也進行了整合,例如 Apollo。
小結
本文首先分享了 Spring Cloud 及 SOFAStack 的基本概念,然後介紹了這兩個優秀架構碰撞之後的産生的全新架構 spring-cloud-antfin。對于 Spring Cloud 提供的一些優秀規範,spring-cloud-antfin 進行了适配,例如服務發現、熔斷限流、分布式鍊路。對于 Spring Cloud 規範中未定義的,但是在開發中必不可少的方面,spring-cloud-antfin 進行了擴充,例如屬性級動态配置、事務消息、Big Table、分布式事務。最後文章還分享了 SOFAStack 最近開源的新工程 spring-cloud-sofastack-samples,spring-cloud-sofastack-samples 是基于 SOFAStack 和 SpringCloud 建構的一套微服務系統,通過此案例工程提供了一個完整的基于 SOFAStack 和 SpringCloud 體系建構的基礎工程模型。
SOFA Meetup #2 上海站回顧資料
本文現場回顧視訊以及 PPT 位址:
http://t.cn/AiKlmCmE相關 Workshop
6月24日(周一)KubeCon China 來了。KubeCon + CloudNativeCon + Open Source Summit China 2019,螞蟻金服核心技術團隊将舉辦一場全天的 Workshop,給大家分享分布式架構 SOFAStack、Service Mesh、Serverless、分布式事務 Seata 的實踐案例,跟大家一起輕松上手雲原生技術。
主題:《螞蟻金服 SOFAStack 雲原生工作坊》(KubeCon China 2019 同場活動)
時間: 6 月 24 日 9:00-16:30
地點: 上海世博中心
注冊費:免費
本期活動中,本篇作者玄北也将帶來《使用 SOFAStack 快速建構微服務》的主題 Workshop。
基于 SOFAStack 技術棧建構微服務應用。通過本 Workshop ,您可以快速了解并實踐在 SOFAStack 體系中如何上報應用監控資料、服務鍊路資料以及釋出、訂閱服務。
歡迎點選,檢視活動詳細安排以及報名方式~