SOFAStack 的下一个五年

news2024/11/19 3:46:40

ad7079ca646b83d0825c679f106045f7.gif

文|宋顺(GitHub ID:nobodyiam)

SOFAStack 社区开源负责人

蚂蚁集团高级技术专家

ad2673c992cefd2da6551fb3ca45eb8c.jpeg

本文 3861 字 阅读 11 分钟

#01 

回顾开源这五年

回想起 2018 年 4 月 19 日 SOFAStack 首次开源,当时的官宣文章中就提到了我们开源的初心:

期望通过逐步向社区开源 SOFA 中各个组件,从而一方面帮助更多机构和合作伙伴完成金融分布式转型,帮助大家更加快速构建稳定的金融级云原生的架构,另一方面也是期望 SOFA 在蚂蚁体系之外的更大场景下去应用,来进一步锻造改进这套体系,使其更加完善和稳固。

所以这几年我们也是围绕着这个初心把 SOFAStack 体系的各个产品逐渐开源,包括首批开源的 SOFABoot、SOFARPC、SOFAArk,以及后来的 SOFARegistry、SOFAJRaft、Seata 等。同时我们也孵化了 MOSN 社区,开源了云原生网络代理 MOSN 以及应用运行时 Layotto。这些产品也是代表着 SOFAStack 在金融级云原生领域的沉淀和积累,目前已经在上百家企业中生根发芽。

5a19a11fffc901d0d5b1aed1fe391d06.png

图 1 - 产品开源时间线

我们再来看几个数字,在这 5 年中,我们举办了 18 场 Meetup,开展了 32 场直播分享,目前在 GitHub 组织层面有 438 名贡献者以及 3W 的 Star。

b851fece994021106c37dd2c7a5e5167.png

图 2 - 开源 5 年的几个数字

除了在项目上收获了不少贡献者和 Star 外,我们也逐渐地对开源有了更为深刻的认识。

以开源指标为例,我们的初心是为了帮助更多机构和合作伙伴完成金融分布式转型,我们一开始最为关注的指标是用户数;但因开源的特殊性,我们无法直接获取实际的用户数,所以采用了 GitHub 的 Star 作为衡量指标。

我相信这也是很多开源项目常见的第一反应,后期大家其实也发现了一些问题。举例来说,有些开源项目为了完成指标,采取了点 Star 送礼物等行为。这些虽然没有在我们的项目上发生,我们仍觉得有违开源初心,就放弃了 Star 数作为核心的指标。

13bfd54546b61f0c25b441e174a7c3d7.png

图 3 - Star 数作为衡量指标

另一个开源项目常用的衡量指标是贡献者数量,很多开源项目是没有商业公司支撑的。为了项目的长期发展,需要持续的吸引新的贡献者加入,从而为社区带来活力。

我们在放弃 Star 数指标后,把重心放在了贡献者数量上,会为新贡献者提供一些简单的任务,使他们能更快的融入社区,成为潜在的长期贡献者。

不过和 Star 指标类似,在过程中我们也发现其它社区中出现了一些不好的现象。比如故意留一些明显的 bug,或者提供一些修改错别字的任务来刷贡献者数量,我们认为这些也是有违开源初心的。

e8f938e54153d1883591c34547a35360.png

图 4 - Contributor 数作为衡量指标

那么,我们该如何对待开源呢?

我脑海中想起了 Envoy 作者 Matt Klein 在 Envoy 开源五周年时说的一句话:成功的开源软件就像创办一个企业。

a5a99de5e7c51b49a2fc26bcd2d21658.png

图 5 - 成功的开源软件就像创办一个企业

其实开源项目和创业很类似,首先你需要有一个好的点子,然后去吸引人才一起加入来提升产品能力,再通过一些营销手段对项目做推广来获取客户,而后持续迭代改进。

对企业而言,员工和客户固然很重要,不过我认为最核心的还是产品,只有一个定位准确、解决实际问题的产品才能受到市场欢迎,从而获取资金维持公司的运营。

在开源项目上,用户对应着企业的客户,是提供场景的驱动力来源;贡献者对应着企业的员工,属于资源投入,是推动力来源;而产品才是真正能解决用户问题的,是整个开源飞轮中最为核心的部分。所以 Star 数和贡献者数量都只是过程指标,核心还是要提升产品力,不能本末倒置。

a2f6e6f3ca600962804cd04955e03b4f.png

图 6 - 开源飞轮

#02

展望下一个五年

聊完了过去五年的过程和收获,对 SOFAStack 而言,下一个五年的主要方向就比较明确:我们还是会着重放在产品力的提升上,希望能持续解决分布式场景中的核心问题。

那核心问题究竟是哪些呢?我想起了泛在计算的提出者 Mark Weiser 曾经说过的一句话:最卓越的技术是那些“消失不见的”技术。

4ade71c817c83aaf48a92e0ae303706c.png

图 7 - 消失不见的技术

对这个判断,我也是深以为然。在日常生活中,这类案例也是比比皆是:比如电,我们现在都是即插即用,以至于已经不感知电力背后的复杂基础设施,类似的还有水、煤气等。它们背后都有着复杂的基础设施在支撑,经过了数十年的技术发展之后,已经非常稳定可靠,交互也非常简单,所以这些技术就像是“消失不见”一样。

9c1aa26ab4bb9991cdcbc8afc4135eca.png

图 8 - 水电煤随开随用

然而在我们实际的研发场景中,业务研发对基础设施的感知还远没有达到无感的地步。

比如在研发态,我们除了要关注业务逻辑之外,还会经常被中间件 SDK 升级所打扰,在使用云产品时还得感知多云的差异。

在运维态,除了要关注发布时的业务表现,还要时刻去关注资源状况。在其容量不足的时候要申请资源做扩容,在业务低峰的时候要缩容服务来节约成本。

可以说,技术基础设施的存在感越强,研发运维的效率就越低,无法把精力集中在业务的创新上。

11395b81b4fdc9fee2b5fa0afadfd880.png

图 9 - 实际研发场景

那么,我们该如何才能让技术基础设施也消失不见呢?

我们知道对微服务而言,可以通过服务网格来解耦业务逻辑和 RPC 通用能力,从而实现独立演进、透明升级。

3f100359e81600258d37718c0a2851e6.png

图 10 - Service Mesh 演进架构

项目地址:https://github.com/mosn/mosn

在实际场景中,除了微服务之外,业务往往还会使用其它的中间件能力。例如动态配置、消息、缓存、数据库等,如何降低这些中间件和业务应用的耦合是一个新的问题。另外,在多语言场景,我们仍然要为每种语言开发一套轻量 SDK 来实现通信协议和编解码逻辑,这部分也有很高的成本。所以我们如何进一步去降低多语言的支持成本是另一个亟待解决的问题。

为此,我们也是借鉴了 Dapr 的应用运行时思路,基于 MOSN 设计开发了 Layotto,在下层对接了各种基础服务;在上层为应用提供了统一的、具备各种分布式能力的 API。

开发者不需要再关心底层各种组件的实现差异,只需要关注应用本身需要哪些能力。比如调用 RPC、发送消息,然后通过 gRPC 调用对应的 API 即可。这样就可以彻底和底层基础服务解绑,同时也是极大地降低了多语言的支持成本。

25a8ca876cb2c8ef641bd6161afb7923.png

图 11 - Layotto 架构

项目地址:https://github.com/mosn/layotto

通过服务网格和应用运行时,我们解决了研发态对中间件 SDK 升级、多云差异感知等负担,我们再来看下如何通过 Serverless 技术来降低运维态的负担。

我们知道业务研发一般是从需求到设计、开发、测试,最后发布生产的一个循环过程,其中不少业务还会出现多个迭代并行开发的场景。然而发布生产要求是串行的,就会导致迭代堵车的现象,后一个迭代必须得等前一个迭代发完才能开始发布,整体效率比较低。

除此之外,随着业务重要性的提升,发布流程也会变重,发布周期短则几个小时,长则几天甚至几周也屡见不鲜。同时,业务逻辑的增加也会导致应用启动变慢,启动一个系统往往需要几十分钟,导致应用扩容等操作响应迟缓。

f905bdd41496c0ea736f30ba77c3b0dd.png

图 12 - 研发迭代形式

我们经过分析,发现不少应用代码本质上是可以分成两层的。一层是公共逻辑和核心模型,这部分是比较稳定的,很少有变化。另一层是基于公共部分之上的逻辑,我们把它抽象为模块,模块和业务逻辑紧密相关,变化也较为频繁。

因此我们首先考虑把代码拆分成基座和模块,在基座代码库中沉淀通用逻辑,为模块提供计算支撑,同时为每个模块也创建独立的代码仓库。

在运行时通过 SOFAArk 技术实现基座和模块在同一个进程中展开,同时开发了热部署的能力从而模块可以独立于基座运维。

这样,我们就区分了基座开发者和模块开发者。基座开发者和传统的应用开发没什么区别,而模块开发者由于不再需要关注容量、资源,同时可以独立于基座运维,实现了 Serverless,具备了快速迭代和快速伸缩能力。

这个方案也存在一些不足:比如因为依赖 SOFAArk,所以主要针对 Java 场景,另外由于多个模块是在同一进程中运行,因此隔离性较差,会互相影响。

376697b0531b24b6aa3b1d4d61671bbc.png

图 13 - SOFAArk 热部署

项目地址:https://github.com/sofastack/sofa-ark

由于 Serverless 方案存在上述提到的技术栈、隔离性等问题,在覆盖面上还是有一些盲区。结合业界的实践,我们决定继续向 FaaS 迈进。

图 14 直观地展示了应用研发粒度的演变过程:最早从单体应用到微服务,是把粒度降低到服务级别,从而解开了业务团队之间的耦合。

我们现在是继续把粒度降低到函数级别,以此来实现快写快发、免运维,从而进一步提升研发和运维效率。

d24351e71b934fae5858b3ca3182d6ed.png

图 14 - 应用粒度演变

图片来源:https://www.cloudflare.com/zh-cn/learning/serverless/glossary/function-as-a-service-faas/

考虑到函数粒度是非常小的,FaaS 的应用范围是相对有限的。我们认为下面这些场景是比较适合 FaaS 研发模式的:

  • 碎片化需求场景:例如 BFF,大多是胶水代码,逻辑简单,不过需求变化快,通过函数实现组装式开发,从而助力业务创新

  • 事件驱动场景:例如音视频转码,大多是 CPU 密集型,对处理时间不是特别敏感,而且有着比较明显的波峰和波谷

  • 中台业务场景:例如算法平台,它的的算子逻辑比较独立,但是参与研发人数多,所以代码逻辑不可控,需要更好的隔离能力

f8ccd17cb08dd737e8bf1a9d25b06825.png

图 15 - FaaS 适用场景

目前我们也在公司内部探索 FaaS ,整体产品架构如图 16 所示,未来我们也会逐步地去开源相应的组件。

  • 触发源支持 RPC、HTTP、Message、Cron 等

  • 冷启动采用了 Cache pool、 Fork 等技术实现加速,对简单的 Node.js 和 Java 函数可以实现几百毫秒冷启动

  • 提供了 Layotto 作为 Sidecar 帮助函数轻松访问各类 BaaS 服务,同时具备完善的治理能力

f79226faad7379a91f4dc3db10e9097d.png

图 16 - SOFA Function 产品架构

#03

致谢

最后,值此 SOFAStack 开源五周年,还是要对大家表示感谢。

首先,我要感谢所有 SOFAStack 项目的贡献者们,无论是提交代码、撰写文档、解答问题,还是组织活动、传播理念,正是因为有了你们的不懈努力和无私奉献,才让 SOFAStack 能够不断完善和进步,使更多用户受益。

051dfcdb0d1186b22d5cbd124283337e.png

图 17 - SOFAStack 的贡献者

其次,我要感谢所有选择使用 SOFAStack 产品的合作伙伴和用户们,无论是金融机构、互联网企业还是个人开发者,正是因为有了你们的信任和支持,才让 SOFAStack 能够在各种复杂的场景中得到验证和应用,持续提升产品能力。

ff16f7c984f9f4d1991298781ae8eda4.png

图 18 - SOFAStack 的用户

最后,我还要感谢所有关注和关心 SOFAStack 社区的朋友们,正是因为有了你们的鼓励和期待,才让 SOFAStack 社区持续保持活力。

那让我们保持初心,一起把 SOFAStack 社区建设得更开放、更有趣! 

👇🏻 观看现场 live 的请点击 👇🏻

SOFAStack 的下一个五年

 了解更多...

Layotto Star  一下 
https://github.com/mosn/layotto

  本周推荐阅读  

e24a7bfdbad5a219bb8231e96a559c4e.png

SOFARegistry|聊一聊服务发现的数据一致性

b8b79cd748c5ff054950ccc68176bd5a.png

Go 语言如何做逆向类型推导?

075b8df5a6730a4ccc82cf6211809ac4.png

MOSN 基于延迟负载均衡算法——走得更快,期待走得更稳

448a992e0a62847d959c36b27d6de56e.png

缘起|蚂蚁应用级服务发现的实践之路

509cdc8fb54da3603989b558a3a7efc6.jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/670014.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++——map/mutimap再理解

目录 1. map 1.1 map介绍 1.2 map的构造 1.3 map插入和删除 1.4 map的迭代器 1.5 map[ ]运算符重载 1.6 map的查找find 1.7 map的删除erase 1.8 map的其它函数 1.9 map的总结 2. multimap 2.1 multimap的介绍 2.2 mutimap的使用 1. map 1.1 map介绍 1、map是关联…

多窗口通信

1、基本概念 BroadcastChannel接口代理了一个命名频道,可以让指定 origin 下的任意 browsing context 来订阅它。它允许同源的不同浏览器窗口,Tab 页,frame 或者 iframe 下的不同文档之间相互通信。通过触发一个 message 事件,消…

第3讲:使用ajax技术实现异步登录功能(XMLHttpRequest)

封装XMLHttpRequest对象,实现ajax异步登录功能;用三种不同的方法实现登录功能, 方法一:返回文本内容; 方法二:返回JSON格式数据; 方法三:使用fastJSON生成JSON数据,返…

Tensorboard‘s sample_per_plugin

Tensorboard’s sample_per_plugin Tensorboard’s sample_per_plugin controls the step size of the slider. Draw the train images to tensorboard: step 0 writer SummaryWriter() for imgs, labels in train_loader:grid torchvision.utils.make_grid(imgs)writer.…

Android 设计中心 | 助您为各种设备类型轻松打造精彩界面

作者 / Android 开发者体验部设计负责人 Adhithya Ramakumar 和 Android 高级开发者关系工程师 Rebecca Gutteridge 我们推出了 Android 设计中心,帮助开发者更轻松地针对各种类型的设备构建引人注目的界面。 Android 设计中心https://developer.android.google.cn/…

转型内卷下,IT部门如何突围?

在数字化转型极度“内卷”的环境下,传统的IT运维方式无法应对当前的数字化发展需求,在转型过程中,IT部门不但要加深技术与业务的融合,还需要控制成本创造更高的效益。对信息部门的要求进一步提升。 需要明确的是,降本…

废品回收系统开发详细流程--干货分享

废品回收系统的未来可谓是一片光明。随着人们环保意识的不断提高,越来越多的人开始关注废品回收和再利用。这种趋势也在推动着废品回收系统的发展。 目前,各大城市都已经建立了自己的废品回收体系,并且逐渐形成了规模化、产业化运作。同时&a…

EAP如何帮助锂电池厂商提高产品质量?

锂电池作为现代电池技术的重要代表,广泛应用于电动车辆、便携式电子设备和能源储存系统等领域。随着市场竞争的加剧,锂电池厂商越来越注重产品质量的提升,而EAP(Equipment Automation Programming)系统正是帮助锂电池厂…

JavaScript——跟随图片变化改变网页背景

目录 基础模板 引入ColorThief库 获取图片主要颜色 实现渐变效果 JavaScript效果——跟随图片变化改变网页背景&#xff0c;效果如下所示&#xff1a; 基础模板 首先我们准备基础模板&#xff0c;模板代码如下所示&#xff1a; <script setup> import { ref } from…

Chat GPT提示词(prompt )入门指南

prompt 是什么 prompt 是“提示、引导”的意思。在 NLP &#xff08;自然语言处理&#xff09;领域&#xff0c;prompt 通常指的是向预训练模型输入的文本&#xff0c;用于引导生成模型生成指定的文本输出。 prompt 就像是一条指路路线&#xff0c;告诉计算机生成什么样的文本…

戴尔U盘重装系统Win10步骤和详细教程

戴尔电脑深受用户们的喜欢&#xff0c;那么如何使用U盘给戴尔电脑重装Win10系统呢&#xff0c;这让很多用户都犯难了&#xff0c;以下就是小编给大家分享的戴尔U盘重装系统Win10步骤和详细教程&#xff0c;按照这个教程操作&#xff0c;就能顺利完成戴尔U盘重装Win10系统的操作…

Ansys Zemax | 如何建模人体皮肤以及光学心率探测器

光电容积脉搏波法&#xff08;PPG&#xff09;是一种低成本&#xff0c;无创的光学技术&#xff0c;可在皮肤表面进行生理测量。其最广泛的应用之一是商用智能手表和运动手环中包含的可穿戴心率传感器&#xff0c;它在日常环境下可提供舒适和连续的脉搏监测。本文演示了如何在 …

如何做好城市内涝监测工作?

城市内涝是由于降雨量过大、排水设施不足等原因导致的城市地区积水现象&#xff0c;城市内涝是严重影响城市运行和居民生活的自然灾害之一。因此&#xff0c;建立有效的城市内涝监测系统&#xff0c;对于提前发现内涝风险、采取及时的防范和应急措施至关重要。那么如何做好城市…

鼎博梯控MF1卡UID卡修复

物业发了4张卡MF1卡&#xff0c;默认无法修改卡号的&#xff08;当时不知道&#xff09;&#xff1b; 需要交物业费更新日期&#xff0c;手里只有两张卡&#xff0c;另外两个家人拿走了&#xff0c;正好我有修改卡的设备PM6&#xff0c;就准备只升级手里的两张卡&#xff0c;然…

nowcoder--牛客题霸模板速刷101

目录 BM12 单链表的排序 描述 算法思想&#xff1a;归并排序&#xff08;递归&#xff09; 解题思路&#xff1a; BM13 判断一个链表是否为回文结构 描述 方法一 思路 具体步骤 方法二 思路 BM14 链表的奇偶重排 描述 BM15 删除有序链表中重复的元素 描述 BM12 单链表的排…

老游戏的新生:探究二十年前的经典游戏为何再次风靡

随着科技的不断进步和游戏产业的飞速发展&#xff0c;我们每年都能玩到各种新的、惊奇的游戏。但是&#xff0c;在这个繁华快速的行业中&#xff0c;却时常有一些老游戏顽强地生存下来&#xff0c;并且在很多人心中再次引起了巨大的追捧和热情。这些经典游戏往往诞生于20年前或…

数据结构--》深入了解栈和队列,让算法更加高效

本文将带你深入了解数据结构栈和队列&#xff0c;这两种基础的线性数据结构在算法中的重要性不言而喻。我们将会详细介绍栈和队列的概念、分类、实现以及应用场景&#xff0c;在理解栈和队列的基础上&#xff0c;还将探讨如何通过栈和队列来高效地解决算法问题。 无论你是初学者…

LTV-6341-ASEMI代理台湾光宝储能专用光耦LTV-6341

编辑&#xff1a;ll LTV-6341-ASEMI代理台湾光宝储能专用光耦LTV-6341 型号&#xff1a;LTV-6341 品牌&#xff1a;台湾光宝 封装&#xff1a;LSOP-6 工作温度&#xff1a;-40C~125C LTV-6341特性&#xff1a; 3.0A峰值输出电流驱动能力 轨对轨输出电压 200 ns最大传播…

D. Survey in Class(贪心 + 分类讨论)

Problem - D - Codeforces Zinaida Viktorovna 的历史课上有 n 名学生。今天的作业包括 m 个主题&#xff0c;但是学生们准备时间很短&#xff0c;所以第 i 个学生只学习了从 li 到 ri &#xff08;包括&#xff09;的主题。 在课开始时&#xff0c;每个学生都将手举在 0 处。…

虚幻引擎程序化资源生成框架PCG(Procedural Content Generation Framework) 之一 PCG基础

可以和Houdini说拜拜了 文章目录 0. 概述1. 启动插件2. 工作逻辑2.1 添加PCGVolume2.2 创建PCGGraph2.3 编写PCGGraph逻辑 小结 0. 概述 Unreal Engine 5.2全新推出了程序化资源生成框架即Procedural Content Generation Framework下文简称PCG&#xff0c; 开发者可以通过PCG程…