SOFAStack的前世今生

十二年前,为了解决支付宝第一代架构在迅猛发展的业务面前捉襟见肘的困境,蚂蚁金服技术团队开启了一次前所未有的尝试。创新都是被逼出来的,今天高速发展的SOFAStack同样如此。

十二年时间,几代蚂蚁技术人参与攻坚,SOFA走出了一条跟传统金融行业不同的分布式架构之路。这条路,既要基于不可靠的硬件系统实现金融级的性能和可靠性,又要应对支付宝这样的超大规模互联网金融应用,很不容易,但蚂蚁技术团队做到了。今天,就让我们聊聊SOFAStack的前世今生。

SOFA缘起

2006年,支付宝面临的最大问题是业务变得越发复杂,工程师数量也越来越多,原来的单体系统逐渐无法装载更多更复杂的业务逻辑,也不能让大量工程师一起并行工作。当时的支付宝希望,系统可以做到成百上千个项目并行进行,并且每个工程师可以不受干扰地工作,当业务逻辑增加的时候,系统的复杂度不至于指数级上升。技术团队要做对未来的技术架构做一个选择。

支付宝团队做了一个决定,要走一条过去没有人走过的路,启动了支付宝技术系统的服务化之路,也是支付宝第二代架构的由来。2007年开始,支付宝启动了对交易系统、商户系统、会员系统、支付清算系统的改造。

当时担任支付宝首席架构师的程立,给要做的这套分布式架构起了一个“SOFA”的名字,其背后有两个含义:一是按照当时的技术趋势,要做面向服务的架构,即Service Oriented Architecture,但加入了金融业务,所以是Service Oriented Fabric Architecture;二是希望能够像沙发一样,让工程师可以非常爽地工作。

第一代的SOFA其实就解决两个问题:一是当要把系统变成分布式的时候,怎么有一个像“胶水”一样的连接器机制,可以把分布式系统连接成一个整体;二是希望每一个服务本身是组件化的,所以当时第一代SOFA里采用了OSGi(一套Java模块化规范,允许应用程序使用精炼、可重用和可协作的组件构建),这样每个工程师可以专注于各自的组件,最后又能够把这些组件拼装在一起成为“服务”,再把“服务”拼装在一起成为整个大系统。这一整套框架,就是第一代SOFA框架。

2008年1月,SOFA项目上线,成为蚂蚁金服延用12年之久并持续打磨至今且对外开源的一套技术架构。

SOFA技术演进

SOFA的版本迭代跟蚂蚁金服的架构发展是密切相关的,作为一个演进了十多年的框架,它也一定程度上代表了蚂蚁金服的技术体系演变。

从第一代到眼下的第五代,SOFA的演进过程其实是支付宝从最早的大型业务与IT交织在一起的单体系统,一边拆金融业务系统(即后来的业务中台)、一边拆底层IT系统(即后来的数据中台、计算中台)的过程,在拆分的过程中还要解决新出现的可扩展性、一致性问题等各种问题,同时不断应付每年都能击穿系统极限的双十一,还要把数据从原有系统一点一点“倒腾”到新系统里、同时管理新增的海量数据。

蚂蚁金服金融产品技术部总经理杨冰透露,“SOFA中间件在蚂蚁内部经历了十年的发展和五代架构的演进,被广泛应用在包括支付、借贷、信用、基金、保险等全金融场景,支撑着蚂蚁平稳度过历次双十一、双十二、新春红包等大考,创造了25.6万笔每秒的交易纪录,并还在不断刷新这个纪录。”

早期的SOFA在项目推进的过程中既有研发平台又有研发上层的业务系统,相当于把很多风险都导在一个项目里面一起做,SOFA第一代项目就是靠团队齐心协力,每天都会遇到新问题、每天都要去解决各种问题,但大家背后有必胜信念而且非常拥抱变化,敢于在项目的中后期把前期架构决定全部推翻掉,再用一套新的架构替代

杨冰提到,随着每年的交易量的不断上升,逼着技术团队必须从单体架构转到服务化架构,然后演进到单元化架构、弹性架构。SOFA 大部分的功能升级都是伴随着整个公司的技术架构目标上的更大挑战进行的。

杨冰完整经历了SOFA1到SOFA2的开发过程,从SOFA1整体完成落地,到SOFA2引入了服务的架构。到了SOFA3蚂蚁团队把Tomcat JBoss层替换为自研的应用服务器,解决了内部系统做类隔离、模块隔离以及合并部署的问题。

而现在,SOFA已经逐渐从解决分布式服务和分布式交易的问题,变成一个真正解决金融级系统构建的基础架构问题。这也是SOFA改名的原因,从原来的Service Oriented Fabric Architecture改为Scalable Open Financial Architecture:

  • Scalable代表着这个框架可以真正解决金融级系统的异地多活的容灾和扩展问题,而且SOFA的可扩展能力不仅是处理更多的交易,还可容纳更多的业务,能够让几千位工程师甚至未来上万个工程师一起协同工作;
  • Open的意思是希望这个框架可以让业务应用非常容易使用,又能与经典架构系统有机融合,SOFA框架未来不但可以编排蚂蚁金服工程师自己写的业务逻辑,而且可以编排合作伙伴的业务逻辑,成为一个完整的编排框架;
  • Financial则意味着SOFA必须是具备金融级属性,能真正实现金融级的一致性、可用性和稳定性。

走向开源

开发者看开源,看到的可能是情怀。商业公司看开源,看到的可能是共赢。

对于蚂蚁金服来说,开源可以扩大技术服务场景,为支付、金融等更多的客户提供服务,提升合作伙伴的效率。虽然,蚂蚁金服已经有很多的业务场景,也在很多场景下取得了超大规模的实践经验,但是,依然存在没有覆盖到的金融服务场景。

因此,选择将技术开源出来,可以供更多的客户应用到其自身的场景下,这些场景有效地补充了蚂蚁金服的技术应用面,也为更完善的技术框架奠定了基础。所以,蚂蚁选择将SOFA中间件框架逐步开源,在贡献给社区的同时,也期望社区、合作伙伴、客户一起参与共建,形成行业标准和最佳实践。

对金融服务而言,监管和自主可控的要求更多,开源是一种可以使客户和上下游产业共同参与和发展的可行模式。SOFA走向开源并不是技术部门去说服公司决策层开源,而是业务发展的自然选择,也是一种合理的发展方向。

开源并不是简单地将代码上传到GitHub上,前期面临很多繁重的工作,也正因如此,SOFA直到发展到第四代才做好了开源的准备。

杨冰表示,从 SOFA3 到 SOFA4 的发展过程当中,轻量化的动作其实就是在为开源做准备,一些公用能力都希望能开源出来。蚂蚁技术团队开源SOFA不会把它的代码分为完全两套东西,然后两个分别演进,这不是开源的正确做法。除此以外,开源对整个团队的消耗非常大,蚂蚁也希望用同一套代码来实现内部的兼容和外部的开源,在开源的代码中留一些比较好的扩展点,这对SOFA本身代码架构的可扩展性也是一大挑战。

“但这是值得的,在为开源代码做改进时,也是为公司自己的业务做改进,这是双赢且可持续发展的。”杨冰补充道。

拥抱Service Mesh

Service Mesh是近两年来比较火的技术概念,进入SOFA 5时代,SOFA也全面拥抱了金融级云原生,其中Service Mesh已经在内部大规模落地,并接受双十一实战检验。

蚂蚁金服在中间件方面的探索比较深远,规模也相当大。在杨冰看来,随着基础技术平台逐步走向云化,ServiceMesh将会是连接现在这个时代和云原生时代的桥梁,也是把基础设施沉淀到蚂蚁金服整个技术平台当中非常关键的一环。随着容器技术的兴起,可以将以往的中间件组建拆分得更细、更灵动,并且资源利用率和运维效率也将得到进一步的改善。

蚂蚁金融级云原生架构已在内部大规模落地,Service Mesh是金融级云原生的重要基础设施之一。在2019年双十一大促中,Service Mesh架构已经100%覆盖蚂蚁金服核心支付链路,几十万容器,峰值千万QPS,平均RT 0.2ms,是业界最大的 Service Mesh 集群,成为金融级云原生基础设施。通过Service Mesh架构的资源分时复用技术,大规模统一资源调度,在同时支撑天猫双11和经济体用户增长两个大促的同时,实现了零IT成本增加。SOFAStack 双模微服务平台也在近日正式发布,提供了既支持 SOFA 框架又支持 Service Mesh 架构的微服务管理和治理能力。

SOFAStack,走向未来

回顾SOFAStack十多年来走过的那些艰辛困苦、高光时刻,背后默默耕耘的既有蚂蚁金服技术团队最初的架构师们、CTO们,也有一代代的基层工程师们。今天的SOFAStack,已经站在了技术的最前沿,用最先进的技术解决金融行业最艰难的问题,但故事,还在继续。

未来的SOFA将持续拥抱开源,与社区、合作伙伴、客户一起共建,并将经过内部实践的开源改进回馈给开源社区。目前SOFA已经在网商银行、中国人保健康、南京银行等金融机构中落地,未来也将持续输出给外部合作伙伴。SOFA已于9月份上线阿里云,通过全面整合金融科技与服务能力,持续为金融行业提供技术底座支撑。

未来,SOFA还继续探索和实践金融级云原生,拥抱ServiceMesh、Serverless,以开源共建的方式促进云原生技术的落地与迭代,并将蚂蚁的技术经验赋能给金融业界,真正让SOFA这一金融级分布式架构,能够帮助到万千的金融领域技术从业者们。


原文链接
本文为云栖社区原创内容,未经允许不得转载。

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

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

相关文章

从浪漫走向坚韧:开源数据库的演变

图:Peter Zaitsev作者 | Adrian Bridgwater译者 | 火火酱,责编| Carol“最初,所有的软件都是开源的。”——这是Percona首席执行官彼得扎伊采夫(Peter Zaitsev)在其公司今年虚拟年度用户/客户峰会上的开场白。如果我们…

中国数据库OceanBase登顶之路

今年天猫双11当天,OceanBase数据库再次刷新数据库处理峰值,达6100万次/秒,创造了新的世界纪录。 在此之前一个月,据权威机构国际事务处理性能委员会TPC披露:蚂蚁金服的分布式关系数据库OceanBase,打破美国…

github 访问慢,一键加速,完美访问

文章目录1. 下载dev-sidecar2. 安装3. 开机启动4. 安装证书5. 开启增强模式6. 重新启动dev-sidecar7. 测试验证1. 下载dev-sidecar https://gitee.com/docmirror/dev-sidecar/releases/v1.6.1 2. 安装 这里windows环境演示 双击安装 3. 开机启动 4. 安装证书 5. 开启增强…

给 AI 讲故事,如何教它脑补画面?

阿里妹导读:视觉想象力是人与生俱来的, AI 能否拥有类似的能力呢?比如:给出一段故事情节,如何让机器展开它的想象力,“脑补”出画面呢?看看阿里AI Labs 感知实验室的同学们如何解决这个问题。 …

产业数字化升级进入深化期,腾讯智慧出行释放“数字底座”核心能力

6月24日,腾讯智慧出行举办线上年度新品发布会。本次发布会以“创造出行新价值”为主题,发布了生态车联网产品TAI 3.0、全新一代自动驾驶虚拟仿真平台TAD Sim 2.0,以及汽车云数字营销解决方案、智慧交通解决方案,从深度和广度上展示…

MySQL与Redis的双写一致性解决方案

文章目录一、解决方案1.1 先更新缓存,再更新数据库1.2 先删除缓存,再更新数据库1.3 先更新数据库,再更新缓存二、总结一、解决方案 1.1 先更新缓存,再更新数据库 💣 问题: 数据库更新成功了,但是由于异常…

解密双十一小程序云背后毫秒级伸缩的Serverless计算平台:函数计算

自2017年第一批小程序上线以来,越来越多的移动端应用以小程序的形式呈现。小程序拥有触手可及、用完即走的优点,这大大减少了用户的使用负担,使小程序得到了广泛的传播。在阿里小程序也被广泛地应用在淘宝/支付宝/钉钉/高德等平台上&#xff…

RuoYi-Cloud 进阶篇_01( Seata 单机环境搭建)

文章目录一、部署单机 TC Server1. 下载Seata2. 解压缩3. 启动4. 监听日志5. 启动命令讲解一、部署单机 TC Server 1. 下载Seata 在https://github.com/seata/seata/releases 这里找到对应的版本软件包进行下载 注:单机模式只适用于学习或者本地测试阶段&#xf…

Logtail 混合模式:使用插件处理文件日志

作为一个服务百万机器的日志采集 agent,Logtail 目前已经提供了包括日志切分、日志解析(完整正则、JSON、分隔符)、日志过滤在内的常见处理功能,能够应对绝大多数场景的处理需求。但有些时候,由于应用的历史原因或是本…

腾讯车联发布TAI3.0:三步实现汽车智能进化,2个月快速上车

6月24日,“2020腾讯智慧出行新品发布会”在线上举行,全新升级的TAI3.0生态车联网正式亮相,并在新款哈弗F7上进行了真实驾车场景的功能展示。 据介绍,TAI3.0包含两个车载APP——腾讯随行和腾讯爱趣听,以及一个生态开放…

RuoYi-Cloud 进阶篇_02( Seata 高可用集群与 Nacos 注册中心整合)

文章目录二、安装步骤1. 创建数据库2. 修改配置文件3. 调整数据库驱动4. 修改配置中心二、 启动和验证2.1. 启动nacos2.2. 启动TC Server2.3. 启动第二个节点2.4. 验证高可用二、安装步骤 1. 创建数据库 创建名称为ry_seata的数据库,并初始化ry_seata_20210128.sql脚本 2.…

腾讯TAD Sim2.0领跑自动驾驶仿真市场 双擎驱动构建新一代仿真平台

随着自动驾驶领域硬件、算法等方面的快速发展,虚拟仿真技术在自动驾驶研发和测试领域的应用日渐广泛,成为自动驾驶量产应用的必备工具,城市智慧交通调度管理和相关法规制定的有力辅助。 在这片行业竞争新高地上,腾讯自动驾驶仿真…

RuoYi-Cloud 部署篇_03(windows环境 Oracle + nginx版本)

请参考RuoYi-Cloud 分布式部署_03(linux环境 Mysqlnginxredis版本)

为了实现在线库的复杂查询,你还在双写吗?

一、在线库不支持在线复杂查询 做在线业务的开发者经常会碰到这样的难题:在线数据库上面运行稍微复杂点的查询,在线业务就挂了!不管是单机数据库如MySQL、PG,还是分布式数据库,HBase、MongoDB、Cassandra都有这个问题…

JUC 中断线程的3种方式

文章目录介绍中断方式一中断方式二中断方式三源码解析总结介绍 三个方法: 1、public boolean isInterrupted()判断线程是否被中断,如果此线程已被中断,则为true ;否则false 。 2、public void interrupt()中断线程 3、public …

RuoYi-Cloud 进阶篇_04( Seata 高可用集群 AT模式 需求实战)

需求背景: 模拟下单场景:首先去在自己的本地创建一条下单记录,同时,还要去调用库存服务,执行减库存操作。 这里演示一个客户下订单的流程服务来为小伙伴们进一步了解一下分布式事务到底如何使用? 首先,我…

基于Tablestore多元索引打造亿量级店铺搜索系统

一、方案背景 对于一套GEO管理系统,其核心点与瓶颈在于数据库的存储性能与查询能力;一方面,存储服务需要应对海量数据的低延迟存、读,另一方面,存储服务也要提供高效的GEO多维度数据检索。表格存储(TableS…

Java中的序列化与反序列化机制

文章目录一、序列化的定义二、为什么需要序列化呢?三、如何序列化四、案列实现4.1、将对象序列化位二进制流4.2 将序列化后的二进制流反序列化为对象五、总结一、序列化的定义 💡 所谓的序列化就是将Java 中的对象转换成一种流的形式(二进制…

今天起,我们喝的百年牛奶要变了!

一天从一杯光明奶开始,是很多小伙伴的日常:牛奶下肚,醇厚、香甜的奶味仍余舌尖。如今,这家百年老字号正在不断焕发新能量。 今天,光明乳业与阿里云达成战略合作。双方将整合优质资源,形成聚合效应&#xf…

Spring 从入门到入土——AOP 就这么简单!| 原力计划

作者| 冢狐责编 | 夕颜出品 | CSDN博客什么是AOP?面向切面编程(Aspect Oriented Programming),通过预编译的方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点&#xff…