低代码到底是不是行业毒瘤?一线大厂怎么做的?戳此了解>>> 了解详情
写点什么

SOFAStack 的前世今生

2019 年 11 月 26 日

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 这一金融级分布式架构,能够帮助到万千的金融领域技术从业者们。


本文转载自公众号蚂蚁金服科技(ID:Ant-Techfin)。


原文链接:


https://mp.weixin.qq.com/s/t1YTM6sSxV8ogULW_5qzuw


2019 年 11 月 26 日 11:59459

评论

发布
暂无评论
发现更多内容

MyChat,一个私有的“微信“

星尘的一个朋友

Java 微信 Netty IM JavaFx

笔记本电脑电池显示4%可用(已接通电源),经过清灰又莫名奇妙的可以续航啦,很奇怪!

孙叫兽

电脑故障 电池

产品 0 期 - 第四/五周作业

Jxin

记录一次BAT一线互联网公司前端JavaScript面试

魔王哪吒

JavaScript 学习 面试 前端 2月春节不断更

第十一周 学习总结

简简单单

如何极速极速搭建个人博客?Copy攻城狮用的这一招很优秀!

华为云开发者社区

JavaScript typescript GitHub React #Serverless

嘿,同学,你要的Java内存模型(JMM)来了

Simon郎

大数据 JVM Java 8

第11周学习总结

Binary

Python进阶丨如何创建你的第一个Python元类?

华为云开发者社区

Python 编程 python元类 对象 装饰器

ZEGO即构自建MSDN有序网络,为实时音视频传输极致顺畅!

ZEGO即构

程序员防猝死指南

9號

golang 程序员 职业 内存 打工人

我用 Python 分析了一波热卖年货,原来大家都在买这些东西?

JackTian

Python 数据分析 数据可视化 2月春节不断更 年货

第十三周-总结

jizhi7

与前端训练营的日子 -- Week15

SamGo

学习笔记

第十一周 安全稳定知识课后作业

简简单单

同时拿到BATJMD的Offer是怎样的一种体验?

冰河

面试 面经 offer 一起进大厂 BATJMD

华云大咖说 | 大型分布式监控系统建设经验

华云数据

编程范式( Programming paradigm )简介

引花眠

编程范式

数字化人才有哪些特性?

boshi

数字化转型 七日更

从架构设计理念到集群部署,全面认识KubeEdge

华为云开发者社区

架构 容器 云原生 集群 kubeedge

即拼商城模式开发

luluhulian

浅述 | 数据可视化在电力行业的应用前景

一只数据鲸鱼

物联网 数据可视化 能源管理 智慧电力 电力可视化

第十二周总结

jizhi7

第十一周课后练习

Binary

《零基础看得懂的Python入门教程 》——(三)打个招呼吧

1_bit

Python

3. 无转折不编程,滚雪球学 Python

梦想橡皮擦

Python python从入门到精通 2月春节不断更 python入门

week11 作业

zbest

大作业一:

未来已来

Linux下inotify + rsync实现文件实时同步

李先生

Linux 同步 rsync inotify

对接量化钱包区块链开发

v16629866266

图文详解:如何给女朋友解释什么是微服务?

浅羽技术

Java zookeeper 分布式 微服务 框架

2021 ThoughtWorks 技术雷达峰会

2021 ThoughtWorks 技术雷达峰会

SOFAStack的前世今生-InfoQ