當 Spring Cloud 趕上 SOFAStack | Meetup#2 回顧

本文做者:玄北(曹傑),螞蟻金服 SOFAStack 開源組核心成員。
git

本文根據 5月26日 SOFA Meetup#2 上海站 《當 Spring Cloud 趕上 SOFAStack》主題分享整理,主要來聊聊 spring-cloud-antfin 包含的主要特性及如何使用 SOFAStack 和 SpringCloud 快讀構建微服務系統。github

現場回顧視頻以及 PPT 見文末連接。spring

概念

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).bash

螞蟻金服從 2007 年開始在公司內部使用 SOFAStack 框架,2014 年基於 Spring Boot 研發了 SOFABoot,2016 年將 SOFAStack 在公有云輸出,2018 年 4 月,螞蟻金服宣佈開源 SOFAStack。SOFAStack(Scalable Open Financial Architecture Stack)是螞蟻金服開源的,用於快速構建金融級分佈式架構的一套中間件,也是在金融場景裏錘鍊出來的最佳實踐。SOFAStack :github.com/sofastacksession

SOFAStack 包含如下主要特性:架構

  • 全面:覆蓋多種場景,讓用戶更加專一於業務開發;
  • 可靠:經歷過大規模場景的錘鍊,特別是嚴苛的金融場景;
  • 豐富:包含構建金融級雲原生架構所需的各個組件,知足用戶場景的現狀和將來需求;
  • 開放:兼容開源生態,組件可插拔, SOFAStack 組件與其它開源組件可相互集成或替換。

SOFAStack 開源全景圖涵蓋了微服務領域的各個方面,同時也積極和業界流行的開源組件結合,包括阿里巴巴集團開源的 Nacos、Sentinel 等,爲用戶提供更加普遍地選擇。框架

image.png

SOFAStack 開源已經超過一年,Spring Cloud 做爲當下流行的微服務框架,社區用戶以及公司內部用戶迫切但願可以將這兩個優秀的框架進行整合,將 SOFAStack 中間件適配 Spring Cloud 規範也就產生了咱們今天的主角——spring-cloud-antfin。less

spring-cloud-antfin 全景圖

Spring 官網提供了一份 Spring Cloud 的架構圖:分佈式

image.png

從 Spring Cloud 的架構圖能夠看到,Spring Cloud 框架涵蓋了分佈式應用開發的方方面面,包括:

  • API 網關
  • 熔斷與限流
  • 服務發現
  • 分佈式配置
  • 分佈式鏈路

spring-cloud-antfin 是 Spring Cloud 微服務規範的 antfin 實現,一樣的,咱們也有一份 spring-cloud-antfin 全景圖,涵蓋了螞蟻金服全部中間件:

image.png

與 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 支持用本地事件表的模式支持事務消息。

image.png

  1. 消息發送端在同一個本地事務中記錄業務數據和消息事件;
  2. 事件恢復服務定時從事件表中恢復未發佈成功的事件,從新發布成功後刪除記錄的事件。

經過事件恢復服務的不停執行,咱們保證了本地事件和消息發送到 Message Broker 一定同時成功或者同時失敗。

Big Table

一些 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。

spring-cloud-sofastack-samples 是基於 SOFAStack 和 SpringCloud 構建的一套微服務系統,經過此案例工程提供了一個完整的基於 SOFAStack 和 SpringCloud 體系構建的基礎工程模型。整個應用的架構圖以下:

hahhahaha.png

經過此工程,能夠幫助用戶更好的理解和使用 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 地址: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 體系中如何上報應用監控數據、服務鏈路數據以及發佈、訂閱服務。

歡迎點擊查看活動詳細安排以及報名方式~

公衆號:金融級分佈式架構(Antfin_SOFA)

相關文章
相關標籤/搜索