最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

支付宝移动 DevOps 落地实践及难点技术解析

  • 2019-09-18
  • 本文字数:3269 字

    阅读完需:约 11 分钟

支付宝移动 DevOps 落地实践及难点技术解析

本文系蚂蚁金服技术专家洪锋的采访,洪锋老师(花名:琉克)即将在QCon全球软件开发大会(上海站)2019分享《移动研发 DevOps 在支付宝 App 内的落地实践》。


微软MSDN上的一篇文章有这样一段话:“移动应用的理想环境需要满足两个条件,一是可以确切知道客户脑海中立即浮现的需求,二是为了满足这些需求而编写的代码可以立即传递给这些客户,简单来说,就是客户需求、开发和传递之间没有任何间隙。”


这段话中提到的移动应用开发想要的理想环境,刚好 DevOps 都可以满足,因此一些超大规模 APP 的研发模式,尤其是偏项目式研发协同的人员、模块较多的研发,都开始慢慢研究 DevOps 体系。那么,移动 DevOps 建设与 Web DevOps 建设有什么不同之处?移动 DevOps 的建设有哪些难点?移动 DevOps 如何面对新技术的冲击?…为了解开这些疑问,我们采访了蚂蚁金服技术专家洪锋。

移动 DevOps 与 Web DevOps

近两年,DevOps 已经成为企业软件研发的主流,被众多企业所采用,有关 DevOps 的实践分享分享也特别多,但大多集中在 Web DevOps,相比之下,移动端 DevOps 的实践分享就比较少。


之所以会出现这种情况,琉克认为是因为 Web DevOps 具有更加稳定的执行和验证环境,通常在服务器上可以直接进行所有的开发、验证、交付等流程。而移动 DevOps 最大的难题是移动应用没有一个稳定的验证环境,大多数移动应用都可以在多个设备上使用,也就意味着要处理各种技术规范,操作系统版本,屏幕尺寸等。目前移动端主流的操作系统有两个,分别是 Android 和 iOS。其中 Android 以各自为政而出名,每个设备商都创建了自己的操作系统,存量设备差异极大,而 iOS 也具有多个变体,存量设备 OS 版本跨度大。除此之外,移动应用还具备人机交互的特性,例如当前比较流行的扫码、人脸识别等技术,那么如何在移动 DevOps 中尽量减少人工干预,让整体变得更顺畅,提升整体的研发效率,这是我们要思考的问题。


虽然移动 DevOps 建设存在一些难题,但其实移动开发与 DevOps 是天然契合的,因为客户端开发,尤其是智能终端,本来就是新兴的领域,技术的迭代更新比较快,再加上端产品的特殊性,比如无法实时回滚降级等,所以客户端产品的核心建设主要集中在研发协同、研发效率、新技术落地、质量保障等方面,这与 DevOps 的建设目标也不谋而合。


除了 DevOps 是否适用于移动开发,相信很多人都会关心何时建设 DevOps。琉克认为:“DevOps 的主要目的是为了提高整体的研发效率,所以 DevOps 应用的最佳时机就是当公司业务发展出现多个业务并行发展,且规模均达到数十人。因为这时企业的研发效率和质量就会成为一个瓶颈,为了打破这个瓶颈,就会有很多员工投入到工具研发中,以实现一定的自动化能力,难免会出现很多重复造轮子的工作,这时进行 DevOps 建设,统一收口,就可以避免重复造轮子。”

支付宝移动 DevOps 建设

DevOps 与业务发展是紧密相关的,没有业务场景的 DevOps 等于空谈,所以支付宝的 DevOps 建设也是在业务发展到一定阶段才开始进行的。


据琉克介绍,支付宝的技术和业务发展大致可以分为以下几个过程:


  • 初期阶段:一个仓库,一套代码,然后是工具化组件化,最后是动态化生态化和智能化。在初期开发人员可能是个位数,业务功能也并不复杂,此时几个开发,几个测试就搞定整个研发,这时候投入建设 DevOps 是投入远远大于产出的,没有建设的必要。

  • 中期阶段:随着业务的快速发展和客户端技术的爆发,支付宝也落地了组件化和模块化技术,此时研发人员也达到了几十号人,人和人之间的沟通协作,质量保障已经变的非常困难,也是在这个时候进行了统一的建设。

  • 初期阶段一个代码仓库、一套代码全部搞定的模式,在代码量增多的情况下带来了很多问题,包括互相之间耦合严重,一次编译构建时间太长,再加上当时业务发展带来了线上问题,急需线上修复能力,所以支付宝自研了模块化方案,实现了模块隔离,提前编译,动态更新等能力。


在 DevOps 的建设过程中,支付宝主要集中在了研发协同、研发效率和质量保障三个方面。


以质量保障为例,当代码量从一个仓库发展到数百个仓库,百万级代码,简单的单测或黑盒测试已经不能保障整体质量。因此,琉克所在的团队通过分析支付宝的业务特点和业务场景,结合支付宝技术框架,进行了深度的定制开发,落地了很多静态和动态的质量保障能力,其中静态质量保障能力包括定制的静态代码分析,依赖分析等,而动态质量保障能力包括真机性能稳定性测试,用例录制回放等。


作为最终产物的生成方,支付宝团队也承载了构建工作,因为大型 APP 对性能和包大小有极致的追求,每一点点的性能提升和包大小缩减都可能直接影响用户的留存。支付宝团队通过构建深挖,开发了文件重排、代码重排、debuginfo 删除等构建技术,并通过线上的灰度逐步验证到最后正式上线。

移动 DevOps 建设的难点

Gartner 研究总监 Jason Wong 曾在一篇博客中指出:“并非所有的 DevOps 公司都会将 DevOps 用于移动开发,根据 Gartner 调查结果显示,只有 42%实施 DevOps 的人表示 DevOps 用于支持移动应用开发。” 为什么在移动应用开发场景下 DevOps 的实践很少呢?


琉克认为主要原因在于投入产出比,除了超级 App,大部分移动 App 的开发都是采取小团队小步快走的方式,开发和测试人员都很少,几乎都是个位数。但是移动应用由于其特殊性,要实现自动化用例测试、真机测试等 CI 能力,往往需要投入比较大的人力成本和资金成本,比如实验室的搭建,大量终端设备的采购,一整套自动化系统的搭建等。相比较而言,小型 App 由于本身复杂度不会很高,大部分场景可以通过开发测试同学的单元测试,手工用例编写和测试等手段保证 App 的质量。


在移动 DevOps 的具体建设中,琉克认为包括以下难点:


首先,移动应用技术栈是割裂的,Android 和 iOS 是两套完全不同的技术栈,如何统一两套技术栈的研发流程,这是一个挑战。支付宝的解决方法是抽象出一个移动端的研发模型,比如统一抽象模块化构建,统一依赖管理模型,统一迭代研发流等,具体的差异点放在每一个模型的实施路由上,比如 Android 模块构建会通过路由配置到 Linux 服务器上通过 Docker 构建,iOS 模块构建通过路由配置到 Mac 物理机进行构建。


其次,移动应用的验证非常复杂,尤其是支付宝百万级代码,千人研发的情况下,每次的代码改动都可以有大量的代码和功能受到影响。在代码级别,支付宝通过深入编译以及在框架层自研深度定制的代码扫描和依赖分析能力,精确跟踪每一个 Method 的影响面,并通过评估系统把控每一个变动带来的风险。在真机验证环境,支付宝有一整套完整的真机实验室,全方位监控移动应用整体的兼容性,稳定性,性能等。


第三,持续集成也是移动 DevOps 建设的难点之一。持续集成需要有快速稳定的反馈能力,因此在持续集成节点上,支付宝选择了单点突破,并做了很多优化,比如构建性能等; 在 UI 自动化测试方面,支付宝自研搭建了实验室,定制硬件,从而支持更多的设备,且提升稳定性和吞吐量;面对集团内部各种验证服务能力对接,也借鉴业界 Gitlab CI、Github Action 等 CI 工具,开发了自己的 CI 编排工具,为开发测试同学提供超高体验;任务执行 DSL 我们又直接使用 Jenkins Pipeline 不重复造轮子。


除此之外,移动应用最近几年的新技术发展也非常迅猛,例如 Facebook 的 React 生态、Google 的 Flutter,以及近日热度很高的华为方舟编译器和鸿蒙系统,对于移动 DevOps 来说,由于很多场景都是基于当时的技术场景和技术水位定制的,所以新技术的出现对生态及技术选型的冲击比较大。


为了面对新技术的变革,移动 DevOps 建设需要把新技术耦合部分和非耦合部分拆分开,尽量减少冲击。举个例子,在与端技术有关的质量工程方面,支付宝会提前进行预研和技术储备,比如在静态分析领域,之前只有 Java、OC 语言,但是随着小程序的出现,JavaScript、TypeScript 语言也渐渐被引入进来了,同时还会对前端语言做静态分析和 Native 分析,以保障整个客户端产品的质量;在与端技术无关的方面,会有相关的团队协作能力,包括需求管控,分支管理,依赖管理,人员管理等。


更多工程效率实战请持续关注QCon上海2019


2019-09-18 08:423593
用户头像

发布了 497 篇内容, 共 308.8 次阅读, 收获喜欢 1907 次。

关注

评论 4 条评论

发布
用户头像
采访了洪峰,为啥文章内容是写的是琉克?
2020-05-30 11:18
回复
因为洪锋老师的花名叫琉克[捂脸.jpg]
2020-06-01 04:47
回复
O(∩_∩)O哈哈~我发现啦!!感谢回复
2020-06-01 14:27
回复
用户头像
biaoti标题应该修改下,问题说明,没有解、析
2019-10-08 10:47
回复
没有更多了
发现更多内容

引入:从云计算到Serverless

刘宇

已跪!Java全能笔记爆火,Java教程/Java包/Eclipse安装指南全有

牛哄哄的java大师

Java

当代软件IT大学生的技术学习之路

Nydia

签约计划

手机屏幕投屏到桌面的离线方案

黄敏

SpringCloud-技术专题-Feign组件基本使用(2)

洛神灬殇

springmvc SpringCloud Hystrix Fegin

了解代理服务器

进击的梦清

nginx Linux 运维 代理原理

2021年十大突破性技术

石云升

读书笔记 5月日更

技术探索系列 - 轻松带你掌握 JMM(1)

洛神灬殇

Java JVM JMM 并发 5月日更

Serverless的定义

刘宇

又一个免费良心的下载站,答应我:别再下到流氓软件了。

彭宏豪95

ios 效率 工具 下载 4月日更

高校软件IT专业大学生课外培训调查问卷

穿过生命散发芬芳

行业分析能力考核

对于即将工作的IT大学生,该如何变强?

cv君

程序人生 IT 科技 问卷 有意义

BPF 之巅:洞悉 Linux 系统和应用性能

博文视点Broadview

万字长文讲述我是怎样保送清华的|寒门学子的奋斗史(四)

程序猿石头

程序员 码农 逆袭 大学总结 读书总结

Excel用户如何学习数据分析语言DAX?

博文视点Broadview

鹅厂疯子整理了万字Java笔记!小白:硬核资源基础知识已入门

牛哄哄的java大师

Java Object

音频变速变调原理及soundtouch代码分析

floer rivor

音视频

​太厉害了,终于有人把Spring条件注解讲明白了,送你上岸!

飞飞JAva

spring

面试:某云面试题目整理

程序员架构进阶

Java 面试 自我提升 28天写作 4月日更

IT 专业大学生被培训机构“渗透”情况调查

梦想橡皮擦

签约计划

fastadmin+xunsearch题库系统搭建教程

一颗小树

php thinkphp fastadmin xunsearch 题库系统

A “word-wrap” functionality(一个字符串包裹函数)

HoneyMoose

你的烂代码终于有了解决方案

博文视点Broadview

【得物技术】网络优化——域名解析原理&实践

得物技术

网络 域名解析 域名 得物技术 实践

本文标题不能描述本文内容

小天同学

读书 哲学 读后感 4月日更

北美亚特兰大一金融服务公司面试总结

HoneyMoose

将本地文件/文章上传到 GitHub 的流程

彭宏豪95

git GitHub 效率 编程

聆听极致 ——声网 Agora

cv君

算法 音视频 科技 声网 引航计划

InfoQ & 声网Agora 技术开放日邀请函

Jessie

音视频 声网

网络攻防学习笔记Day1

穿过生命散发芬芳

5月日更 网络攻防

【LeetCode】员工的重要性Java题解

Albert

算法 LeetCode 5月日更

支付宝移动 DevOps 落地实践及难点技术解析_移动_田晓旭_InfoQ精选文章