线上应用 10 秒启动、只占 20M 内存不再是想象~SOFAServerless 为你带来极致研发体验

你想让手上的工程仅需增加一个打包插件,即可变成10秒启动,只占20M内存的工程吗?你是否遇到大应用多人协作互相阻塞,发布效率太低的问题吗?是否遇到小应用太多,资源浪费严重的问题吗?今天我们和大家介绍基于模块化能力,从应用架构、研发框架和运维调度方面提供的完整配套的 SOFAServerless 项目,帮助解决这些与你息息相关的问题,让存量应用一键接入,享受秒级启动、资源无感等收益,轻松跨入 Serverless 研发模式,帮助企业降本增效。

模块化应用架构

为了解决这些问题,我们对应用同时做了横向和纵向的拆分。首先第一步纵向拆分:把应用拆分成基座业务两层,这两层分别对应两层的组织分工。基座小组与传统应用一样,负责机器维护、通用逻辑沉淀、业务架构治理,并为业务提供运行资源和环境。通过关注点分离的方式为业务屏蔽业务以下所有基础设施,聚焦在业务自身上。第二部我们将业务进行横向切分出多个模块,多个模块之间独立并行迭代互不影响,同时模块由于不包含基座部分,构建产物非常轻量,启动逻辑也只包含业务本身,所以启动快,具备秒级的验证能力,让模块开发得到极致的提效。

拆分之前,每个开发者可能感知从框架到中间件到业务公共部分到业务自身所有代码和逻辑,拆分后,团队的协作分工也从发生改变,研发人员分工出两种角色,基座和模块开发者,模块开发者不关系资源与容量,享受秒级部署验证能力,聚焦在业务逻辑自身上。

这里要重点看下我们是如何做这些纵向和横向切分的,切分是为了隔离,隔离是为了能够独立迭代、剥离不必要的依赖,然而如果只是隔离是没有共享相当于只是换了个部署的位置而已,很难有好的效果。所以我们除了隔离还有共享能力,所以这里需要聚焦在隔离与共享上来理解模块化架构背后的原理。

架构的优势

我们根据在蚂蚁内部实际落地的效果,总结模块化架构的优势主要集中在这四点:快、省、灵活部署、可演进上,

与传统应用对比数据如下,可以看到在研发阶段、部署阶段、运行阶段都得到了10倍以上的提升效果。

适用的场景

经过在蚂蚁内部 4 到 5 年的打磨,逐渐沉淀出适用的6大场景,可以看看是否有你适合的口味?

运维调度平台架构

只有应用架构还不够,需要从研发阶段到运维阶段到运行阶段都提供完整的配套能力,才能让模块化应用架构的优势真正触达到研发人员。

![](https://intranetproxy.alipay.com/skylark/lark/0/2023/png/149473/1695182073971-12b14861-b6fa-470c-a140-737d40ff0b3e.png#clientId=u9014394b-3a6a-4&from=paste&height=192&id=ub53430b2&originHeight=384&originWidth=1720&originalType=binary&ratio=2&rotation=0&showTitle=false&size=79335&status=done&style=none&taskId=u1eb2a897-c2ca-437f-8d56-7067be175e2&title=&width=860) 在研发阶段,需要提供基座接入能力,模块创建能力,更重要的是模块的本地快速构建与联调能力;在运维阶段,提供快速的模块发布能力,在模块发布基础上提供 A/B 测试和秒级扩缩容能力;在运行阶段,提供模块的可靠性能力,模块可观测、流量精细化控制、调度和伸缩能力。


组件视图

在整个平台里,需要个组件:

  1. 研发工具 Arkctl, 开发者使用 Arkctl 完成模块快速创建、快速联调测试等能力
  2. 运行组件 SOFAArk,提供基于 ClassLoader 的多模块运行的环境
  3. Arklet 和 Runtime 组件,提供模块运维、模块生命周期管理,多模块环境适配
  4. 控制面组件 ModuleController
    1. ModuleDeployment 提供模块发布与运维能力
    2. ModuleScheduler 提供模块调度能力
    3. ModuleScaler 提供模块伸缩能力

在这些组件基础上提供了从研发到运维到运行时的完善的配套能力。

多集群,弹性与调度

将线上应用根据场景隔离出不同机器组,不同机器组上可以安装不同模块,给不同业务提供不同的 QOS 保障。同时可以单独划分出 buffer 机器组,当业务机器组机器不够时,可以快速从 Buffer 机器组里调度出机器,安装上相应的模块,完成 10 秒级的扩容。

由于模块的启动速度在 10 秒级,所以在弹性上也能做到与服务更加同频,伸缩更加实时,这里看到应用实例数曲线与流量曲线基本处于一致的状态。

可观测、高可靠、排障等能力

模块化运维调度作为在 pod 上一层的模型,与现有配套设施会有些不同,所以需要针对配套设施完成可观测、监控排障等能力适配。

AB 测试/灰度

一个模块更新时,可以同时存在多个版本,通过引流规则完成灰度测试,或者 A/B 测试。

流量隔离与精细化路由

在上述中已经将应用粒度从机器分组,代码分组(模块)上做了更细粒度的划分,这里我们进一步将流量也进一步细粒度划分。一组模块和对应所在的机器组可以分配不同的流量单元,可以根据请求的不同参数,精细化路由到对应的流量分组中。

当前完整能力已经开源 https://github.com/sofastack/sofa-serverless,并提供 2 分钟上手试用视频教程,https://sofaserverless.gitee.io/docs/video-training/ 欢迎试用,也期待与大家一起建设社区。当前已接入 15+ 企业列表

如果你也想帮助企业完成降本增效,欢迎咨询探讨。

未来展望

在未来,SOFAServerless 将持续不断地探索,根据业务痛点为各行各业提出 Serverless 的解决方案。感谢各位开源共建开发者一直以来的支持与付出!排名不分先后

@QilingZhang @lvjing2 @glmapper @yuanyuancin @lylingzhen @yuanyuan2021 @straybirdzls @caojie09 @gaosaroma @khotyn @FlyAbner @zjulbj @hustchaya @sususama @alaneuler @compasty @wuqian0808 @nobodyiam @ujjboy @JoeKerouac @Duan-0916 @poocood @qixiaobo @lbj1104026847 @zhushikun @xingcici @Lunarscave @HzjNeverStop @AiWu4Damon @vchangpengfei @HuangDayu @shenchao45 @DalianRollingKing @lanicc @azhsmesos @KangZhiDong @suntao4019 @huangyunbin @jiangyunpeng @michalyao @rootsongjc @liu-657667 @CodeNoobKing @Charlie17Li @TomorJM @gongjiu @gold300jin @nmcmd

12 月 16 日 KCD 2023 深圳站(插入文章链接),期待和各位技术爱好者面对面交流探讨!

我将分享**《云原生微服务的下一站,蚂蚁 SOFAServerless 新架构的探索与实践》活动现场还将设立展台进行 SOFAServerless 能力演示、操作流程互动展示**如果你对 SOFAServerless 感兴趣,欢迎前来参与体验~

体验可以点击:https://sofaserverless.gitee.io/docs/tutorials/trial_step_by_step/

如有问题可在 SOFAServerless GitHub 上及时提交 issue 互动交流~