美团外卖Flutter容器化生态建设实践

作者 | 冉叶兰

嘉宾 | 陈航

编辑 | 张之栋、王文婧

如何支撑整个外卖链路的高可用性?美团外卖的 Flutter 容器化生态建设实践告诉你,其实Flutter可以这样用。

Flutter 作为革命性的跨终端解决方案,刚推出就被相关从业者广泛关注。美团外卖终端团队为了更好地平衡团队的开发效率与稳定性,2018 年着手调研并引入 Flutter ,先后在用户端和商家端验证可行性,确认了其在中后台业务场景中具有实用价值,且目前已经在美团点评多个部门不同类型中后台业务大规模线上使用,提升了研发效率,在这期间美团外卖团队收获了很多实践经验。

美团点评的高级技术专家陈航老师将在 12 月 20~21 日举行的 GMTC 全球大前端技术大会 (深圳站) 上分享 《美团外卖 Flutter 容器化生态建设实践》。InfoQ 在会前采访了陈航老师,看看美团外卖如何利用新技术为组织提升开发效率,为业务带来价值?希望美团外卖的实践经验能够为大家在 Flutter 容器化生态建设和大规模化使用 Flutter 上提供借鉴和思路。

GMTC:请您简单介绍下自己以及团队所负责的工作。

陈航:我是美团外卖终端团队商家业务的技术负责人,也是极客时间 《Flutter 核心技术与实战》 的作者。我 2015 年加入美团,经历了外卖用户端和商家端发展的多个阶段,期间推动了外卖移动端架构演进、线上运维及终端技术栈融合等相关工作。

我们团队的主要职责是为商家提供稳定可靠的生产经营工具,支撑整个外卖链路的高可用性,保持其稳定发展。团队技术栈整体比较丰富,也相对较新,覆盖了 Android、iOS、React、Flutter、React Native 和 NW 等。

GMTC:您加入美团后,经历了外卖用户端和商家端发展的多个阶段,哪个阶段您的印象最深,为什么?

陈航:不同阶段背后的思考和决策过程可能印象会更深一些。从 2015 年到现在,外卖市场整体发展还是非常快的。在行业高度竞争、业务快速发展的背景下,美团外卖不仅是一个场景化交易业务闭环,更是一个流量平台。所以对于终端团队而言,如何推进各业务节点复用,在保证核心主业务稳定快速发展的同时,输出成熟的标准化技术平台支持新业务,是我们关注的重点。

在这个方向下,我们把工作目标划分为两个层次和一个支撑体系:

第 1 层次:将基础能力及交易链路标准化,以分层形式实现移动端架构升级,推进业务复用;

第 2 层次:推进终端技术栈融合及周边工具支撑建设,减少需求交付链路之间的信息和资源损耗;

支撑体系:围绕问题的发现、定位和解决,持续建设终端监控、日志和容灾体系,保障业务高可用。

支撑体系和第 1 个层次的工作思路和逻辑及可以参考我们在美团技术博客输出的文章 《美团外卖客户端高可用建设体系》《美团外卖 Android 平台化架构演进实践》《美团外卖 iOS 多端复用的推动、支撑与思考》;而第 2 个层次的工作重心则主要集中在给开发者赋能上,即如何抽象终端能力和研发过程,用尽量完整的技术栈和工具链去隔离各 App、各终端系统及各研发环节差异,向业务开发同学提供统一而标准化的能力,在这其中,跨平台是一个重要的手段。

GMTC:美团外卖终端团队在 2018 年着手调研并引入 Flutter ,为什么在短时间就确定引入?现在进展如何?

陈航:为了解决需求交付链路的损耗,我们一直在持续跟进业界前沿的跨平台解决方案,也先后大规模落地了动态模板和 RN 等技术。这些方案解决了外卖业务强运营场景下的研发效率和发布效率问题,但由于其实现机制所限,在可扩展性、性能、质量这几个维度上和原生存在差距,只能根据业务特点做取舍,因此很难扩展到核心高频链路场景,满足我们高性能 / 高稳定 / 无降级的研发诉求。在 2018 年中,我们对跨平台方案的另一典型代表 Flutter 进行了原理和实践上的探索,并先后在用户端和商家端上分别对上述问题进行了可行性验证,最终确认其高保真、高性能的技术特点在商家端的中后台业务场景中具有实用价值,也推进了多个中等核心页面的落地,节约了研发成本,而我们在美团技术博客输出的文章 《Flutter 原理与实践》 就是这一时期的典型产出。

为了方便公司内部其他类似场景实践应用,我们基于自身的实践经验,建设了 Flutter 容器化工具链 MTFlutter 。作为源自美团外卖,服务于全公司的容器化方案,目前, MTFlutter 已经在美团点评多个部门不同类型中后台业务大规模线上使用。

GMTC:现在很多大厂都应用了 Flutter ,您认为在 Flutter 应用上,有什么共同点?

陈航:任何技术选型都不是孤立的技术问题,最终都要服务于商业目标。移动互联网经过十多年的发展,市场驱动的红利已经见顶,企业增长进入了领导力驱动和创新驱动的阶段。这两个阶段的典型特征都是通过组织或创新等手段,以更高的效率提供更低成本的服务,达成更高的市场份额,这与终端技术的发展方向也是类似的。以当下来看,在终端技术永恒的三大主题即效率、质量和性能,大家都面临着相似的问题。而 Flutter 的解决方案抽象高度足够高,从原理和运行机制这两个维度有领先同类产品的表现,因此也是业界目前关注度最高的。

对于新技术不盲从,而是充分理解其原理和最佳实践的应用场景,从而清楚它们在自己团队中可以解决什么具体的问题,也同样重要。

Flutter 有很多优点,但其实也存在比较明显的缺点,由于官方不支持发布期动态化,因此与 Native 类似的,在业务增量的包大小表现上还不尽如人意。技术领域没有银弹,技术选型要结合业务场景合理评估。于美团外卖终端团队而言,我们在性能要求不高和有动态化诉求的强运营业务场景中,会优先选择 RN ;而针对性能、稳定性和多端体验一致要求高并且对动态化无特殊要求的中后台业务场景,我们则优先选择 Flutter 。

GMTC:美团外卖 Flutter 容器化生态的研发背景是?

陈航:虽然 Flutter 提供了开发框架、 IDE 插件、调试器等相对丰富的开发工具,但从企业级应用迭代工程角度看,还需要对接大量现有移动端基础设施和工具(如大团队协作、CI、原生组件能力、发布运维基建等)才能够支撑起企业级的业务持续交付和线上运维。为了打通 Flutter 标准工作流与美团点评原生技术栈的融合,我们将 Flutter 的研发阶段(初始化、开发 / 调试、构建、测试、发布、集成)进行了抽象,在工作模式层面,将作为原生工程上游的 Flutter 模块开发,抽象为原生依赖产物的工程管理,并提炼出对应的工作流,以可重复、配置化的方式对各个阶段进行统一管理。在这个过程之中,我们联合了公司多个基建团队,对其开发生态做了支持定制,提供了像工程模板、脚手架、基础能力插件、视觉稿代码自动生成、混合开发集成工具、Pub 服务、打包构建、资源托管、监控运维等开发者能力。

GMTC:在美团外卖 Flutter 容器化生态建设中遇到的最大的挑战是什么?怎么解决的?

陈航:前期主要还是在现有终端技术体系之下,确定 Flutter 的技术定位和其他跨平台方案的分工服务边界。在这一时期,我们做了大半年的技术调研和技术储备,并通过大量灰度测试和验证,从原理和实践角度确定了业务在做技术选型的标准,也最终明确了 Flutter 容器化的建设思路和方向。

在真正落地的时候碰到的最多还是一些兼容适配性适配问题。Flutter 官方 SDK 所依赖的工具链及周边基础设施相对较新,而我们实际业务为了兼容低端机和旧操作系统,开发生态往往比较陈旧,在对接公司内的终端基础设施时,遇到了很多兼容问题,比如低端机 CPU 架构、 Java 8 语法特性兼容、Gradle API 适配、个别机型引擎加载异常、崩溃等问题。我们内部 Fork 了一套 Flutter SDK ,将这些问题一一修复和完善,并通过一套编译脚本,实现了从源码编译到美团云上传的自动化流程,最终打包成 MTFlutter SDK ,而用户在实际使用时,使用 MTFlutter 脚手架提供的命令,即可一键部署。

GMTC:未来,美团外卖 Flutter 容器化生态建设布局规划上会有新变化吗,下一步规划是什么?

陈航:核心工作思路不会发生变化。我们仍然会在推进业务复用,以及如何减少需求交付链路之间的信息和资源损耗上重点发力。

在业务复用上,我们会在业务组件库、页面模板、开发一体化解决方案上持续投入,提升易用性,从而降低使用成本;而在减少需求交付链路之间的信息和资源损耗上,我们不会孤立地考虑 Flutter 生态,而会更多地思考如何与其他的终端技术融合,比如通过编译期或运行期代码转换的方式去统一上层 DSL ,让开发者可以按需选择底层渲染技术,从而节省技术栈切换所带来的资源损耗。

在即将到来的 GMTC 深圳 2019 上,陈航老师还会具体分享到 O2O 模式下的中后台业务特点、跨平台技术的业务诉求与技术挑战、 Flutter 容器化生态建设、基于业务特点的跨平台技术选型思路、基于 Flutter 容器化解决方案建设思路,以及如何在规模化团队中推广使用 Flutter。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20191024A0JYOY00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券