从MVC到云原生:CBU研发体系演进之路

本文回顾了CBU在过去十年间研发方式和技术架构的变迁,从WebX到Serverless,介绍了关键技术创新,如轻服务、场景搭建及最新的Serverless化进展。
简介:本文对过去十年 CBU 在研发方式和技术架构上的探索做一个简要的回顾总结,以及对未来的展望。

作者:远岩,高级开发工程师。2019年毕业加入阿里巴巴,主要负责 CBU APP 端前台场景工程体系及服务端 Serverless 化建设。

前言

 

CBU作为集团内最早成立的几个BU之一,有着多年丰富的业务沉淀,而CBU的技术也伴随着业务一起不断地演进和成长着。从PC时代的WebX到如今的Serverless,CBU的研发体系经历了多次变革,在不同的阶段中有着不同的特点。笔者所在的团队近年来一直在负责前台场景研发体系升级相关的工作,在这期间也对过往模式的演变进行了大量的回顾和分析,希望能够通过本文对过去十年中CBU在研发方式和技术架构上的尝试和探索做一个简要的回顾和总结,重新审视我们所走过的路,同时也对未来的方向做一些探讨和展望。

 

青铜时代(2010~2013)

 

10年前的互联网,移动终端还没有兴起,绝大多数的产品都是为PC用户所服务的。在这种背景下,采用B/S结构是一种毋庸置疑的选择,因此当我们回顾这个时代的技术时,最先能想到的自然是那些和WEB、浏览器关系最密切的关键词:比如WebX、jQuery、Velocity等等。

 

在这个阶段,业务流量并不巨大,系统的性能瓶颈基本集中在数据库的读写上,大部分的应用仍然采用单体式的架构,从前台页面到后台逻辑都封装在同一个应用中,而在应用内部,往往是采用MVC的分层思想对不同功能的模块进行划分。彼时CBU的前台应用架构也基本是这个思路,页面通过Velocity模板进行开发,后台业务逻辑则封装成应用中单例的Service实现,中间通过一个类似Controller的粘合层进行连接,将后端的数据字段转换成前端模版中所使用的变量:

 

图片 1.png

 

这种模式的优点是,由于所有的模块都在同一个应用中,非常便于集中管理,当一个开发同学非常熟悉整个应用结构时,他便可以非常快速地完成一整个需求的开发。但缺点也同样明显:随着业务的发展,前台逻辑变得越来越复杂,需求必须要拆解成前后端分离的方式,让专人做专事,而前台代码被耦合在应用中,使得前后端分离开发变得异常困难;除此之外,前台逻辑的变化往往是非常频繁的,如果每次修改一个页面元素都要发布整个应用,不仅研发效率会十分低下,还会影响线上业务的稳定性。

 

为了解决上述问题,当时CBU的同学们充分利用了Java的动态类加载机制以及Groovy脚本语言,以一种特殊的方式实现了前后端分离开发和快速迭代,这里我们以商品详情场景为例解释一下其机制和原理。

 

首先,一张页面被拆分成若干个组件,每个组件都会对应一个bundle,这个bundle中包含了前台的vm模板,js代码,以及一个Groovy脚本。在实际研发时,需要先通过一个映射表达式声明该组件所需要消费的后台模型或字段,然后通过Groovy脚本(相当于Controller层)将其转换为vm模板中的变量,接着便可以开发前台的vm模板和js逻辑。开发完毕后,通过一个定制的发布系统,便可以把对应的bundle发布到前台应用中,由应用内部的JVM动态加载Groovy脚本以及vm模板,完成需求功能的上线。下图便是一个使用这套研发体系开发需求的实际例子:

 

图片 2.png

 

这套研发体系通过JVM动态加载的能力,将面向前台的View层和Controller层逻辑抽离出来,使其能够进行独立开发和动态发布,从而实现了前后台逻辑之间的解耦,提升研发效率。只要后台逻辑没有大的变更,很多需求都可以通过bundle快速开发上线。不过在实际运行时,所有的逻辑仍然是在同一个应用中执行的,这在一定程度上会带来一些安全隐患。除此之外,这套研发体系也是非常定制化的,bundle的发布系统实现非常沉重,并且对应的前台应用有强绑定关系,这就意味着很难将它快速地复制到另一个业务场景中复用(CBU最终只有商品和店铺两个业务落地了类似的模式)。

 

尽管存在着一定的问题,但即便以现在的眼光来审视,也不得不承认这套研发体系有着非常超前的设计思路。尤其是通过引入bundle这一概念,使业务迭代开发变得十分聚焦。在本文的后续章节中我们会看到这一思路最终将伴随着云原生技术革命,再一次回到我们的视野当中。

 

蒸汽时代(2014~2018)

 

这一阶段,互联网行业的形态发生了非常巨大的变化。随着智能手机的流行和普及,移动互联网迅速崛起,各种各样的业务都开始向移动端发力。集团发动ALL IN无线的战役,大量的业务和产品需要快速向移动端迁移。同时,随着智能手机市场的不断下沉,加上其“随时随地”都能使用的特性,互联网业务此时所需要应对的流量挑战和PC时代将不再是同一个数量级。

 

在技术侧我们也能看到与上述现象所匹配的变革。一方面,由于流量的激增和系统复杂度的增加,传统的单体式应用无法再支撑业务的发展,随着Docker这一关键技术的出现,服务端应用的分布式拆分和微服务化成为不可阻挡的趋势。另一方面,由于移动端崛起,前台展示突破了PC键鼠交互以及浏览器能力的限制,用户对于产品体验和交互的要求势必会变得更高,这促使研发人员进一步细分化为负责底层业务逻辑的服务端研发和负责前台展现交互的前端、客户端研发:React的出现敲响了传统WEB技术的丧钟,开发独立APP成为拓展业务的不二选择,前端技术和客户端技术在这一阶段开始飞速发展。

 

这样的背景下,单体式应用和MVC架构逐渐死去,前后端分离

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值