前言
本文根据5月30日京东前端架构师董亮在绿盟京东专场直播活动分享的《京东mPaaS介绍》主题演讲整理而成。专家主要从mPaaS定位及价值、mPaaS Android能力、mPaaS 未来规划三方面为大家介绍京东mPaaS。
一、mPaaS定位及价值
1、京东mPaaS简介
京东mPaaS平台是京东移动研发平台,为开发者提供应用开发管理、组件/微应用开发管理、流水线构建、测试管理、应用发布、运维监控、运营分析等多个服务,支持Android、iOS、Harmony原生开发、支持小程序、Flutter、H5 、RN等主流跨端移动研发场景。到目前为止,mPaaS能力已支撑了包括京东商城、京东特价、京东健康、京东到家等100+的京东集团移动应用开发,同时以商业化的形式对外输出,赋能其他企业的移动研发场景。
2、京东mPaaS发展史
京东mPaaS发展史分为三个阶段:第一个阶段是独立平台阶段,Android、iOS原生端及RN、Flutter等跨端均有自己的独立平台、各自建设发展。但是存在应用开发管理处于割裂状态,各技术栈建设程度不一,无法统一研发流程;开发者奔波于各个平台之间,研发效率低下;各平台服务独立,开发、发布、运维运营能力难以联通等缺点。
随后,我们对各个零散的平台服务进行了融合打通,形成了mPaaS1.0阶段。不同技术栈工具及开发、运维等部分功能开始融合到1.0平台,此时一站式解决方案逐步形成。但是仍然存在各平台通过服务调用串联的方式进行融合,子系统功能无合力;移动开发流程缺乏统一规范、跨端能力;服务调用维护成本高,功能迭代困难的缺点。为了解决这些问题,开启了mPaaS2.0的建设。与前面阶段不同的是,在2.0平台统一了前端和服务端的服务,将各端的开发、发布、监控、运维的能力作为一个整体,形成了一套链路清晰、能力完善的研发体系。同时为了抹平各跨端技术栈在原生端的差异,提出了容器化的开发理念。
3、京东mPaaS能力概览
mPaaS的研发能力分成了计划域、开发域、发布域、监控域、运营域不同领域。计划域主要是提供了发版计划、发版工作流等管控能力;开发域提供了应用管理、证书管理、应用管理、依赖管理、组件管理、构建流水线等开发阶段的能力;发布域提供了应用发布和微应用发布等能力;监控域提供了异常监控、性能分析等能力;运营域则提供了数据分析能力以及用户反馈信息收集的能力等。
二、Android端能力介绍
接下来,从安卓原生端的视角为大家介绍mPaaS的移动研发能力。
2.1开发域
1)开发域-Android工程架构演进
安卓最原始的开发方式并没有模块化的概念,大家将所有的代码放到application model模块中。随着APP功能的不断迭代和完善,出现了代码臃肿、耦合严重、维护困难的情况。通过模块化的思想,将不同的功能模块拆分到不同的library model下,这个阶段的 library model和application model依然在同一个工程下。单仓模块化的开发方式对代码的解耦和管理有一定的积极作用,但这种方式依然有明显的缺陷,研发效率得不到保证。比如模块之间解耦不彻底,依赖关系混乱,以及应用构建的速度缓慢。
为了解决这些问题,开发架构逐渐演变成了多仓组件化的开发方式。多仓组件化的方式是将一个个独立的业务模块拆成一个个独立的组件,每一个组件都是一个独立代码仓库下的独立工程。多仓组件化的方式,解决了我们前面所说的代码耦合问题,各个组件可进行独立的开发和调试。这种方式基本上满足了开发需要,但依然存在问题。如:从平台的角度来看,虽然划分了业务组件和基础组件,但是划分规则和依赖管理能力还是缺乏清晰的规范以及对应的管控能力。各个组件的复用能力并不清晰。随后,我们对架构进行了进一步的升级,将组件重新进行划分,提出了一个微应用化加组件化的开发架构。为了抹平多端技术栈薄弱的问题,提出了多端容器化的开发理念。
2)开发域-Android模块划分标准
组件是具备可复用能力的通用功能模块,所有应用均可使用,如网络库、图片库。不属于任何一个应用,可以被所有微应用和应用进行依赖使用。微应用本质上仍然是组件,是为了架构治理提出的新概念,希望每个微应用是一个独立闭环的业务模块。业务组件 “微应用化” 是移动开发领域趋势所向,是移动端向前端、服务端学习“微服务”的结果之一。与组件不同的是,微应用归属于某一个应用,只能被宿主应用及宿主应用下的其他微应用进行依赖,特定场景下也可以集成发布到其他应用下。mPaaS还对第三方依赖进行了管理,第三方依赖指的是外部第三方的组件,每个技术栈都有其开源的三方库平台,由于各端来源不同,一般内部业务开发者使用时,需要先报备,然后添加使用。
3)开发域-依赖管理
除了不断升级开发架构之外, mPaaS还制定了相应的依赖管理规范,提供了对应的平台依赖管理能力。应用可以集成微应用、组件和第三方依赖,微应用可以依赖其他的微应用组件和第三方依赖,组件只能依赖组件或者是第三方依赖,不可以依赖微应用。这套规范清晰地将依赖层次进行划分,规范了模块之间的依赖关系。
mPaaS根据这套依赖规则也提供了相应的管理能力。mPaaS引入了集成单和依赖表的概念,其中依赖表是用来管控组件和微应用的依赖,集成单是用来管控应用的依赖。同时依赖表和集成单提供了灵活的配置能力,可配置是否自动依赖以及依赖的方式等。从安卓开发角度来讲,安卓端可通过Gradle本地开发工具,与平台依赖管理能力相互配合,实现平台对工程依赖的管理。开发者只需要在平台中配置依赖,对依赖进行添加、删除、修改等,就可实现对工程中依赖的实时变更。平台可视化的管理方式,将依赖管理变得更加清晰、简单,配合平台的权限管控能力,能够有效对依赖集成进行权限管控,防止不规范的依赖引入和误操作等,提升线上应用的稳定性。
4)开发域-云构建
mPaaS平台的云端构建能力是持续集成和持续交付的重要能力体现,也是串联开发和发布的重要环节。mPaaS的云端构建能力主要体现在三个方面:第一个方面是具有成熟的云构建方案,目前支持原生应用以及 RN、Flutter等跨端技术栈的构建能力。构建灵活配置,支持多种架构的工程构建。第二点是具有丰富的原子能力。mPaaS平台已沉淀多种原子能力,具备构建、加固、制品上传、信息采集等多种能力。mPaaS平台的原子能力对外开放,mPaaS所有开发者都能参与到原子的开发、共建中来。第三个能力是具有灵活的编排能力,支持自定义流水线,原子能力自由组合。
5)开发域-Android本地开发工具
目前安卓端本地开发工具采用的是Gradle插件的形式,Gradle插件比较适用于编译构建阶段。通过Gradle插件能够对编译过程进行修改。mPaaS Gradle插件工具经过多年的积累打磨,能力丰富,覆盖了依赖管理、制品发布、插件化开发调试等工具,配合mPaaS 平台能力,实现开发流程和能力的闭环。
除了Gradle插件工具之外,还对其他本地工具进行了调研,比较典型的是IDE插件和PC端的工具软件。其中IDE插件适用于编码阶段,可自动生成代码,分析工程结构等,目前也是在mPaaS未来规划中。对于PC端工具软件,功能强大,可以将平台能力移植到工具软件中,有助于管理本地开发环境。但是对于Android开发者而言,AS足够强大,IDE+平台已经能够满足用户的需求,工具软件略显繁重。所以暂不考虑将PC端的软件作为本地开发工具。
以上就是《京东mPaaS介绍》(上篇),后续还会发布《京东mPaaS介绍》 (下篇),敬请期待!