金融级应用开发|SOFABoot 框架剖析

1、SOFABoot 系列---简介 SOFABoot 是蚂蚁金服开源的基于 Spring Boot 的研发框架,它在 Spring Boot 的基础上,提供了诸如 Readiness Check,类隔离,日志空间隔离等能力。在增强了 Spring Boot 的同时,SOFABoot 提供了让用户可以在 Spring Boot 中非常方便地使用 SOFA 中间件的能力。 SOFABoot 版本和 Spring Boot 版本对... 阅读详情

前言

SOFABoot 是蚂蚁集团开源的基于 Spring Boot 的研发框架,提供了诸如 Readiness Check、类隔离和日志空间隔离等能力,用于快速、敏捷地开发 Spring 应用程序,特别适合构建微服务系统。

Spring Boot 基于 Spring 的按条件配置(Conditional Configuration),结合 starter 依赖机制提供了快捷、方便开发 Spring 项目的体验,获得了极大的成功。

SOFABoot 在这两个能力上基于 Spring Boot 扩展出适应于金融级应用开发框架。作为脱胎于蚂蚁集团内部对于 Spring Boot 的实践,SOFABoot 补充了 Spring Boot 在大规模金融级生产场景下一些不足的地方,例如 Readiness 检查、类隔离和日志空间隔离等等能力。在增强了 Spring Boot 的同时,SOFABoot 还提供了让用户可以在 Spring Boot 中方便使用 SOFAStack 中间件的能力。

SOFABoot :https://github.com/sofastack/sofa-boot

功能点概览

SOFABoot 完全兼容 Spring Boot,Spring Boot 技术栈可以快速切换到 SOFABoot 技术栈:修改项目 pom 依赖的 节点。

例如将:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>${spring.boot.version}</version>
    <relativePath />
</parent>

替换为:

<parent>
    <groupId>com.alipay.sofa</groupId>
    <artifactId>sofaboot-dependencies</artifactId>
    <version>${sofa.boot.version}</version>
    <relativePath />
</parent>

当前 SOFABoot 的最新版本为 v3.11.1。

应用 Readiness 检查

一个应用启动之后,是否“准备”好能处理外部请求呢?

作为应用流量入口的组件是否可以接收外部连接?

这就很有必要引入应用 Readiness 的检查,SOFABoot 提供除 Spring Boot 健康检查之外的应用的 Readiness 检查能力,保证应用组件的正常启动、安全上线。

SOFABoot 通过 HealthChecker 检查各组件的 ready 情况。

在 Spring 上下文刷新完成之后(所有的 Spring Bean 已经实例化完成),SOFABoot 会获取 IoC 容器中所有的 HealthChecker 实现类,检查其返回的组件健康状况。

在应用开启了模块化隔离之后,模块 HealthChecker 还会检查各模块的健康状况。Spring 原生的 HealthIndicator 作为 Readiness 的一部分也会纳入 Readiness 的结果中,若 HealthIndicator 出现了失败的情况,那么应用的 Readiness 也是不通过。

Readiness 检查包含组件的后置检查,流量入口组件(例如:RPC、REST)需要保证后置检查通过之后,能接受外部流量的请求,应用才是真正 ready 了。

应用 Readiness 与 Liveliness 的不同是:

  • Readiness 表示的是应用启动完成之后是否“准备”好的状态,启动完成之后是不变的

  • 两次部署间的 Readiness 的所有请求结果是一致的

应用模块化

应用模块化的方案多种多样。传统方案是以应用功能为边界做模块划分;研发期间,不同职责的类放在不同的模块下,但在运行期间都在同一个 classpath 下,没有任何隔离。

而与传统的模块划分方案不同,人们发现可以利用 Java 的 ClassLoader 机制,将模块与模块间的类完全隔离。

当某个模块需要与另一个模块通信时,可以通过类的导入和导出来实现。OSGi 和 SOFAArk 都是基于 ClassLoader 隔离的模块化实践方案。

传统的模块化方案没有任何的隔离手段,模块间的边界得不到保障,容易出现模块间的紧耦合。而基于 ClassLoader 的模块化方案则过于彻底,研发人员必须十分清楚类的导入与导出、Java 的类加载体系,模块划分的负担转嫁到了普通研发人员身上。

SOFABoot 综合以上两种方案的利弊,引入了介于两者之间的模块化方案:

每个模块有独立的 Spring 上下文,通过上下文的隔离,让不同模块之间的 Bean 的引用无法直接进行,达到模块在运行时的隔离。

这样既保证了不引入过多的复杂性,也避免了没有任何隔离措施的模块边界保障。

如下图所示:

所有的 SOFABoot 模块都会有一个相同的 Spring Context 的 Parent,称之为 Root Application Context。

对于所有模块都需要引入的 Bean,可以选择将其放置于 Root Application Context 中,在所有的模块间共享。此外,SOFABoot 框架提供两种 Spring 上下文隔离方案后的模块间通信能力:

  • JVM 服务的发布和引用:同一个应用内不同模块间的通信
// Publish a JVM service
@Component
@SofaService
public class MyServiceImpl implements MyService {
    // implementation goes here
}
// Reference a JVM service
public class AnyClass {
    @SofaReference
    private MyService myService;
}
  • RPC 服务的发布和引用:不同应用间的通信
// Publish a RPC service
@Component
@SofaService(interfaceType = MyService.class, bindings = { @SofaServiceBinding(bindingType = "bolt") })
public class MyServiceImpl implements MyService {
    // implementation goes here
}
// Reference a RPC service
public class AnyClass {
    @SofaReference(binding = @SofaReferenceBinding(bindingType = "bolt"))
    private MyService myService;
}

除了通过注解的方式,SOFABoot 还支持 XML 文件和编程 API 的配置方式。

除了模块间通信能力,SOFABoot 还提供:

  • Module-Profile:模块级 Profile 能力,指定模块是否启动
  • 扩展点:利用 Nuxeo Runtime 为 Bean 提供扩展点入口
  • Require-Module:声明模块间依赖关系

应用并行化启动

模块并行化启动

SOFABoot 模块之间的依赖关系可以通过 Require-Module 指定,SOFABoot 会计算模块间的依赖形成一个有向无环图(DAG)。

SOFABoot 按照拓扑关系顺序启动依赖模块,并行启动自由模块。

例如有如下的模块间依赖:

从图中可知,模块 A 必须在模块 B 和 C 之前启动,模块 D 必须在模块 E 之前启动,模块 A 和 D 可以并行启动(开始起点的自由模块)。相对于所有模块共享一个 Spring 上下文的应用,SOFABoot 应用的并行启动能显著加快应用启动速度。

Spring Bean 异步初始化

实际的 Spring/Spring Boot 开发中,Spring Bean 常常需要在初始化过程中执行准备操作,如拉取远程配置、初始化数据源等等。

并且,这些准备操作在 Bean 初始化过程中占据了大量的时间,显著拖慢速度 Spring 上下文刷新速度。然而,Bean 初始化的准备操作与 Bean 的后置处理往往没有强制的前后顺序,是能够并行的。

SOFABoot 捕捉到了这个特点,提供了可配置选项,将 Bean 的 init-method 方法的执行异步化,从而加快 Spring 上下文刷新过程。

如图所示,Spring 在异步执行自定义 init-method 方法之后,马上进行 BeanPostProcessor 的后置处理,相当于“跳过”了最耗时的 init-method 环节。

Spring Bean 异步初始化配置方法:

<!-- 通过将 async-init 设为 true,开启对应 bean 的异步化初始化 -->
<bean id="testBean" class="com.alipay.sofa.beans.TimeWasteBean" init-method="init" async-init="true"/>

中间件集成管理

SOFABoot 通过 starter 机制管理了中间件依赖。

一个中间件的使用不用再引入一长串 JAR 包依赖,而只需要一个 starter 依赖,将中间件当作可独立插拔的“插件”;starter 依赖负责传递中间件需要的 JAR 包依赖。

中间件 starter 版本与 SOFABoot 版本关联,并且保证这些中间件 starter 版本的传递依赖经过严格测试是互相兼容的。不过 SOFABoot 的依赖管理依然是弱管理,如果用户想要指定某个 JAR 包的版本,那么也可以覆盖 starter 中配置的版本。

SOFABoot 支持 Maven 和 Gradle 的依赖配置方式。

日志隔离

SOFABoot 通过 sofa-common-tools 集成了日志空间的隔离能力。

框架自动发现应用中的日志实现,避免中间件和应用日志实现的绑定。

二方包或者引入的中间件面向日志编程接口 SLF4J 去编程,具体的日志实现交给 SOFABoot 应用开发者去选择;同时二方包或者中间件针对每一个日志实现提供配置以输出日志到相对固定目录下的文件。

应用选择的日志实现,框架都能够自动感知并选择相应的配置文件日志输出。

应用类隔离

SOFABoot 通过 SOFAArk 提供类隔离能力和应用合并部署能力。

SOFAArk 使用隔离的类加载模型,运行时底层插件、业务应用之间均相互隔离,单一插件和应用由不同的 ClassLoader 加载,可以有效避免相互之间的包冲突,提升插件和模块功能复用能力。

支持多应用的合并部署,开发阶段将多个应用打包成可执行 Fat Jar,运行时使用 API 或配置中心动态地安装卸载应用。

SOFA:金融级微服务架构实战解析与核心组件深度剖析 微服务架构作为现代分布式系统的主流设计模式,其核心在于通过服务拆分与治理,实现系统的解耦、弹性与可扩展性。其基本原理围绕服务注册发现、远程过程调用(RPC)、配置管理和链路追踪等关键技术展开。在金融、电商等高并发、强一致性要求的场景下,通用微服务框架常面临可靠性与数据一致性的挑战。为此,诞生于蚂蚁集团内部实践的SOFA框架,将金融级可靠性作为首要设计目标,通过内置强一致分布式事务解决方案(如TCC、Saga模式)和精细化的服务熔断隔离策略,为关键业务提供了确定性的行为保障。其组件化设计,如高性能通信框架SO 阅读详情

相关推荐

沙发启动:SOFABoot是一个框架,可增强Spring Boot并与之完全兼容,并提供就绪检查,类隔离等功能。

沙发靴 SOFABoot是Ant蚁金服开源的基于Spring Boot的研发框架,它在Spring Boot的基础上,提供了诸如Readiness Check,类隔离,日志空间隔离等等能力。在增强了Spring Boot的同时,SOFABoot提供了让用户可以在Spring Boot中非常方便地使用SOFA中间件的能力。 一,背景 Spring Boot是一个非常优秀的开源框架,可以非常方便地就建造出一个基于Spring的应用程序,但是在使用过程中,还是会遇到一些问题: Spring Boot提供了一个基础的健康检查的能力,中间件和应用都可以扩展来实现自己的健康检查逻辑。但是Spring Boot的健康检查只有Liveness Check的能力,具备Readiness Check的能力,这样会有比较致命的问题。当一个微服务应用启动的时候,必须要先保证启动后应用是健康的,才可以将上游的流

最近超火的SOFABoot是个什么东西?带你快速入门SOFABoot

最近发现了一个新的开源项目:SOFABoot,再加上公司用的框架也是SOFABoot,所以给将这个框架分享给大家,希望能扩展大家的视野。 首先我们需要知道什么是SOFABoot? SOFABoot 是蚂蚁集团开源的基于 Spring Boot 的研发框架,它在 Spring Boot 的基础上,提供了诸如 Readiness Check,类隔离,日志空间隔离等等能力。 下面是他的项目地址: https://gitee.com/sofastack/sofa-boot 为什么要选择SOFABoot?他能.

编码人生 1万+

基于STM32的智能盆栽管家系统设计与实现(开题报告2)

本文设计了一种基于STM32的智能盆栽管家系统,旨在解决传统盆栽养护依赖人工、效率低下的问题。系统以STM32为核心,集成土壤湿度、温湿度及光照传感器,通过WiFi模块实现数据上传与远程控制,配备OLED显示屏本地显示,并利用继电器控制水泵与补光灯实现自动化养护。软件方面开发嵌入式程序、安卓APP及云平台,支持数据采集、远程监控和智能决策。相比现有产品,本系统具有成本低、扩展性强等优势,可满足家庭用户对植物精细化管理的需求。研究计划12周完成,包括硬件设计、软件开发、系统测试等环节,最终形成一套完整的智能盆

毕业作品网站 474

SOFABoot

前两天在看 SOFABoot 的时候,看到一个让我眼前一亮的东西,来给大家盘一下。SOFABoot,你可能不眼熟,但是没关系,本文也不是给你讲这个东西的,你就认为它是 SpringBoot 的变种就行了。因为有蚂蚁金服背书,所以主要是一些金融类的公司在使用这个框架:官方介绍是这样的:SOFABoot 是蚂蚁金服开源的基于 Spring Boot 的研发框架,它在 Spring Boot 的基础上,提供了诸如 Readiness Check,类隔离,日志空间隔离等能力。

qq_33709529的博客 1866

不只是安装:用OrbbecSDK_ROS2玩转深度相机点云、滤波与DDS调优

本文深入探讨了如何通过OrbbecSDK_ROS2实现深度相机的高级应用,包括点云处理、深度图优化和DDS调优。详细介绍了点云采集与可视化技巧、多种滤波算法的配置与组合策略,以及针对高带宽数据传输的DDS高级调优方法,帮助开发者在机器人导航和三维重建等场景中提升性能。

weixin_29246195的博客 780

3D slicer查看形变场

3Dslice显示数据和形变场 将需要可视化的数据也导入3Dslice,注意描述为volume(图1a),如果没有显示是因为路径中不能有中文,也就是moving图像。 (b) 图1、数据导入形变场和 将相应的形变场数据直接拖入3Dslice,并修改描述为形变场(图1b)。 点击transform菜单图2(a),然后勾选形变场可视化图2(b)。 (b) 图2...

fanre的专栏 1947

SOFABoot——基本使用(笔记)

SOFABoot基础

weixin_46949627的博客 4663

手把手教你用C语言实现GNSS卫星方位角计算(附RTKLIB风格代码解析)

本文详细介绍了如何使用C语言实现GNSS卫星方位角计算,包括从地固坐标系到站心坐标系的转换链条。通过RTKLIB风格的代码解析,展示了XYZ到ENU坐标转换的核心原理和C语言实现框架,帮助开发者掌握卫星方位角和高度角的计算技巧,适用于GNSS观测数据质量分析和精密定位算法开发。

weixin_30699915的博客 365

SOFA Weekly | 开源这四年、本周 QA、MOSN v1.0 版本

SOFA WEEKLY | 每周精选筛选每周精华问答,同步开源进展欢迎留言互动~SOFAStack(ScalableOpenFinancialArchitecture Stack)是蚂蚁集团自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件,包括微服务研发框架,RPC 框架,服务注册中心,分布式定时任务,限流/熔断框架,动态配置推送,分布式链路...

金融级分布式架构 229

通用定时器脉冲计数实验(STM32CubeMx配置)

通用定时器脉冲计数实验

a1169511636的博客 5509

从零到一:Firefly-RK3399上的Ubuntu镜像构建与GPU加速实战

本文详细介绍了在Firefly-RK3399开发板上从零构建深度优化的Ubuntu系统镜像的全过程,包括交叉编译环境配置、内核定制、GPU加速环境部署(Mesa Panfrost驱动、OpenCL/Vulkan支持)以及深度学习推理优化(TFLite + LinuxNN)。通过实战案例展示了如何充分发挥Mali-T860 GPU的硬件潜力,提升边缘AI应用的性能和能效。

pz8901234的博客 1019

蚂蚁金服研发框架总览 | SOFABoot 框架剖析

SOFAStack(Scalable Open FinancialArchitecture Stack)是蚂蚁金服自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件,...

金融级分布式架构 4253

Ardupilot chibios主函数学习(1)

目录 文章目录目录摘要第一部分chibios主函数**(1)主回调函数入口****(2)主回调函数入口****(3)主回调函数入口****(4)主回调函数入口**1.函数hal.scheduler-&amp;amp;amp;amp;amp;amp;amp;gt;init()分析 摘要 本节主要记录自己学习Ardupilot的 chibios代码过程,欢迎批评指正。 第一部分chibios主函数 (1)主回调函数入口 AP_HAL_MAIN_...

陌城烟雨 4243

蚂蚁金服研发框架日志隔离解析 | SOFABoot 框架剖析

SOFAStack(Scalable Open Financial Architecture Stack)是蚂蚁金服自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件,...

金融级分布式架构 1799

深入探究ASP.NET Core读取Request.Body的正确方式

前言# 相信大家在使用ASP.NET Core进行开发的时候,肯定会涉及到读取Request.Body的场景,毕竟我们大部分的POST请求都是将数据存放到Http的Body当中。因为笔者日常开发所使用的主要也是ASP.NET Core所以笔者也遇到这这种场景,关于本篇文章所套路的内容,来自于在开发过程中我遇到的关于Request.Body的读取问题。在之前的使用的时候,基本上都是借助搜索引擎搜索的答案,并没有太关注这个,发现自己理解的和正确的使用之间存在很大的误区。故有感而发,便写下此文,以作记录。学无止境

萌兔兔MMQ!! 777

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

空间日志代码_蚂蚁金服研发框架日志隔离解析 | SOFABoot 框架剖析

SOFAStack(Scalable Open Financial Architecture Stack)是蚂蚁金服自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件,是在金融场景里锤炼出来的最佳实践。本文为《剖析 | SOFABoot 框架》第二篇,本篇作者阮仁照,来自遨游酒店信息技术。《剖析 | SOFABoot 框架》系列由 SOFA 团队和源码爱好者们出品,项目代号:SO...

weixin_39755873的博客 391

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

程序集绑定日志记录被关闭_蚂蚁金服研发框架日志隔离解析 | SOFABoot 框架剖析...

SOFAStack(Scalable Open Financial Architecture Stack)是蚂蚁金服自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件,是在金融场景里锤炼出来的最佳实践。本文为《剖析 | SOFABoot 框架》第二篇,本篇作者盲僧,来自遨游酒店信息技术。《剖析 | SOFABoot 框架》系列由 SOFA 团队和源码爱好者们出品,项目代...

weixin_39723102的博客 284

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

直播倒计时 2 天|SOFAChannel#35《SOFABoot 4.0 — 迈向 JDK 17 新时代》

????SOFAChannel#35直播倒计时 2 天!直播预约1.视频号SOFAGirl直播⬇️点击一键预约⬇️2.添加SOFAGirl 微信加入 SOFAChannel 技术交流群3. 钉钉搜索:44858463钉钉群同步直播,讲师在线答疑4.扫描????下方二维码或“阅读原文”预约 B 站直播将有机会获得SOFAStack 精美周边~????欢迎对 SOFABoot 项目感兴趣的朋友们加入...

金融级分布式架构 117

剖析 | 详谈 SOFABoot 模块化原理

SOFA(Scalable Open Financial Architecture)是蚂蚁金服自主研发的金融级分布式中间件,包含了构建金融级云原生架构所需的各个组件,是在金融场景里锤炼出来的最佳实践。SOFABoot 是蚂蚁金服中间件团队开源的基于 Spring Boot 的一个开发框架,SOFABoot 从 2.4.0 版本开始支持基于 Spring 上下文隔离的模块化开发能力,SOFABoot...

weixin_33972649的博客 998

【分布式利器:SOAF】蚂蚁开源的金融级微服务全家桶:SOFAStack 核心架构与实战选型对比

金融核心系统:账务、支付、清算、风控,需要强一致性和极高可用性。大型政企 & 国央企:要求自主可控,蚂蚁开源项目背书,容易过信创评审。已有 Dubbo 但想升级网格:SOFA 可以和 Dubbo 互通,并平滑引入 SOFAMesh。需要极致性能:每秒数万 TPS,且对 RT 敏感(如实时竞价、高频交易)。SOFAStack = 蚂蚁十年打磨的金融级微服务操作系统,提供 RPC、事务、可观测性、服务网格的一站式方案,是金融场景下 Spring Cloud 的最佳替代品。

2025博客之星Top81。专注AI工程化与架构实战。从分布式思维到模型部署,用工程化视角为你厘清AI落地的真实路径。 1085

SOFA Weekly | SOFABoot 发布、SOFABolt 源码解析系列合辑以及直播预告

SOFA WEEKLY | 每周精选,筛选每周精华问答同步开源进展,欢迎留言互动SOFAStack(ScalableOpenFinancialArchitecture Stack)...

金融级分布式架构 383

SOFA Weekly | SOFABoot、SOFAArk 发布、9/20 上海线下活动推荐

SOFA WEEKLY | 每周精选,筛选每周精华问答同步开源进展,欢迎留言互动SOFAStack(ScalableOpenFinancialArchitecture Stack)...

金融级分布式架构 314

直播预告|SOFAChannel#35《SOFABoot 4.0 — 迈向 JDK 17 新时代》

SOFABoot 项目简介SOFABoot 是蚂蚁集团开源的基于 Spring Boot 的研发框架,提供了诸如Readiness Check、模块化和日志空间隔离等能力,用于快速、敏捷地开发 Spring 应用程序,特别适合构建微服务系统。近期,SOFABoot 更新了 4.0 版本,带来了更多新特性。不仅正式支持了 Spring Boot 3 版本,也同时做出了包括历史功能演进在内的一系列调...

金融级分布式架构 189

直播倒计时 1 天|SOFAChannel#35《SOFABoot 4.0 — 迈向 JDK 17 新时代》

????SOFAChannel#35直播倒计时1天!直播预约1.视频号SOFAGirl直播⬇️点击一键预约⬇️2.添加SOFAGirl 微信加入 SOFAChannel 技术交流群3. 钉钉搜索:44858463钉钉群同步直播,讲师在线答疑4.扫描????下方二维码或“阅读原文”预约 B 站直播将有机会获得SOFAStack 精美周边~????欢迎对 SOFABoot 项目感兴趣的朋友们加入...

金融级分布式架构 172

SOFABoot凭什么比Spring Boot更受大厂青睐?揭秘其三大核心能力

本文深入解析SOFABoot相较于Spring Boot的三大核心优势:健康检查机制、模块化支持和日志与类隔离。通过实际案例和数据,展示SOFABoot如何解决企业级应用中的流量丢失、依赖冲突和日志混乱等问题,提升系统稳定性和运维效率,成为大厂微服务架构的首选框架。

weixin_42561476的博客 372

SOFA Weekly | MOSN、SOFABoot、SOFATracer 发布新版本,QA 整理

SOFA WEEKLY | 每周精选,筛选每周精华问答同步开源进展,欢迎留言互动SOFAStack(ScalableOpenFinancialArchitecture Stack)是...

金融级分布式架构 367
上一篇: 社区会议|一起来聊聊 SOFARegistry
下一篇: HAVE FUN | SOFARegistry、Layotto 源码解析活动最新进展
SOFAStack
博客等级 码龄7年 747粉丝 389原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值