Cube 技术解读 | 支付宝新一代动态化技术架构与选型综述

本文涉及的产品
mPaaS订阅基础套餐,标准版 3个月
简介: 支付宝客户端的动态化技术经历三个阶段:现阶段也就是第三阶段是实体组件+部分光栅化的hybrid模式,Cube 就是该模式下的产物。

封面图0917.jpg

如标题所述,笔者将持续更新《Cube 技术解读》系列文章。本文为Cube系列首篇文章,后续文章笔者会更侧重于技术详解,包括不限于:Cube卡片技术栈一篇,Cube小程序技术栈一篇,质量KITE&工具ACT一篇,性能优化一篇等。

背景

支付宝客户端的动态化技术经历三个阶段。第一个阶段是native+web的hybrid模式,以webview为基石。第二阶段是实体组件模式,把html描述的组件和css样式信息映射到实体组件,并且把实体组件的事件传递到js层进行处理。第三阶段是实体组件+部分光栅化的hybrid模式,Cube是第三阶段的产物。

Cube起源于native页面的动态化诉求,产品形态表现于Cube卡片。随着小程序概念的出现,Cube融入了支付宝小程序技术栈,产品形态为轻量级的支付宝小程序解决方案(相对于使用浏览作为核心的web小程序)。这篇文章是一个综述,也是Cube系列的首篇文章。

技术选型

Cube的准确诞生时间很难确定,大致在16和17年之间,比RN(ReactNative)晚上一年。Cube诞生的主要原因是native页面的动态化诉求。钱包改版的频率高,给研发的压力很大,于是想到把高频改版的页面动态化。RN和Flutter的出现,给了我们一个很好的观察视角,即业界优秀的科技公司是如何看待动态化这个话题以及它们的答案。起步阶段,我们达成以下共识:

  1. 独立研发,自主可控。我们没有选择基于RN的开源代码来实现我们的动态化解决方案,也没有Flutter公布源码后,切换到Flutter。这么做是考虑到两点,第一点,技术栈的演进要掌握在自己手里,不希望被牵着鼻子走;第二点,开源项目的产品化成本并不低,后期的维护成本也不低;
  2. 服务业务,技术克制。首先,我们没有足够能力和资源来支撑一个通用技术产品,服务于钱包业务是第一位的,简单说就是贴着业务走。其次,我们拒绝只求花里胡哨的技术demo,把核心能力做好,把产品成熟度做好,考虑拿到业务价值是第一位的。

基于上面两个共识,我们的技术选型如下:

  • 选择Javascript作为逻辑语言;
  • 选择CSS的某个子集作为界面描述语言;
  • 自绘制(text/img/div/scroller)+ 原生组件 (input, animation,map, audio, video …)的混合渲染模式。

阿里在前端的积累比较多,Cube选择拥抱前端,采用javascript和css是自然的事情。默认js引擎是quickjs。没有选择v8,有两个判断:v8太重,内存开销和库加载速度都不理想;Cube的应用场景大概率不需要v8提供的jit能力。我们额外引入了第三方的 wamr 作为webassemby引擎,且在编译构建工具上支持javacript和assemblyscript混合开发。Flutter开源后受到很多人的追捧,在很多文章和ppt上都看到了“Flutter完全独立于平台层的渲染管线的优势”表述,认为比RN映射实体组件的方式要高级很多。我们不认为Flutter的渲染管线的性能优于操作系统的渲染管线,毕竟设备和操作系统可以垂直整合,利用一些设备特性。此外,是否自建渲染管线应该取决于业务诉求,而不应该盲目的追求技术。

Cube的自建渲染管线仅限于自绘制标签,如前所述包括text/img/div/scroller,使用平台层的canvas api直接绘制在系统的view上;如果某颗子树的标签都是自绘制标签,这颗子树会被“拍平”绘制在一个view上。自绘制标签以外的标签都是用映射原生组件的方式,并且封装了统一的实体组件映射这些协议,提供给开发人员。目前Cube的业务场景主要集中在移动端,也简单尝试过往linux/rtos平台移植。如果后续业务逐渐扩展到linux/rtos,我们会考虑进一步完善自绘制,一个是把平台层的canvas api收敛到skia,另一个是内置layer compositor。

当前状态

在承接业务的过程中,Cube大致沉淀了2种业务形态,分别是Cube卡片和Cube小程序。

Cube卡片的作用是给native页面赋予区域化的动态能力,提高业务迭代和运营效率。钱包接入的卡片也分为两类,一类是没有js能力的简单卡片,支持表达式和vif&vshow这类构建时控制DOM树的操作,追求近似native的速度;另一类是具备js能力的复杂卡片,用来支持一些复杂的业务。Cube卡片在钱包已经大规模应用,pv超过100亿,接入的场景参考截图,包括不限于首页、理财、我的等tab页,以及卡包、出行、支付结果页等二级页面。

Cube卡片的定位也是优先服务于钱包内的一二方业务,如果要想提供给三方开发者区域动态化的能力,我们推荐小程序widget。此外,我们正在着手把Cube卡片能力输出给中小型金融机构以及互联网公司。

1.png

Cube 是作为渲染引擎来引入小程序技术栈。小程序基础设施包括:容器,前端框架,渲染引擎,脚本引擎。容器可以理解成Appx/渲染引擎/脚本引擎之间的聚合层代码,提供包管理/JSAPI/安全管控/钱包核心服务等功能。移动端上小程序默认的渲染引擎是UC,Cube小程序应用很有限。相对于UC来说,Cube在包大小/启动速度/列表滑动流畅性/内存消耗上有一些优势,但是劣势也非常明显——Cube支持的css能力不足,且Cube的开发工具不完善。基于此,从19年开始Cube投入了巨大的人力来扩充css能力。Cube 是除浏览器内核外支持 CSS 较完善的渲染引擎,支持flex/inline/block等布局方式,伪类和伪元素,z-index以及相对和绝对定位层级管理。我们也投入大量的精力试图建立类似devtools功能的工具。

这些努力一定程度上改进了开发效能,但仍然无法满足前端同学的诉求。我们逐渐意识到,在浏览器性能不是主要瓶颈的场景下,前端开发者不大会接受浏览器的一个子集。于是,Cube小程序开始转向IoT场景,面向浏览器跑不起来,或者,体验极差的场景。Cube小程序作为某种应用开发栈,对试图建立三方开发者生态的客户是有一定的吸引力。目前我们主要的精力在电视大屏端,感兴趣的同学可以在天猫魔盒上体验Cube小程序,也可以在别的盒子以及智能电视上下载[酷喵影视](https://acz.youku.com/wow/tvact/act/cibn)。

2.png

在卡片和小程序之间,实际上还有一个中间地带,即单页。这个页面可以是全屏,也可以是漂浮在空中的半屏。Cube早期尝试过h5单页,面向高频率营销场景。它的技术栈和小程序几乎完全一样,不同的是,h5单页没有容器的概念,从服务端下载到端上的不是小程序包而是嵌入了Cube构建产物的h5页面。h5单页接入过红包码业务和蚂蚁森林的二级页面,因为维护成本陆续下线。h5单页不成功,并不意味着单页的需求不存在。近期探索的小程序widget其实就属于单页的范畴——我们希望widget能够让服务前置,承载一定的交互逻辑,同时也限制它的能力,便于管控,适合三方开发者。

3.png

技术架构

Cube的内部有两个大的模块,一个是CubeKit,负责对接js引擎且封装平台差异,也包括了开发调试工具。另一个是CubeCore,是用c++代码实现的渲染核心逻辑。

对于Cube小程序,支持tinyApp-dsl子集,移动端上使用jscore/v8作为js代码的执行引擎,IoT设备上使用quickjs;对于Cube卡片,支持基于精简vue的card-dsl。简单的卡片直接解析AST来渲染页面,复杂卡片支持用户用js写一些简单逻辑,并且通过quckjs来驱动dom树的更新。

移动端上,Cube和Web小程序共用一个容器代码。在IoT设备上,我们持续投入人力到Appx和容器的垂直整合中。从目前的数据来看,IoT上的Cube小程序相对移动端的Cube小程序有不小的基础性能优势。在电视端上Cube小程序的基础性能数据是:包体积5.5mb,内存消耗32mb(淘宝特价板小程序为例),冷启动耗时3~4s。随着垂直整合的深入,未来Cube小程序的基础性能会进一步的改善。

4.png

质量体系这个话题,我放在技术架构里讲,原因是它本身是技术架构的一部分。做业务开发,测试人员可以遍历用户场景,有bug修bug。基础软件所承载的业务场景只是无限样本中很小的一部分,业务场景的回归没有问题,不能够保证引擎没有问题——最坏的情况是问题持续累积,直到某一天突然爆发出来。这个时候再想解决问题,已经积重难返。所以,基础软件的研发迫切需要某种提前暴露潜在问题的手段,这个手段不可能借助某个测试资源而是研发团队自己建设。

浏览器的WPT测试用例集合给了一个很好的参考,Cube也建设了这样一套基础能力样本集合以及配套的样本自动化执行框架KITE,投入到版本迭代&代码提交中。截止目前,我们基本能做到单日粒度的自动巡检,支撑我们在已有大量的业务场景的情况下对引擎做升级和重构,下图是引擎基础能力巡检工具的截图。

5.png

开发工具链这个话题,我也放在这里讲。Cube的直接客户不是用户,而是业务方的开发同学。在项目初期就要考虑到工具这块,比如调试器的设计、预览容器、日志设计、低代码搭建平台等等。在扩展业务过程中,工具链某种程度上比Cube本身还要重要,毕竟它是客户的第一印象。我们遇到过前期技术调研时,客户因为工具的不完善而拒绝使用。业务接入后,除了能力上,业务方也会对工具提供各种要求(在协助排查问题时也会发现新的工具需求),贯穿产品的整个生命周期,也是维系客户粘性的重要工作。随着Cube大规模应用于业务后,我们在工具上投入的精力逐渐超过了功能&技术迭代本身。

回顾&未来规划

回顾过去5年,Cube一路跌跌撞撞,中途差点夭折,能走到今天实属不易。从个人视角,Cube能活下来依赖“上下坚持”。一方面,上面的决策者坚持投入(19年及以前几乎没有像样的业务价值);另一方面,一线的同学坚持做一件事,没有技术追求是不可能挺过途中的各种坎坷。我们期待能Cube未来应用到物联网操作系统,毕竟应用开发技术栈是操作系统的核心技术之一。

Cube未来的规划继续坚持“紧贴业务”和“技术克制”,把产品做好,把开发者服务好,把技术打磨好。重点的发展方向如下:

  1. 鉴于Cube卡片可以运行在32MB内存/400Mhz的RTOS设备上,进一步探索在物联网设备上的落地;
  2. 推广Cube小程序在电视大屏端的应用和落地,探索商业模式。

如前所述,后续更新文章我会更侧重技术详解,针对卡片技术栈、小程序技术栈、质量KITE&工具ACT、性能优化等进行深入解读与畅聊。

Cube 技术栈将于近期上线 mPaaS,作为一项全新能力对外输出,如你对该系列文章感兴趣,亦或是对Cube 技术感兴趣,欢迎点击文末阅读原文了解 mPaaS 更多相关资讯。

咱们下篇文章再见。


尾部banner.gif

本文转载于公众号「阿里巴巴移动技术」,点击这里,了解 mPaaS 更多相关资讯。

相关文章
|
5天前
|
运维 Kubernetes Cloud Native
云原生技术:容器化与微服务架构的完美结合
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其灵活性和高效性成为企业的新宠。本文将深入探讨云原生的核心概念,包括容器化技术和微服务架构,以及它们如何共同推动现代应用的发展。我们将通过实际代码示例,展示如何在Kubernetes集群上部署一个简单的微服务,揭示云原生技术的强大能力和未来潜力。
|
14天前
|
运维 持续交付 API
从零构建微服务架构:一次深度技术探索之旅####
【10月更文挑战第28天】 本文记录了作者在从零开始构建微服务架构过程中的深刻技术感悟,通过实战案例详细剖析了微服务设计、开发、部署及运维中的关键要点与挑战。文章首先概述了微服务架构的核心理念及其对企业IT架构转型的重要性,随后深入探讨了服务拆分策略、API网关选型、服务间通信协议选择、容器化部署(Docker+Kubernetes)、以及持续集成/持续部署(CI/CD)流程的设计与优化。最后,分享了在高并发场景下的性能调优经验与故障排查心得,旨在为读者提供一套可借鉴的微服务架构实施路径。 ####
53 3
|
25天前
|
边缘计算 Cloud Native 安全
构建灵活高效的下一代应用架构 随着企业数字化转型的加速,云原生技术正逐渐成为构建现代化应用程序的关键支柱。
随着企业数字化转型加速,云原生技术逐渐成为构建现代化应用的关键。本文探讨了云原生的核心概念(如容器化、微服务、DevOps)、主要应用场景(如金融、电商、IoT)及未来发展趋势(如无服务器计算、边缘计算、多云架构),并分析了面临的挑战,如架构复杂性和安全问题。云原生技术为企业提供了更灵活、高效的应用架构,助力数字化转型。
57 4
|
3天前
|
存储 分布式计算 关系型数据库
架构/技术框架调研
本文介绍了微服务间事务处理、调用、大数据处理、分库分表、大文本存储及数据缓存的最优解决方案。重点讨论了Seata、Dubbo、Hadoop生态系统、MyCat、ShardingSphere、对象存储服务和Redis等技术,提供了详细的原理、应用场景和优缺点分析。
|
1月前
|
缓存 Java 数据库
后端技术探索:从基础架构到高效开发的实践之路
【10月更文挑战第7天】 在现代软件开发中,后端技术是支撑应用运行的核心。本文将探讨如何从后端的基础架构出发,通过一系列高效的开发实践,提升系统的性能与可靠性。我们将深入分析后端框架的选择、数据库设计、接口开发等关键领域,并提供实用的代码示例和优化策略,帮助开发者构建更稳定、高效的后端系统。通过这篇文章,读者将获得关于后端开发的全面理解和实践指导,从而更好地应对复杂项目需求。
69 0
|
6天前
|
监控 API 微服务
后端技术演进:从单体架构到微服务的转变
随着互联网应用的快速增长和用户需求的不断演化,传统单体架构已难以满足现代软件开发的需求。本文深入探讨了后端技术在面对复杂系统挑战时的演进路径,重点分析了从单体架构向微服务架构转变的过程、原因及优势。通过对比分析,揭示了微服务架构如何提高系统的可扩展性、灵活性和维护效率,同时指出了实施微服务时面临的挑战和最佳实践。
25 7
|
3天前
|
传感器 算法 物联网
智能停车解决方案之停车场室内导航系统(二):核心技术与系统架构构建
随着城市化进程的加速,停车难问题日益凸显。本文深入剖析智能停车系统的关键技术,包括停车场电子地图编辑绘制、物联网与传感器技术、大数据与云计算的应用、定位技术及车辆导航路径规划,为读者提供全面的技术解决方案。系统架构分为应用层、业务层、数据层和运行环境,涵盖停车场室内导航、车位占用检测、动态更新、精准导航和路径规划等方面。
27 4
|
22天前
|
Kubernetes Cloud Native 持续交付
云端新纪元:云原生技术重塑IT架构####
【10月更文挑战第20天】 本文深入探讨了云原生技术的兴起背景、核心理念、关键技术组件以及它如何引领现代IT架构迈向更高效、灵活与可扩展的新阶段。通过剖析Kubernetes、微服务、Docker等核心技术,本文揭示了云原生架构如何优化资源利用、加速应用开发与部署流程,并促进企业数字化转型的深度实践。 ####
|
5天前
|
Kubernetes Cloud Native 持续交付
云原生技术在现代应用架构中的实践与思考
【10月更文挑战第38天】随着云计算的不断成熟和演进,云原生(Cloud-Native)已成为推动企业数字化转型的重要力量。本文从云原生的基本概念出发,深入探讨了其在现代应用架构中的实际应用,并结合代码示例,展示了云原生技术如何优化资源管理、提升系统弹性和加速开发流程。通过分析云原生的优势与面临的挑战,本文旨在为读者提供一份云原生转型的指南和启示。
19 3
|
7天前
|
网络协议 数据挖掘 5G
适用于金融和交易应用的低延迟网络:技术、架构与应用
适用于金融和交易应用的低延迟网络:技术、架构与应用
31 5