当 Spring Cloud 遇上 SOFAStack | Meetup#2 回顾

简介: 本文首先分享了 Spring Cloud 及 SOFAStack 的基本概念,然后介绍了这两个优秀框架碰撞之后的产生的全新框架 spring-cloud-antfin。

image.png

本文作者:玄北(曹杰),蚂蚁金服 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 [1]:https://github.com/sofastack

SOFAStack 包含以下主要特性:

  • 全面:覆盖多种场景,让用户更加专注于业务开发;
  • 可靠:经历过大规模场景的锤炼,特别是严苛的金融场景;
  • 丰富:包含构建金融级云原生架构所需的各个组件,满足用户场景的现状和未来需求;
  • 开放:兼容开源生态,组件可插拔, SOFAStack 组件与其它开源组件可相互集成或替换。

SOFAStack 开源全景图涵盖了微服务领域的各个方面,同时也积极和业界流行的开源组件结合,包括阿里巴巴集团开源的 Nacos、Sentinel 等,为用户提供更加广泛地选择。

image.png

SOFAStack 开源已经超过一年,Spring Cloud 作为当下流行的微服务框架,社区用户以及公司内部用户迫切希望能够将这两个优秀的框架进行整合,将 SOFAStack 中间件适配 Spring Cloud 规范也就产生了我们今天的主角——spring-cloud-antfin。

| 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 [2]
  • 分布式配置:DRM
  • 分布式链路:SOFATracer [3]

| 扩展 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 [4],为了让用户实现不修改代码在不同技术栈使用,spring-cloud-antfin 会定义一套统一接口,然后让用户针对 spring-cloud-antfin 的接口进行编程,这样在替换底层实现时用户代码不需要修改:

image.png

分布式事务
目前 Spring Cloud 规范不支持分布式事务,但是分布式事务又是在金融级场景中不可或缺的,spring-cloud-antfin 将集成 Seata [5] 框架,帮助用户更好的解决分布式场景下的数据一致性问题。

分布式事务 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 [6] 是基于 SOFAStack 和 SpringCloud 构建的一套微服务系统,通过此案例工程提供了一个完整的基于 SOFAStack 和 SpringCloud 体系构建的基础工程模型。整个应用的架构图如下:

image.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 体系构建的基础工程模型。

相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
28天前
|
SpringCloudAlibaba Java 网络架构
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(二)Rest微服务工程搭建
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(二)Rest微服务工程搭建
44 0
|
1月前
|
负载均衡 Java Maven
Spring Cloud:Eureka
Spring Cloud:Eureka
|
1月前
|
缓存 Java API
【云原生】Spring Cloud Gateway的底层原理与实践方法探究
【云原生】Spring Cloud Gateway的底层原理与实践方法探究
|
1月前
|
消息中间件 Cloud Native Java
【Spring云原生系列】SpringBoot+Spring Cloud Stream:消息驱动架构(MDA)解析,实现异步处理与解耦合
【Spring云原生系列】SpringBoot+Spring Cloud Stream:消息驱动架构(MDA)解析,实现异步处理与解耦合
|
27天前
|
负载均衡 Java API
Spring Cloud 面试题及答案整理,最新面试题
Spring Cloud 面试题及答案整理,最新面试题
128 1
|
27天前
|
Java Nacos Sentinel
Spring Cloud Alibaba 面试题及答案整理,最新面试题
Spring Cloud Alibaba 面试题及答案整理,最新面试题
129 0
|
28天前
|
SpringCloudAlibaba Java 持续交付
【构建一套Spring Cloud项目的大概步骤】&【Springcloud Alibaba微服务分布式架构学习资料】
【构建一套Spring Cloud项目的大概步骤】&【Springcloud Alibaba微服务分布式架构学习资料】
123 0
|
28天前
|
SpringCloudAlibaba Java 网络架构
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
76 0
|
29天前
|
消息中间件 JSON Java
Spring Boot、Spring Cloud与Spring Cloud Alibaba版本对应关系
Spring Boot、Spring Cloud与Spring Cloud Alibaba版本对应关系
356 0
|
14天前
|
负载均衡 网络协议 Java
构建高效可扩展的微服务架构:利用Spring Cloud实现服务发现与负载均衡
本文将探讨如何利用Spring Cloud技术实现微服务架构中的服务发现与负载均衡,通过注册中心来管理服务的注册与发现,并通过负载均衡策略实现请求的分发,从而构建高效可扩展的微服务系统。