共计 4839 个字符,预计需要花费 13 分钟才能阅读完成。
前言
你是否为我的项目外围页面短少标准化的开发标准和流程、代码冗余耦合重大而无从下手?
你是否为我的项目中多人或多个团队跨团队协同开发一个页面性能而懊恼?
你是否为我的项目简单页面短少端到端动态化编排配置经营的伎俩、开发 / 公布周期和流程过长而耗时耗力?
你是否为我的项目中多团队高频迭代开发外围页面的品质和稳定性后知后觉而焦虑?
背景
在哈啰的疾速倒退和业务演进过程中,从两轮出行到四轮出行再到基于出行的普惠生存服务平台,APP DAU 已冲破 1000+w,细分的业务场景也越来越多,孵化了数十个业务 BU。从出行用车到生存服务,有两轮的单车、助力车,四轮的打车、逆风车、送货,以及租车、智能电动车、火车票、换电、好物、酒店、相亲、宠物、游戏等等多类笼罩出行和生存的业务,哈啰能够说是目前出行生存平台畛域业务复杂度较高的利用之一。
咱们平台经营团队负责 APP 启动到首页等多个哈啰重要的用户入口,承当着流量散发平台的作用,提供平台能力反对业务线倒退。平台经营自身也是一个平台业务,除了本身的业务外,对外的角色也很简单,同时还承当着新业务倒退平台的角色,这意味着想要反对好哈啰平台业务的倒退是一件十分有挑战的事件。
演进思路
以哈啰 APP 首页为例,在平台化转型业务快速增长倒退初期:平台首页团队只有两三个人 对接十多个业务线 ,每个业务都有 特定的场景和诉求 ,并且局部业务场景除了须要用户经营外还存在着互斥或优先级的关系,须要 肯定的策略经营能力 。业务方急需在 短期内疾速更新迭代 来验证业务方向。因而首页随着多个团队的独特参加 开发复杂度和合作老本是极高 的,同时随着减少人员带来 迭代边际效应越来越低 。因为不同团队 / 人员短少对立、规范的开发标准和风险意识, 体验和稳定性难以保障,重大影响用户增长和业务倒退。
所以咱们面临的问题是:
- 首页等业务外围页面存在单页面多团队协同开发,承载多业务状态的诉求。
- 首页等业务外围页面心愿能够疾速迭代来验证业务方向。
- 首页等外围页面须要有肯定的策略经营能力来为用户提供所需的业务服务。
- 首页等业务外围页面须要有良好的用户体验和稳定性保障。
基于现状问题和将来演进方向,咱们依照端容器承载、模块化拆分的基本思路,联合根底能力形象成框架、对接口和数据结构进行定义等,从新进行架构分层和方案设计,来满足多端复用、平台赋能、多团队合作、需要动静变更 / 公布等多方面诉求。
解决方案 – 乐高零碎
根据上述的问题和思路,咱们零碎的建设有两个指标:
- 对于研发侧:须要撑持外围场景下多团队协同开发的 继续交付效率 和保障简单场景下的 稳定性 & 体验,来撑持业务倒退。
- 对于业务侧:须要能够在 APP 疾速搭建牢靠的高性能原生页面,进行 动静编排和丰盛的经营能力 ,需要迭代动静线上变更快上快下, 疾速无效的验证业务方向。
基于基本思路和指标确定了三个后续演进的方向:标准化的前后端开发框架和体验 & 稳定性保障,动态化的公布和线上经营能力,系统化的从前到后端到端解决方案。
整体链路和零碎建设上的指标,心愿技术演进为业务赋能反对业务 更快更好倒退。
设计思路
那咱们明确一下什么是乐高零碎?要解决什么具体问题?
乐高零碎是基于“哈啰 APP 首页计划”演进过程中积攒的教训,孵化建设的一套适宜哈啰的端到端动态化经营公布零碎。来解决业务倒退过程中经营能力欠缺或反复建设、公布周期长、业务验证效率低、研发投入和保护老本高、以及保障外围页面的体验 & 稳定性等诉求。
乐高的利用场景是哈啰 APP 首页等一级页面和业务外围页面,也能够利用到其余业务矩阵内的宿主 APP。是面向 APP 的页面动静搭建和经营公布平台,帮忙业务晋升产研效率。面向对象有三个角色,对应三个子系统的产品能力,别离对应不同的能力边界:
1.在搭建平台侧:* 面向产品经营的乐高经营后盾
- 面向产品经营提供残缺的权限审批和公布流程,环境可隔离,反对测试、预发、灰度、公布。
- 提供页面容不同粒度模块 / 组件 / 款式 / 内容的动静搭建编排和公布能力。实现页面搭建、组件治理、协定编排(有序化 / 互斥 / 灰度 /AB/ 标签)等能力,与投放平台、伽利略试验平台和数据平台买通;
- 提供欠缺和丰盛的经营能力,千人千面。
2.在聚合服务侧:* 面向后端研发的聚合服务配置平台
- 搭建元数据配置化后盾,进行数据源 / 款式配置管理、参数治理映射和动静脚本能力,与数据模型进行绑定,数据模型与组件进行关联。
- 实现聚合服务 BFF 层,联合元数据配置后盾进行可视化配置化驱动数据编排,以及公布流程和容灾机制。
- 深度联合整体架构设计和框架个性进行性能 & 稳定性建设,保障服务侧可灰度、可观测、可应急。
3.在挪动端框架侧:* 面向挪动端研发的乐高容器动态化框架
- 借鉴适配器设计模式和依赖倒置准则,提供注解的形式进行注册依赖解耦,用模块仓库进行对立治理。设计通用的接口协议 Adapter Protocol,面向规范的形象协定接口开发,业务逻辑和依赖组件化隔离,齐全反对热拔插。
- 形象通用的布局数据、状态治理、生命周期及事件总线的能力,积淀通用能力和组件,缩小反复的代码开发,晋升研发效率。
- 在页面布局和状态治理方面,与列表容器深度联合,实现高效的页面渲染、数据驱动的页面刷新能力;稳固牢靠的高性能前端流式布局和残缺数据生命周期反对框架。
- 联合公司外部自研的“悟空 DSL”动态化渲染计划,实现页面部分动态化渲染,买通页面的最初一个编排粒度,联合乐高后盾实现模块性能动静公布上线。
- 深度联合整体架构设计和框架个性进行性能 & 稳定性建设,保障端侧可灰度、可观测、可应急。
零碎架构
乐高零碎从架构上整体分三局部:
- 面向产品经营的配置化后盾,进行线上编排和经营。作为业务的对立输出口,配置驱动业务的无效验证。
- 面向服务端的聚合服务与元数据配置后盾。作为配置和数据驱动的中间层,买通经营后盾和应用层的端到端流程。同时通过配置化晋升服务端的研发效率,反对聚合服务的容灾降级和观测告警能力。
- 面向挪动端的乐高容器框架。作为外围面向用户的应用层框架,为用户动静的出现丰盛的业务服务和所需的业务性能。反对端侧的性能 & 稳定性监控告警和灰度降级能力。
挪动端 - 乐高容器
乐高容器化框架的思路是 把一个页面用模块化的形式拆分 ,依照 形象定义好的规定 / 逻辑进行动静编排,页面容器去承载这些形象的功能模块,赋予其独立的加载渲染生命周期、数据散发、事件总线和音讯通信能力。通过框架协定将模块标准化后对立治理,在过程中积淀出通用的组件能力,进步复用缩小反复建设。
联合经营后盾能力和聚合服务的配置化能力的搭建和买通,将简单页面的搭建形象成结构化数据 (数据 + 容器解决 + 模块树 + 渲染节点),由结构化数据驱动模块 / 组件 / 款式 / 内容模版的拼装。使页面动起来,让用户看到须要的内容(千人千面), 让业务只聚焦于本身模块 的业务性能实现和动静公布,疾速验证方向。
1. 动静卡片 – 悟空 DSL
悟空 DSL 是哈啰外部研发的一套动态化渲染技术计划。悟空作为容器动态化的一个原子能力,补足了乐高容器页面动态化最初一环能力,反对在容器模块内进行弱交互的平铺 UI 的开发和绘制,联合乐高搭建的动静经营后盾和服务配置化数据绑定买通,达到 UI 层的动静渲染和公布能力。
2. 组件积淀
组件模块就是基于业务迭代过程中形象出的通用模块,继续积淀到组件池,定义好规范的数据结构,与后盾买通,通过表单配置和数据驱动页面上组件的变动出现。最大水平晋升根底能力的复用和缩小端到端链路反复建设的老本,业务拿来即用。
服务端 – 配置化聚合服务
按需搭建和 C 端交互须要的各个模块、组件、数据源,通过配置化的形式,升高服务端针对每次不同的数据聚合须要反复开发、测试、发版的次数,只须要在页面中可视化配置即可实现,晋升服务端的研发效率。
聚合服务针对上游数据源的服务等级、撑持的 QPS、稳定性保障要求等提供按需配置的保障措施,比方对上游服务的限流、熔断、数据的的资源隔离等能力,缩小聚合服务接入方在稳定性上的投入老本。
稳定性建设
乐高零碎整体链路稳定性建设反对可观测、可灰度、可降级、可告警的。基于 Grafana 搭建的大盘数据和技术指标看板,基于 UItron 搭建的异样告警看板并与钉钉机器人买通,及时触达。基于前后端链路的串联买通,反对从聚合服务到端侧框架的容灾和兜底降级能力。
流程
公布流程
1. 产运创立页面,进行模块、策略、内容的搭建和编排,将待实现的模块性能通过工作流指派给对应的研发。
2. 前后端研发进行模块性能配置或定制开发,而后依据工作进行模块 - 组件 - 数据模型关联,实现后告诉验收。
3. 测试进行性能验证,产品进行验收后进入预公布阶段,线上动静公布须要抉择对应的审批人进行把关。
4. 对应负责人审批后,需要性能上线开启阶段性灰度比例,逐渐放量观测。
5. 过程中会有监控大盘实时进行业务和技术指标监控。
6. 观测到异样后立刻进行本地主动降级或版本回滚并通过钉钉告警到对应的产品研发进行跟进。
7. 一段时间内观测无异样后进行主动 / 手动全量,后产品经营进行数据回收。
8. 实现整个灰度公布流程。
研发流程 – 挪动端
原流程上每个性能的开发上线都须要通过单方甚至多方的独特染指,进行计划沟通和联调,换一个对接人换一种计划,整个协同过程是人为驱动和把控,在这种单页面多团队的场景下,耗时耗力。
乐高流程在页面配置好后,依照框架标准接入或者间接复用已有的模块性能,由配置数据驱动,研发和公布流程上有三种场景:
1. 动态功能模块:模块组件库里没有或者无奈形象和动静开发的模块,失常依照框架接口开发实现后,配合后盾进行配置编排和策略经营。* 该状况一下会思考抽出一些能够复用的模块组件来积淀到组件池。
2. 动静功能模块:乐高联合悟空 DSL 的部分款式动静渲染能力,反对部分的动态化开发和公布。只须要一端在远端进行 UI 款式布局的编写,在聚合服务配置平台配合字段,再进行公布即可。研发效率和公布回收效率都能够晋升之前的一倍以上。
3. 组件功能模块:通过业务诉求迭代过程中形象积淀进去通用功能模块(如:宫格、banner、瀑布流 …),后盾产运进行配置即可,无需研发反复投入和公布。复用后的提效成果最高。
研发流程 – 服务端
以前是“一杆子捅到底”的开发模式,每个展现场景的搭建须要经验过从接口的沟通到 API 的开发整个过程,基于新的聚合服务配置化平台的计划后,统主动具备多层复用及可视化、配置化能力。聚合服务的元数据开发和应用会有三个场景:
1. 场景一:最优状况拿来即用,此时取数性能和展现性能都曾经被积淀下来,研发同学须要做的只是创立查问计划,基于经营平台按需抉择须要的展现单元。
2. 场景二:取数单元能够复用,在展现上有字段差别,此时可能没有展现性能,然而通过平台查看到,数据源曾经接入过,只须要基于现有的数据源编写一段加工逻辑即可。
3. 场景三:纯新接入的场景,在初期计划刚开始落地的时候比拟常见,这个时候聚合服务平台还短少相干的元数据积淀,只须要依照标准规范将数据源接入进来,而后编写加工逻辑片段即可,之后这些能力是能够被继续复用的。
前后流程提效比照
现状
乐高零碎是基于哈啰业务倒退过程中理论面临的问题,搭建的端到端页面动态化公布经营解决方案。做为 App 三大容器解决方案之一(Web 容器,小程序,乐高容器),前后端能力买通,为业务赋能,帮忙产研提效、疾速验证业务方向。
目前乐高已在“哈啰 APP 首页 ”、“搜寻”、“钱包”等多个外围场景落地利用。并反对数次迭代性能动静公布,反对 70% 以上的模块性能迭代应用动态化开发或者组件复用,晋升研发效率,缩小保护老本。承载数千万 DAU、线上运行近百个功能模块、每天数亿次加载渲染的稳定性和体验。
后续打算反对多个业务外围场景利用,帮忙研发标准化搭建页面,帮忙产品经营进行整个页面的动静编排。
瞻望
作者简介:刘欢,哈啰挪动端开发专家,2018 年入职哈啰,主导哈啰 App 首页架构演进和性能优化,负责平台经营客户端团队相干工作。
本文系哈啰技术团队出品,未经许可,不得进行商业性转载或者应用。非商业目标转载或应用本文内容,敬请注明“内容转载自哈啰技术团队”。