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

SOFABoot是蚂蚁金服开源的基于Spring Boot的研发框架 前言 SOFABoot是蚂蚁金服开源的基于Spring Boot的研发框架,它在Spring Boot的基础上,提供了诸如 Readiness Check,类隔离,日志空间隔离等等能力。在增强了 Spring Boot 的同时,SOFABoot 提供了让用户可以在 Spring Boot 中非常方便地使用 SOFA 中间件的能力。为了解决 Spring Boot 在实施大规模微服务架构时候的问题,SOFABoot 提供了以下的能力: 增强 Spring Boot 的健康检查能力 针对 Spring Boo 阅读详情

SOFAStack(Scalable Open Financial Architecture Stack)是蚂蚁金服自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件,是在金融场景里锤炼出来的最佳实践。


本文为《剖析 | SOFABoot 框架》第一篇,本篇作者纶珥,来自蚂蚁金服。《剖析 | SOFABoot 框架》系列由 SOFA 团队和源码爱好者们出品,项目代号:<SOFA:BootLab/>,文章尾部有参与方式,欢迎同样对源码热情的你加入。

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

SpringBoot 基于 Spring 的按条件配置(Conditional Configuration),结合 starter 依赖机制提供了快捷、方便开发 Spring 项目的体验,获得了极大的成功;SOFABoot 同样在这两个能力上基于 SpringBoot 扩展出适应于金融级应用开发框架。作为脱胎于蚂蚁金服内部对于 SpringBoot 的实践,SOFABoot 补充了 SpringBoot 在大规模金融级生产场景下一些不足的地方,例如 Readiness 检查、类隔离和日志空间隔离等等能力。在增强了 SpringBoot 的同时,SOFABoot 还提供了让用户可以在 SpringBoot 中非常方便地使用 SOFAStack 中间件的能力。

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

1

功能点概览

SOFABoot 完全兼容 SpringBoot,SpringBoot 技术栈可以快速切换到 SOFABoot 技术栈:修改项目 pom 依赖的 <parent/> 节点,例如将:

<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></parent>

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

2

应用 Readliness 检查 

一个应用启动之后,是否是“准备”好能够处理外部请求呢?作为应用流量入口的组件是否可以接收外部连接?这就很有必要引入应用 Readiness 的检查,SOFABoot 提供除 SpringBoot 健康检查之外的应用 Readiness 检查能力,保证应用组件的正常启动、应用安全上线。

SOFABoot 通过 HealthChecker 检查各组件的 ready 情况。在 Spring 上下文刷新完成之后(所有的 Spring Bean 已经实例化完成),SOFABoot 会获取 IoC 容器中所有的 HealthChecker 实现类,检查其返回的组件健康状况;在应用开启了模块化隔离之后,模块 HealthChecker 还会 kicks in,检查模块的健康状况。Spring 原生的 HealthIndicator 作为 Readiness 的一部分也会纳入 Readiness 的结果中,若 HealthIndicator 出现了失败的情况,那么应用的 Readiness 也是不通过。

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

应用 Readiness 与 Liveliness 不同的是 Readiness 表示的是应用启动完成之后是否“准备”好的状态,启动完成之后是不变的;两次部署间的 Readiness 的所有请求结果是一致的。

3

应用模块化 

应用模块化的方案多种多样。传统方案是以应用功能为边界做模块划分;研发期间,不同职责的类放在不同的模块下,但在运行期间都在同一个 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@SofaServicepublic class MyServiceImpl implements MyService {    // implementation goes here}// Reference a JVM servicepublic 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 servicepublic class AnyClass {    @SofaReference(binding = @SofaReferenceBinding(bindingType = "bolt"))    private MyService myService;}

除了通过注解的方式,SOFABoot 还支持 XML 文件和编程 API 的配置方式。除了模块间通信能力,SOFABoot 还提供:

  • Module-Profile:模块级 Profile 能力,指定模块是否启动;

  • 扩展点:利用 Nuxeo Runtime 为 Bean 提供扩展点入口;

  • Require-Module:声明模块间依赖关系;

4

应用并行化启动 

模块并行化启动

SOFABoot 模块之间的依赖关系可以通过 Require-Module 指定,SOFABoot 会计算模块间的依赖形成一个有向无环图(DAG,若是有环图则无法正常启动)。SOFABoot 按照拓扑关系顺序启动依赖模块,并行启动自由模块。例如有如下的模块间依赖:

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

Spring Bean 异步初始化

实际的 Spring/SpringBoot 开发中,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"/>

5

中间件集成管理 

SOFABoot 通过 starter 机制管理了中间件依赖,一个中间件的使用不用再引入一长串 JAR 包依赖,而只需要一个 starter 依赖,将中间件当作可独立插拔的插件;starter 依赖负责传递中间件需要的 JAR 包依赖。中间件 starter 版本与 SOFABoot 版本关联,并且保证这些中间件 starter 版本的传递依赖经过严格测试是互相兼容的。不过 SOFABoot 的依赖管理依然是弱管理,如果用户想要指定某个 JAR 包的版本,那么也可以覆盖 starter 中配置的版本。SOFABoot 支持 Maven 和 Gradle 的依赖配置方式。

6

日志隔离 

SOFABoot 通过 sofa-common-tools 集成了日志空间的隔离能力,框架自动发现应用中的日志实现,避免中间件和应用日志实现的绑定。

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

7

应用类隔离 

SOFABoot 通过 SOFAArk 提供类隔离能力和应用合并部署能力。SOFAArk 使用隔离的类加载模型,运行时底层插件、业务应用之间均相互隔离,单一插件和应用由不同的 ClassLoader 加载,可以有效避免相互之间的包冲突,提升插件和模块功能复用能力。支持多应用的合并部署,开发阶段将多个应用打包成可执行 Fat Jar,运行时使用 API 或配置中心动态地安装卸载应用。

8

欢迎加入,参与 SOFABoot 源码解析 

本文为 SOFABoot 的初步介绍,希望大家对 SOFABoot 有一个初步的认识和了解。同时,我们开启了《剖析 | SOFABoot 框架》系列,会逐步详细介绍各个部分的代码设计和实现,预计按照如下的目录进行:

  • 【已完成】SOFABoot 总览

  • 【已领取】SOFABoot HealthCheck 机制解析

  • 【已领取】SOFABoot 日志隔离解析

  • 【待领取】SOFABoot runtime 机制解析

  • 【待领取】SOFABoot 上下文隔离机制解析

如果有同学对以上某个主题感兴趣的,可以留言讨论,我们会适当根据大家的反馈调整文章的顺序,谢谢大家关注 SOFAStack ,关注 SOFABoot,我们会一直与大家一起成长的。

领取方式:直接回复本公众号想认领的文章名称,我们将会主动联系你,确认资质后,即可加入,It's your show time!

除了源码解析,也欢迎提交 issue 和 PR。

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

本文归档在 sofastack.tech。

???? 奖励支持 SOFAStack 的你~

* 点下右下角“在看”

* 到公众号对话框发送“加油”,试试手气~

* 本期互动奖品“蚂蚁定制 U 型枕”

沙发启动: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的能力,这样会有比较致命的问题。当一个微服务应用启动的时候,必须要先保证启动后应用是健康的,才可以将上游的流 立即下载

相关推荐

【向量数据库】Milvus向量数据库 ① 从入门到实战

Milvus是专为海量高维向量设计的开源数据库,支持AI搜索、图像识别、推荐系统等场景。相比传统关系型数据库(如PostgreSQL),它更高效处理语义检索、非结构化数据存储,可毫秒级响应亿级向量查询。单机场景下,推荐配置8GB内存/32GB硬盘,支持FAISS/HNSW等索引算法,支持GPU加速。本文涵盖优快云专属部署教程(CentOS脚本/配置调优),提供避坑指南与扩展资源,并对比分析与传统数据库差异。适合算法工程师、AI开发人员快速上手,附官方下载与性能测试技巧,手把手教你搭建高效向量检索系统!

xiezhiyi007的专栏 1587

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

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

编码人生 1万+

rk3576之imx415 4k@60fps

1;0;1;0;1;0;1;0;1;0;1;0;1;0;

darennet的专栏 705

SOFABoot

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

qq_33709529的博客 1866

FPGA开发中Quartus与Modelsim联合仿真配置与调试全攻略

在数字电路设计与FPGA开发中,仿真验证是确保逻辑功能正确性和时序性能达标的核心环节。其基本原理是通过软件模拟硬件电路的行为,在设计转化为实际硬件前发现潜在缺陷。这项技术的核心价值在于大幅降低开发风险与成本,提升设计可靠性,广泛应用于通信、嵌入式系统、芯片验证等领域。对于使用Intel FPGA平台的开发者,Quartus Prime作为官方综合布局布线工具,其内置仿真器在应对复杂设计、深度调试和自动化测试时存在局限。此时,引入专业仿真工具Modelsim进行联合仿真成为提升验证效率的关键实践。通过搭建自动

weixin_33736048的博客 451

强化学习入门8—深入理解DDPG

本文是强化学习入门系列的第八篇,前面我们讲Actor-Critic时提到了DDPG。DDPG是google DeepMind团队提出的一种用于输出确定性动作的算法,它解决了Actor-Critic 神经网络每次参数更新前后都存在相关性,导致神经网络只能片面的看待问题这一缺点。同时也解决了DQN不能用于连续性动作的缺点。

小菜羊的博客 4314

SOFABoot——基本使用(笔记)

SOFABoot基础

weixin_46949627的博客 4663

链接文件及功能安全:基于Tasking的LSL链接文件知识点梳理及实际应用分析

本文旨在记录研究链接文件时所遇到的问题及个人理解,以便日后查阅。在探索过程中,我遇到了诸多问题,同时对链接文件有了初步的认识。通过记录这些问题与理解,我希望能够为后续的研究提供清晰的思路和有价值的参考。这不仅是对研究过程的总结,更是对未来学习和实践的有力支持。

梦想技术家 1103

SOFABoot是什么

SOFABoot 是蚂蚁金服基于 Spring Boot 开发的框架,使用标准 Spring 接口实现。可将 SOFABoot 理解为 Spring 的一个扩展,构建在 Spring Boot 基础之上提供金融科技中间件解决方案,每一个中间件均是一个可插拔的组件,添加和移除非常方便,同时,利用“约定优先配置”(convention over configuration)的理念完成自动配置,开发者能够更加专注于业务逻辑。

weixin_44603464的博客 1449

数据库课程案例——电力公司收费管理系统分析与实践,完整带SQL语句

某电力公司收费管理信息系统实现客户信息、用电类型(类别号、类别名、电价)及业务员管理;实现客户用电信息管理(客户号、月份、用电类别号、用电度数);实现客户费用管理(客户号、月份、费用、收费标志),收费标志的默认值为“未收”;实现收费登记(客户、月份、应收费用、实收费用、业务员),并自动修改收费标志(用触发器实现);创建触发器,实现收费时自动更加应收费用和实收费用,计算本次结余,然后修改客户信息表中的结余金额;创建存储过程统计指定月份应收费用和实收费用;创建存储过程查询指定月份未交费的用户信息,以便崔费;创建

qq_44242804的博客 2762

YOLOv8源码解析与复现:ShuffleAttention:高效的混合注意力机制 实现通道和空间混合注意力

随着深度学习在计算机视觉领域的飞速发展,卷积神经网络(CNNs)已经成为图像分类、目标检测、语义分割等任务的核心。为了进一步提升模型的性能,研究者们引入了“注意力机制”,旨在让网络能够动态地关注输入数据中最具信息量的部分。经典的注意力模块,如SE-Net(Squeeze-and-Excitation Networks)和CBAM(Convolutional Block Attention Module),通过通道注意力或结合通道与空间注意力,显著增强了模型的特征表达能力。

FJN110的博客 554

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

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

金融级分布式架构 1799

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

SOFABoot框架(蚂蚁金服)

SOFABoot框架的简单搭建 先简单介绍一下SOFA Boot ,SOFA Boot 是基于 Spring Boot 的开发框架,是蚂蚁金服下的一款开源框架,用于快速、敏捷地开发 Spring 应用程序,特别适合构建微服务系统 提供了诸如 Readiness Check,类隔离,日志空间隔离等等能力。 简单来说包括几个主要功能: 1 增强 Spring Boot 的健康检查能力 2 提供类隔离的能力(防止jar包冲突问题) 3 日志空间隔离能力(打印日志路径分别固定) 4 SOFA 中间件的集成管理等 今

weixin_44772271的博客 6777

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

基于SpringBoot的框架SOFABoot,青出于蓝而胜于蓝

基于SpringBoot的框架SOFABoot,青出于蓝而胜于蓝(阿里出品) 程序员界的彭于晏 2018-11-08 22:02:58 SOFABoot 是蚂蚁金服开源的基于 Spring Boot 的研发框架,它在 Spring Boot 的基础上,提供了诸如 Readiness Check,类隔离,日志空间隔离等等能力。在增强了 Spring Boot 的同时,SOFABoot 提供了让用...

qq_992833908 4300

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

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

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

weixin_39755873的博客 391

SOFABoot-03-sofaboot 介绍

大家好,我是老马。sofastack 其实出来很久了,第一次应该是在 2022 年左右开始关注,但是一直没有深入研究。最近想学习一下 SOFA 对于生态的设计和思考。

1183

SOFABoot 3.1.2 发布,蚂蚁金服开源研发框架

开发四年只会写业务代码,分布式高并发都不会还做程序员? >>> SOFABoot 3.1.2 发布了...

weixin_33967071的博客 295

蚂蚁金服开源增强版 Spring Boot 的研发框架!

点击上方“芋道源码”,选择“设为星标”管她前浪,还是后浪?能浪的浪,才是好浪!每天 8:55 更新文章,每天掉亿点点头发...源码精品专栏原创 | Java 2020 超神之路,很肝~...

芋艿V 453

蚂蚁金服开源 ——基于 SOFABoot 进行模块化开发

SOFA 中间件是蚂蚁金服自主研发的金融级分布式中间件,包含了构建金融级云原生架构所需的各个组件,包括微服务研发框架,RPC 框架,服务注册中心,分布式定时任务,限流/熔断框架,动态配置推送,分布式链路追踪,Metrics监控度量,分布式高可用消息队列,分布式事务框架,分布式数据库代理层等组件,是在金融场景里锤炼出来的最佳实践。 SOFABoot 是蚂蚁金服中间件团队开源的基于 Sprin...

Aaron的blog 7381

springboot bootstrap 开源框架_蚂蚁金服开源Spring Boot增强框架SofaBoot-金融级分布式架构...

SOFABoot 是蚂蚁金服开源的基于 Spring Boot 的研发框架,它在 Spring Boot 的基础上,提供了诸如 Readiness Check,类隔离,日志空间隔离等等能力。在增强了 Spring Boot 的同时,SOFABoot 提供了让用户可以在 Spring Boot 中非常方便地使用 SOFA 中间件的能力。 SOFABoot 3.0.0 已经发布,该版本基于 Sprin...

weixin_39732640的博客 464

蚂蚁开源的 SOFABoot,和 Spring Boot 有啥关系?

一、SOFABoot 是什么鬼? 说到 SOFABoot,不得不先说下 SOFARPC 框架,SOFARPC 也是大名远扬,最早起源于阿里淘宝 HSF 框架,现在是蚂蚁金服开源的一款高性能、高可扩展性、生产级别的 RPC 框架,在蚂蚁金服,SOFARPC 框架已经使用了十多年了,并且已经历经了五代。 SOFARPC 开源地址: https://github.com/sofastack/sofa-rpc 栈长当初第一次看到 SOFABoot 这个框架的时候,心里想着,难道是 SOFABoot = SOF.

Java技术栈,分享最主流的Java技术 3852

手动搭建一个简单的SoFaBoot框架(一)

环境准备 观看本系列博客之前请确保本地版本无问题 要使用 SOFABoot,需要先准备好基础环境,SOFABoot 依赖以下环境: - JDK7 或 JDK8 - 需要采用 Apache Maven 3.2.5 或者以上的版本来编译 简介: SOFABoot 是蚂蚁金服开源的基于 Spring Boot 的研发框架,它在 Spring Boot 的基础上,提供了诸如 Readiness Check...

凌波漫步 3590
上一篇: 剖析 | SOFABolt 框架 合辑
下一篇: 剖析 | 蚂蚁金服分布式链路系统 SOFATracer 合辑
SOFAStack
博客等级 码龄7年 747粉丝 389原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值