查看原文
其他

蚂蚁金服开源增强版 SpringBoot 微服务框架 SOFABoot

终码一生 2022-09-22


戳蓝字“终码一生”关注我们!记得加个⭐标哦


     阅读本文预计需要1分钟     


来源 | 整理自开源社区

  

前言

01


SOFABoot 是蚂蚁金服基于 Spring Boot 开源的一款微服务框架,该框架在 Spring Boot 的基础上,新增了 Readiness Check类隔离日志空间隔离等等能力。在增强 Spring Boot 的同时,SOFABoot 还提供让用户可以在 Spring Boot 中更方便使用 SOFA 中间件 的能力。


项目背景

02


Spring Boot 本身已经是一款非常优秀的开源框架,可以让我们非常方便地就构建出一个基于Spring的web应用,但是在使用过程中,我们还是会遇到如下的一些问题:


1. 健康能力检测不足


场景:Spring Boot 只提供了基础的健康检查的能力,中间件和应用可以扩展来实现自己的健康检查逻辑。但是 Spring Boot 的健康检查只有 Liveness Check 的能力。


问题:缺少前置检测 Readiness Check 的能力


如,当一个应用启动的时候,必须要先保证应用启动后是健康的,才可以将上游的流量放进来(来自 RPC,网关,定时任务等等流量),否则就可能会导致一定时间内大量的错误发生。


2. 版本冲突不能彻底解决


场景:Spring Boot 通过依赖关系管理 jar 包最大程度来保证 JAR 包之间版本的兼容性,但这有一些漏洞,在一些特殊场景下,引入 JAR 包的时候,还是会遇到版本冲突,而且很多时候这种冲突解决起来并不easy。


问题:无法解决所有的 jar 包的版本依赖问题


如,当是序列化相关的类库时,以 Hessian 为例,如果应用中的一个组件需要使用 Hessian 3,而另一个则必须要使用 Hessian 4,由于 Hessian 3 和 Hessian 4 之间的不兼容性,并且序列化还涉及到微服务中的上下游服务,要把 Hessian 统一到一个版本绝非易事。


3. 日志监控能力不够


场景:在超大规模微服务运维的场景下,运维能力的平台化是一个一定要解决的问题,而监控又是其中非常主要的一个点,针对于日志监控这种情况,Spring Boot 并没有提供任何解决方案。


问题:没有提供特定日志监控,造成开发成本过高


如,大部分的开源组件,具体要打印哪些日志,打印到什么路径,什么文件下面,都是由应用的使用者来决定,这样会导致每一个应用的日志配置都各式各样,每一个应用都需要去监控系统中配置自己应用的日志监控,导致关键的监控的实施成本特别高。


4. 不支持模块化开发


场景:在企业级应用场景,模块化开发是解决多团队间沟通成本的有效解决方案,每个业务团队只用专注于开发自己的应用模块,每个模块分离,便于开发及自测,减少团队间的沟通成本,提高开发效率。


问题:缺少模块化开发


如,所有 Bean 共用一个 Spring 上下文,在多团队开发时,如果不同团队定义了相同 BeanId,运行时将出现 BeanId 冲突错误,这是个非常常见的问题。


5. 结合自身业务,需要集成蚂蚁自己的中间件


蚂蚁金服 SOFA 中间件中的各个组件本身也需要集成 Spring Boot,所以基于 Spring Boot 开发并开源了 SOFABoot,来解决以上的问题,也方便使用者在 Spring Boot 中方便地去使用 SOFA 中间件。


基于以上这些问题和自身的业务需求,蚂蚁研发了 SOFABoot,用于对 SpringBoot 进行了增强。

 

功能介绍

03


具体,SOFABoot 提供了以下的能力:


1. 增强 Spring Boot 的健康检查能力


针对 Spring Boot 缺少 Readiness Check 能力的情况,SOFABoot 增加了 Spring Boot 现有的健康检查的能力,提供了 Readiness Check 的能力。利用 Readiness Check 的能力,SOFA 中间件中的各个组件只有在 Readiness Check 通过之后,才将流量引入到应用的实例中,比如 RPC,只有在 Readiness Check 通过之后,才会向服务注册中心注册,后面来自上游应用的流量才会进入。用来保证系统更加的稳定和安全!


除了中间件可以利用 Readiness Check 的事件来控制流量的进入之外,PAAS 系统也可以通过访问 http://localhost:8080/health/readiness 来获取应用的 Readiness Check 的状况,用来控制例如负载均衡设备等等流量的进入。


2. 提供类隔离的能力


为了解决 Spring Boot 下的类依赖冲突的问题,SOFABoot 基于 SOFAArk 提供了 Spring Boot 上的类隔离的能力,在一个 SOFABoot 的系统中,只要引入 SOFAArk 相关的依赖,就可以将 SOFA 中间件相关的类和应用相关的类的 ClassLoader 进行隔离,防止出现类冲突。当然,用户也可以基于 SOFAArk,将其他的中间件、第三方的依赖和应用的类进行隔离。


3. 日志空间隔离能力


为了统一大规模微服务场景下的中间件日志的打印,SOFABoot 提供了日志空间隔离的能力给 SOFA 中间件,SOFA 中间件中的各个组件采用日志空间隔离的能力之后,自动就会将本身的日志和应用的普通日志隔离开来,并且打印的日志的路径也是相对固定,非常方便进行统一地监控,有效提供运维的工作效率!


4. 增加模块化开发


SOFABoot 从 2.4.0 版本开始支持基于 Spring 上下文隔离的模块化开发能力,每个模块使用独立的 Spring 上下文,避免不同模块间的 BeanId 的冲突,有效降低企业级多模块开发时团队间的沟通成本。显著提高研发效率!


5. 提供 SOFA 中间件的集成管理


基于 Spring Boot 的自动配置能力,SOFABoot 提供了 SOFA 中间件统一易用的编程接口以及 Spring Boot 的 Starter,方便在 Spring Boot 环境下使用 SOFA 中间件,而且各个组件都是独立可插拔的,节约开发时间,和后期维护的成本。

 

最后

04


该项目目前已经开源,更详细的介绍可以去官方文档学习。


官网https://www.sofastack.tech/
Giteehttps://gitee.com/sofastack/sofa-boot
文档地址https://www.sofastack.tech/sofa-boot/docs/Home/


最后,再好的东西也需要结合自身的业务需求,目前来看 SOFABoot 更多是为了满足蚂蚁金服自身的业务发展,并不一定适合每个公司。使用前需要先了解自己公司是否真的需要,避免无端增加学习的成本。


END

 


 


终码一生长按扫描二维码
关注我们 获取更多技术资讯
微信号:zma_1314

 


往期推荐

Java16即将发布 你了解他的前世今生吗

官方6种免费获取 IntelliJ IDEA 激活码的方式

【开源框架】这个牛x的开源项目 你知道吗?

再见,Navicat!这个IDEA的兄弟,大赞!

有了这个插件  再也不用担心IDEA过期了

告别Postman


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存