支付宝 App 是如何建设移动 DevOps 的?

本文系InfoQ对蚂蚁金服技术专家洪锋的采访,洪锋老师即将在 QCon 上海站 2019 分享《移动研发 DevOps 在支付宝 App 内的落地实践》,欢迎关注。

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

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

移动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 分析,以保障整个客户端产品的质量;在与端技术无关的方面,会有相关的团队协作能力,包括需求管控,分支管理,依赖管理,人员管理等。

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

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

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

相关文章

淘宝端智能演进和思考

今天分享内容包括三部分,第一是端智能整体趋势和淘宝应用现状,第二是淘宝在应用端智能过程中面临的问题和挑战,以及我们的应对和解决思路,我们构建了端到端的完整技术体系,第三是开源推理引擎 MNN 的最新情况。 01、端…

从零开始入门 K8s | 可观测性:你的应用健康吗?

一、需求来源 首先来看一下,整个需求的来源:当把应用迁移到 Kubernetes 之后,要如何去保障应用的健康与稳定呢?其实很简单,可以从两个方面来进行增强: 首先是提高应用的可观测性;第二是提高应…

技术差的程序员,90%都输在这点上!骨灰级开发:其实都是在瞎努力!

01从未得到过重视的问题“一流程序员学数学,二流程序员学算法,低端看高端就是黑魔法”。可能有人会以为这是段子,而有过开发经验的都知道,这就是程序员的真实写照!而数学不好的程序员,我想你开发过程中&…

layui 单选项 点击显示与隐藏 很实用

html <div class"layui-form-item"><label class"layui-form-label">类型</label><div class"layui-input-block"><input type"radio" name"type" lay-filter"type" value"0&quo…

2. 字节码指令

2. 字节码指令 2.1 入门 public cn.itcast.jvm.t5.HelloWorld();构造方法的字节码指令 ​ 2a b7 00 01 b1 2a> aload_0加载slot 0的局部变量&#xff0c;即this&#xff0c;做为下面的invokespecial 构造方法调用的参数b7 >invokespecial预备调用构造方法&#xff0c…

它是真实的“盗梦空间”?在这里,一切都可能是数据

阿里妹导读&#xff1a;位于杭州阿里巴巴西溪园区旁边的大型商场“亲橙里”2018年正式开业。和传统的线下综合型商场不同的是&#xff0c;亲橙里从规划之初就定位为数字化商场&#xff0c;通过植入自研的IBOS平台完成建筑内的所有子系统的接入&#xff0c;而让建筑和建筑内的设…

BDS-HA:构建高可用、低延迟的HBase服务

HBase可以支持百TB数据规模、数百万QPS压力下的毫秒响应&#xff0c;适用于大数据背景下的风控和推荐等在线场景。阿里云HBase服务了多家金融、广告、媒体类业务中的风控和推荐&#xff0c;持续的在高可用、低延迟、低成本方向上进行优化。目前单集群承诺可用性99.9%&#xff0…

layui 表单动态添加、删除input框

html部分 <div class"layui-form-item" ><label class"layui-form-label">路线</label><div class"layui-input-block" id"last"><div class"layui-input-inline">{empty name"$ways&q…

MySQL 可重复读,差点就让我背上了一个 P0 事故!

来源 |程序通事责编 | Carol封图 | CSDN 付费下载自视觉中国P0 事故&#xff1a;余额多扣&#xff01;这是一个真实的生产事件&#xff0c;事件起因如下&#xff1a;现有一个交易系统&#xff0c;每次产生交易都会更新相应账户的余额&#xff0c;出账扣减余额&#xff0c;入账增…

AliOS Things 3.0应用笔记:摄像头配网 + 钉钉群通知 + 天气显示

给AliOS Things一颗STAR 目录 运行流程效果展示 操作流程 环境配置源码结构配置烧录运行 源码讲解 QR扫码部分GUI部分https client部分 运行流程 本示例有如下3个功能&#xff1a; 摄像头配网。推送消息到钉钉群。显示当天天气。操作流程 环境配置 AliOS Things环境安装&a…

与阿里合伙人合影,两年净赚一百万,这个草根姑娘有什么魔力?

大学肄业&#xff0c;网店关闭&#xff0c;公司转手&#xff0c;人生的下一步要怎么走&#xff1f;张昕总沉浸在自己的世界里发呆。 直到两年前&#xff0c;张昕随手往几个群里转发了“购买阿里云服务器”的折扣幸运券&#xff0c;半年后&#xff0c;因订单数量排进前十&#…

借助大数据进行社交媒体营销,企业们得这么玩!

作者 | Annie Qureshi译者 | 火火酱&#xff0c;责编 | Carol出品 | CSDN 云计算&#xff08;CSDNcloud&#xff09;封图 | CSDN 付费下载自视觉中国自上世纪80年代以来&#xff0c;“数据”一词就一直是互联网行业的重要术语。随着人们对数字领域的关注度越来越高&#xff0c;…

聊一聊DNS劫持那些事

作为《DNS攻击防范科普系列》的最后一篇&#xff0c;今天我们来好好聊聊DNS劫持。先回顾一下DNS劫持的概念&#xff1f;DNS劫持即通过某种技术手段&#xff0c;篡改正确域名和IP地址的映射关系&#xff0c;使得域名映射到了错误的IP地址&#xff0c;因此可以认为DNS劫持是一种D…

nacos集成dubbo实现远程服务调用多服务端2

文章目录一、版本选取、需求和项目简述1. 版本选取2. 项目模块说明2. 需求说明二、需求实战-依赖初始化2.1. 创建maven父工程EShopParent2.2. 创建子模块DubboApi2.3. 创建服务端Stock-serv2.4. 创建服务端product-serv2.5. 创建消费端端Order-serv三、需求实战-代码编写3.1. 创…

避开这2个误区,测试目标 KPI 不再难设

阿里妹导读&#xff1a;好的开始是成功的一半&#xff01;工作中&#xff0c;目标的设置是最不能马虎的事情。今天&#xff0c;我们请来孙阳&#xff08;阿里巴巴测试开发专家&#xff09;&#xff0c;他从11年入职至今已有8年。在测试技术目标的KPI设置上&#xff0c;他有一些…

程序员工作3年只涨2千,你不知道程序员有多难!

最近在职业论坛看到这样一个热门的帖子&#xff1a;工作3年&#xff0c;薪资涨了2k。大家都在吐槽公司的不公&#xff0c;却忽略了从另一个角度看待问题&#xff1a;是不是因为我们本身做的不够好&#xff1f;越来越发现&#xff0c;很多人之所以很久没有涨薪&#xff0c;是因为…

蚂蚁金服OceanBase挑战TPCC丨TPC-C基准测试之链路层优化

导语 在 TPC-C 标准定义中&#xff0c;测试系统分为 RTE&#xff08;Remote Terminal Emulator&#xff09;和 SUT 两部分。在实际的 TPC-C 测试流程中&#xff0c;不只是对 DB 端能力的考验&#xff0c;对链路中的所有组件都存在极大的资源消耗和压力。以这次 6088万 tpmC 测…

由于找不到msvcp140.dll无法继续执行代码

下载安装微软常用运行库合集即可解决 https://www.cr173.com/soft/106037.html

知己知彼,百战百胜!如何做好干系人管理

作者|章冀灶(晟远) 出品|阿里巴巴新零售淘系技术部 众所周知&#xff0c;高效的沟通是项目成败重要的影响因素。沟通在项目管理过程中扮演了极其重要的作用&#xff0c;而沟通对象又是完整的基于项目干系人&#xff0c;所以在项目管理过程中干系人管理就显得尤为重要&#xff…

彻底弄懂为什么不能把栈上分配的数组(字符串)作为返回值

背景 最近准备一个教程&#xff0c;案例的过程中准备了如下代码碎片&#xff0c;演示解析http scheme #include <stdio.h> #include <stdlib.h> #include <string.h>char *parse_scheme(const char *url) {char *p strstr(url,"://");return st…