SOFAServerless架构的意义

传统架构的痛点

资源成本高企:每个微服务,无论业务量大小,通常都需要独立的计算实例(如虚拟机或容器)来承载。这意味着即使是一个仅处理少量请求的小服务,也需要承担完整的基础设施(如 Web 服务器、运行时框架)内存开销。对于大量长尾应用,聚合起来的资源浪费(尤其是内存)非常可观,导致资源利用率低下15。

研发运维效率瓶颈:

协作阻塞 :多人协作开发同一个大型应用时,功能开发、测试、发布相互依赖,形成串行流程,任何一个环节的延迟都会阻塞整个应用的迭代速度。

反馈周期长 :传统应用启动缓慢(尤其是 Java 应用),构建和部署流程耗时数分钟甚至更长。这导致从代码提交到验证上线的周期很长,难以支持业务的快速试错和频繁发布。
架构演进僵化:在业务发展过程中,应用需要在单体、模块化、微服务等架构形态间平滑演进。但无论是将单体拆分为微服务,还是将多个微服务合并,传统的改造方式代码改动量和风险都极高,使得架构演进成本高昂,甚至难以实施

SOFAServerless

架构拆分逻辑

纵向拆分 :将传统单体应用拆分为基座模块 两个层次。基座作为稳定的底层运行时平台,负责机器资源、通用技术组件(如Web容器、数据库连接池等)和通用业务逻辑,为模块提供统一的运行环境。模块则是纯粹的业务逻辑单元,开发者只需关注业务实现,无需感知底层基础设施。
横向拆分 :在业务层,将业务横向拆分为多个独立的模块。每个模块可以独立开发、测试、部署和运维,从而实现并行迭代,解决多人协作时的阻塞问题。

核心技术原理列举

核心技术原理列举

构建与部署
模块构建加速的真相

模块需要依赖基座提供的容器、连接、rpc框架等,以确保编译通过,但基座的作用域被设置为provided。

在进行打包时,maven会将provided作用域的依赖排除在最终的模块JAR包外,使得构建产物非常轻量(可小于1MB)。

因此在模块部署时,构建那么快速的原因是"打包负担锐减"的结果,贡献了大部分时间节省。

部署模式的演进

分为基座容器和模块实例

基座容器:数量较少且稳定,像"服务器"一样提供基础运行环境。

模块实例:数量多于基座,根据业务需求动态部署到基座上,像"应用程序"一样灵活伸缩。

这种模式实现了极致的资源复用,多个模块共享一个基座的基础框架内存开销,避免了传统微服务每个应用独立部署的浪费。

且因热部署的原因,模块部署在基座上的效率远比微服务部署的速度更快,加快了发布上线的速度,提升了工程效率。

类隔离机制

SOFAArk框架是实现多模块共存的基础。SOFAArk框架为每个模块创建一个独立的SOFAArk ClassLoader

这种机制确保了:

隔离性:不同模块可以使用相同依赖库的不同版本而不会发生冲突。

共享性:模块的类加载器将基座的类加载器作为父加载器,从而可以安全地复用基座已加载的类。

通过这种机制,既实现了模块间的隔离,又避免了重复加载基础类造成的资源浪费。

热部署技术

热部署是实现秒级发布的关键。当需要更新模块时,运维平台通过热部署技术将新模块包动态安装到正在运行的基座JVM进程中。

这个过程无需重启基座,通常能在秒级完成

核心价值体现

SOFAServerless带来的核心价值可总结为以下几点

价值维度 传统应用 SOFAServerless模块 提升效果

发布效率 平均6分钟 10-30秒 10倍以上提升

资源占用 每个应用独立基础框架开销 多模块共享基座开销 资源利用率提升10倍

变更风险 影响整个应用 仅影响单个模块 变更范围大大缩小

思考与总结

SOFAServerless的核心思路,是通过"基座+模块"的架构,对传统应用进行纵向和横向拆分,旨在解决微服务架构普遍存在的资源成本高、研发运维效率低、应用拆分难度大等问题。

通过优化"构建与部署","类隔离机制","热部署技术",极大效率的节省了资源和部署的效率。通过引入基座的方式屏蔽基础设施,模块的开发者可以专注于业务逻辑,减少其他基础设施问题的干扰。

相关推荐
杨运交11 分钟前
[071][验证码模块]基于Spring拦截器的验证码认证设计思想
java·后端·spring
Geek-Chow27 分钟前
CountDownLatch in Java
java
zx_7414848131 分钟前
【Linux入门】Shell 函数、正则表达式与文本处理:cut 与 awk
linux·运维·正则表达式
Zenova EdgeOS43 分钟前
Linux dmesg 工业边缘实战:内核日志过滤、持久化与故障定位
linux·运维·边缘计算·工业边缘·dmesg·内核日志
SL_staff1 小时前
从RBAC到场景化授权:《无忧·企业文档》三级权限模型的技术实践解析
java·开源·产品
传奇开心果编程2 小时前
【springboot基础语法学与练】第 1 课:从零开始
java·spring boot·后端·学习
wdfk_prog2 小时前
ROS教程08:从 TransportTCP::connect() 追到 TCPROS Connection Header、序列化与 Socket 数据传输
运维·缓存·docker·容器·ros
SL_staff2 小时前
财务系统慎用低代码?从数据模型闭环看合规落地的技术实践
java·低代码·全栈
滕州市燕猫虎计算机科技工作室个体工商户2 小时前
IDEA:Command line is too long
java·ide·intellij-idea
做运维的阿瑞2 小时前
Python 标准库汇总:分类速览与常用模块清单
linux·运维·python