浅谈小程序开源业务架构建设之路

2023-12-21

一、业务介绍

1.1 小程序开源整体介绍

百度从做智能小程序的第一天开始就打造真正开源开放的生态,我们的愿景是:定义移动时代最佳体验,建设智能小程序行业标准,打破孤岛,共建开源、开放、繁荣的小程序行业生态。百度智能小程序的生态玩家有三类,分别是:联盟合作伙伴、开发者和用户。对于联盟合作伙伴,满足合作伙伴的生态共建、流量共享、商业共赢诉求,使得合作伙伴App内缺失场景得到高效补充,拉动合作伙伴App用户使用时长,共享小程序的变现收入。对于开发者,满足了开发者一次开发,多端运行诉求,使得开发者流量获取更加便捷高效、并且增加开发者商业收入。对于用户,满足用户的无需跳出即可享受一站式服务诉求。 百度搜索做为小程序的十分重要分发入口,通过构建统一的小程序行业生态, 提升百度的搜索生态中的用户体验、服务闭环。

百度智能小程序开源的架构是如何支撑起整个联盟生态运转的呢?

如图所示,小程序开源联盟的整个业务架构分位四层。包括:联盟宿主层、对外联盟赋能层、中间服务层、基础建设层。

  • 联盟宿主层。百度智能小程序已经接入非常丰富的联盟宿主,包括OPPO浏览器、VIVO浏览器、小米浏览器、爱奇艺、百度极速版等等。

  • 对外联盟赋能层,百度智能小程序开源联盟主要通过开源联盟平台对宿主提供入场能力、经营能力、资源输出能力,以支持开源生态成员的入驻、配置、集成、准入检测、小程序信息、物料信息、分佣、订单信息、运营等诉求。 宿主通过资源输出模块拿到小程序以及物料的数据后,可以在自己的App内场探索可落地的场景并进行资源的分发。

  • 内部中间服务层,主要是承上启下的服务,封装基础服务,并支撑对外联盟赋能层对基础业务数据的获取。主要包含:小程序开源宿主管理、能力资产管理、分发管理、订单及分佣管理、数据管理等。

  • 基础建设层,主要包含小程序开源框架、数据服务、小程序/物料服务、包服务以及安全加固等方案的落地。

1.2 小程序开源与厂商合作介绍

随着百度小程序开源联盟的不断发展,也吸引了头部手机厂商。小程序开源与厂商共建了丰富的业务场景,不仅包含厂商的浏览器场景,还有桌面锁屏、负一屏、全局搜等多种场景。如此多样化的场景建设中,我们面临的共性挑战是:如何 保障厂商线上分发质量、如何建设一条从厂商浏览器到百度搜索到小程序的全流程分发管控通路,从而可以精准、实时的管控厂商浏览器的小程序分发。

具体我们是如何考虑并建设的呢?下面将详细介绍下。

二、整体技术建设思路介绍

2.1小程序开源分发保障技术要点

1.背景介绍

开源保障核心围绕的对象为宿主与小程序,核心目的是为了保障小程序在宿主上的分发质量。

为什么会存在分发质量问题?宿主在入驻开源后需要集成开源SDK并进行相关能力的开发,在这些流程完成后宿主就获得了相应的宿主能力。小程序是基于swanjs开发框架进行的开发,swanjs这套运行时框架底层同样是依赖开源SDK运行,因此在小程序完成开发后小程序本身也获得或依赖了相关能力。因为不同的宿主能力支持情况不同,就会导致同一个小程序在不同宿主上分发时可能遇到某个宿主不支持小程序使用到的某个能力,进而导致该小程序无法在宿主上正常打开或者降级为H5打开,导致用户体验受损。

因此需要有一套开源保障方案来提前发现宿主与小程序之间能力不匹配情况,进而确保系统能够自由管控小程序在宿主上分发全过程。

2.技术要点

要实现小程序在宿主上分发通路建设,核心涉及端流程打通、能力与定级流打通及最终分发流打通三大板块,如下图所示:

1)端流程包含宿主端流程和小程序端流程打通

a、宿主端流程:

宿主入驻开源,入驻成功后宿主需要集成开源SDK与开发,宿主开发完成后即可打包发布宿主App;同时宿主包在发布前需要经过宿主能力测试,通过下载宿主工具进行CTS能力测试并产出宿主能力支持情况。

b、小程序端流程:

开发者进行小程序开发,开发完成后操作小程序包版本发布上线,之后小程序开源保障模块会订阅小程序发版动作,同时拉取小程序包信息执行小程序能力扫描测试,并产出小程序能力使用情况。

2)能力与定级流

在宿主与小程序分别完成接入与能力扫描后,开源保障系统就可以分别基于宿主与小程序能力扫描结果进行解析,产出最终的宿主和小程序能力使用情况并存储。同时开源保障系统可以基于宿主能力与小程序能力分别对宿主和小程序进行能力定级,计算出宿主与小程序当前能达到哪个等级,并给宿主和小程序分别打上等级标识。

3)分发流

主要由小程序分发端实现,主要根据用户在开源保障系统中配置的分发策略,基于策略计算小程序是否满足在宿主上分发条件。

3.名词解释

SWANJS :小程序前端运行时框架。

能力 :能力指的是小程序开源系统中,对百度APP或者说开源SDK中所封装并支持的各种API、组件、框架等系统能力的统称,详细可参考小程序开发者文档 https://smartprogram.baidu.com/docs/develop/api/apilist/进行了解,目前小程序开源共支持的能力有1000多个。

CTS测试 :CTS即Compatibility Test Suite, 兼容性测试套件;是为了保障智能小程序在宿主APP稳定运行,提供了一套兼容性测试集合,宿主APP上线前,需先通过CTS测试。

AST扫描 :抽象语法树(Abstract Syntax Tree)扫描,是小程序应用的一种源码扫描工具,通过抽象语法树的方式对小程序源码进行扫描分析,目前已支持小程序用到的能力、能力属性、能力参数、能力返回值、能力涉及的关键路径等多种维度的扫描功能。

L级 :根据能力在小程序侧使用情况,区分出一些基础能力与特色能力和低频能力等,同时宿主可以根据这些能力标准进行按需实现,等级划分如下:

L1:小程序自带,不用宿主额外配合(框架实现)。

L2:能力建议端补齐,确保基础体验,内部矩阵必要实现(包含手百独有能力在内的必要能力)。

L3:特色能力,强依赖端能力满足,宿主按需实现。

L4:低频能力,不追求满足,宿主按需实现。

2.2 宿主能力检测机制

1.使用宿主工具进行CTS能力测试

宿主在集成开源SDK并完成开发后进行打包,可在开源宿主平台下载宿主工具,对包体进行CTS能力测。,CTS支持宿主进行全能力自动测试和补充测试,补充测试可以对全能力测试中未通过的能力进行批量测试,测试完成后上传自动测试报告。其中还存在部分能力无法实现CTS自动化测试,需进行手动测试,测试完成后宿主在手机上传手动测试报告。

2.宿主工具上传测试报告

在宿主执行完自动测试与手动测试后,需分别上传自动测试报告与手动测试报告至开源保障系统,同时因为同一个宿主版本可能存在多次重复测试过程,会产生多份测试报告,因此宿主需要分别选择一份最终的自动测试报告和手动测试报告,使得开源保障系统可以对最终确认的报告进行解析。

3.报告解析产出宿主能力

开源系统在收到宿主确认报告的操作后,开始执行报告解析,计算宿主能力支持情况,产出最终的宿主能力列表并存储下来;在宿主能力产出的同时同样会执行宿主能力定级,计算出宿主能力等级并进行标记;产出的宿主能力和宿主等级将在后续宿主分发小程序时分发策略中使用。

能力检测服务可用性保障:

当用户完成测试报告确认动作后,开源保障系统实时进行报告解析和能力解析相关操作,在一个进程中完成,如果因为系统执行异常导致的宿主能力检测失败,开源保障系统中设计重试任务进行兜底,保障所有宿主都能完成能力检测。

2.3 小程序能力检测机制:

1.小程序包发布及发版消息订阅

小程序能力检测通路依赖开发者在开发者中心完成小程序开发与发版全流程,之后开源保障系统负责订阅小程序发版行为并自动拉取小程序包体信息,最后推送给AST小程序能力扫描工具进行扫描操作。

2.小程序能力扫描

小程序能力扫描核心依赖AST小程序能力扫描工具完成,该工具主要通过抽象语法树方式实现对小程序包体代码进行扫描分析,共支持扫描小程序使用到哪些开源能力,能力对应的参数、返回值及属性,及能力涉及的小程序关键路径,以上信息扫描成功后的结果将回传给开源保障系统。

3.小程序能力解析

开源保障系统在接收到AST小程序能力扫描结果后,会进行扫描结果分析,提取出小程序使用的能力情况及其他关键信息并存储下来,同时会触发小程序定级任务来执行小程序等级计算,产出并存储当前小程序包版本的等级以便后续保障流程使用。

能力检测服务可用性保障:

当开源保障系统订阅到小程序发版信息后,开始走推送AST扫描及后续流程,整个流程过程均为实时流,但是中间存在跨系统交互等多个子流程,为了保证小程序能力检测过程一定能全部执行成功,开源保障系统中设计重试任务进行兜底,对能力检测失败的小程序记录进行重推AST扫描及能力解析等,同时中间步骤保证幂等,保障所有小程序都能完成能力检测。

2.4 分发匹配机制:

为了得到宿主App与小程序的兼容情况,小程序开源业务系统建设了分级机制。将小程序与宿主App从低到高分别评定为 L1 至 L4 级,并基于L级确定可以分发哪些小程序。具体步骤包括:

1.宿主App与小程序的能力分析:将待匹配的宿主App进行能力测试得到宿主App所支持的全部能力;将待匹配的小程序进行能力扫描得到小程序运行需要的全部能力。

2.宿主App与小程序的等级评定:根据能力的重要性,对宿主App与小程序的能力进行等级映射、等级聚合来评定App与小程序的等级。

3.宿主App与小程序的分发匹配:根据宿主App等级确定匹配的小程序集,其中L1级的宿主App仅能匹配到L1级的小程序,L2级的宿主App可以匹配到L1与L2的小程序,宿主App的最高级别为L4,即具备运行全部小程序的能力。

2.5 分发干预机制:

为了得到宿主App上可分发的小程序,小程序开源业务系统结合内部分发匹配机制与管理员干预机制,来确定宿主App可以打开的小程序集。具体步骤包括:

1.小程序管理员管控:第一级小程序分发管控,基于管理员对小程序的私有化、App黑名单,以及小程序下线的诉求,确保App上无法打开私有、被拉黑、下线的小程序。

2.L级匹配机制管控:第二级小程序分发管控,通过L级匹配机制得到App可正常运行的小程序集合,使默认情况下宿主App只能打开L级相匹配的小程序。

3.宿主App管理员干预:匹配机制的补充,App管理员可根据小程序运行的数据、App应用场景等需求,提交想分发的小程序名单,来表达分发诉求。

三、总结与思考

打破孤岛,共建开源、开放、繁荣的小程序行业生态 一直是小程序开源联盟努力的目标。基础能力框架的完善、各行各业数据的互通以及开发者、宿主和百度友好积极的合作模式是完成这样目标的关键。技术架构的规划一定是围绕着共同的目标和伙伴们的诉求展开,切实的跟踪和服务为理念,用合理的技术手段赋能产品和生态,这样才可以体现生态价值。在小程序开源业务架构建设道路中对服务化结构以及全流程的问题排查有如下总结和思考:

3.1服务化架构的设计思路

1.基础数据的内聚和服务的收敛

数据是服务的基础,无论是开发者平台、tp平台还是宿主平台,都会对基础数据的使用场景,统一管理基础数据可以很好的保证基础信息在各个平台的统一性,而统一收敛的基础数据提供服务,可以有效的管理和运维。

2.自研rpc框架赋能微服务架构和治理

微服务的架构往往离不开的组件就是rpc框架,整体框架中的内部服务调用使用rpc框架,在提高网络交互的效率同时,使用rpc框架的运维功能,有效提高服务稳定性。

3.单一职责原则拆分原有的重模块,切实落地架构微服务化

随着开源业务逐年快速发展,很多模块原有的功能聚合和边界划分已经不太符合现有场景,基于业务发展的趋势和微服务单一职责理念,对服务进行拆解,不仅可以有效降低服务的耦合度,而且衍生出更易扩展和更健壮的服务。

4.日志收集、监控报警 服务稳定性保障

分布式的日志收集和全面的监控报警是保证服务稳定性的重要手段,也是问题排查和解决的常用方式,但也并不是所有的地方都要日志收集和监控报警,合理有效的的日志上报和监控报警指标可以有效的在第一时间发现问题和解决问题。

3.2全流程问题排查

小程序开源的链路比较长,在遇到线上badcase的时候,如果核心日志数据不完善,日志数据链路没打通,上下游数据链路情况就无法查询,排查问题周期长,甚至排查不了问题,继而导致稳定性问题得不到很好的解决和处理,基于这样的问题,在线日志建设十分重要。

1.http请求日志链路

  • trace维护 :基于 server mesh 理念,使用 java agent 能力和 openTrace 标准,发布平台统一管理trace生成和传递,不仅无侵入,而且对于业务只需要很少的接入成本即可完成。

  • trace链路 :发布平台提供想用的trace链路拓扑,有效的排查traceId下调用场景和花费时间,帮助开发同学及时发现问题和排查问题。

  • trace日志 :统一分布式日志收集服务将收集业务方提交日志,兼容发布平台统一管理的trace信息,保留trace链路的具体日志详情,方便在具体问题场景上面更详细排查问题。

2.物料消息日志链路

  • 物料唯一标识 :物料服务将统一管理和存储物料数据,对于不同场景的物料都有各自的唯一标识体系,使用物料唯一表示进行物料消息的链路日志串联。

  • 日志收集检索 :公司统一的收集服务提供业务标识定义、检索和排序功能,对于长链路的物料消息传递分发场景,可以很好的串联起整个异步链路。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

浅谈小程序开源业务架构建设之路 的相关文章

  • Tomcat远程调试

    windows环境 写一个 startup debug bat 指定tomcat的根目录 端口自己定义 rem 设置Tomcat目录 set CATALINE HOME D asd A8 2 tomcat d rem 8787为可用端口 为
  • 互联网加竞赛 python+深度学习+opencv实现植物识别算法系统

    0 前言 优质竞赛项目系列 今天要分享的是 基于深度学习的植物识别算法研究与实现 学长这里给一个题目综合评分 每项满分5分 难度系数 4分 工作量 4分 创新点 4分 更多资料 项目分享 https gitee com dancheng s
  • test和我说过

    27车型管理 年代需提示 SOP当年时间 且只显示两位数 如2024只最示24未部署生产 29车型管理 网络选项值不全未部署生产 31车型管理 系统需限制车型计划开始时间与结束时间需包含在车型管理开始时间与结束时间之间未部署uat 需要提手

随机推荐

  • MySQL SELECT:数据表查询语句

    在 MySQL 中 可以使用 SELECT 语句来查询数据 查询数据是指从数据库中根据需求 使用不同的查询方式来获取不同的数据 是使用频率最高 最重要的操作 SELECT 的语法格式如下 SELECT lt 字段列名 gt FROM lt
  • 速通Python基础语法--运算符篇

    一 算术运算符 优先级 除法的2个问题 除零异常 运行时才出现的错误 叫做 抛出异常 如果程序运行过程中 抛出异常 程序就会直接终止 后面的代码不会执行 除法的 不 截断问题 取模 求余数 乘方 开方 向下 小 取整 地板除 二 关系运算符
  • 基于python的超市购物系统的设计与实现

    摘 要 随着国内市场经济这几十年来的蓬勃发展 突然遇到了从国外传入国内的互联网技术 互联网产业从开始的群众不信任 到现在的离不开 中间经历了很多挫折 从当初的传统销售行业抵制互联网销售 到现在传统销售与网络销售的结合模式 都代表着网络购物是
  • 【计算机毕设文章】传染病防控宣传系统小程序

    设计题目 传染病防控宣传系统的设计与实现 摘 要 由于APP软件在开发以及运营上面所需成本较高 而用户手机需要安装各种APP软件 因此占用用户过多的手机存储空间 导致用户手机运行缓慢 体验度比较差 进而导致用户会卸载非必要的APP 倒逼管理
  • 【计算机毕设文章】微信互助学习平台

    微信互助学习平台 摘要 随着信息技术在管理上越来越深入而广泛的应用 管理信息系统的实施在技术上已逐步成熟 本文介绍了微信互助学习平台的开发全过程 通过分析微信互助学习平台管理的不足 创建了一个计算机管理微信互助学习平台的方案 文章介绍了微信
  • Java版工程行业管理系统源码-专业的工程管理软件- 工程项目各模块及其功能点清单

    工程项目管理软件是现代项目管理中不可或缺的工具 它能够帮助项目团队更高效地组织和协调工作 本文将介绍一款功能强大的工程项目管理软件 该软件采用先进的Vue Uniapp Layui等技术框架 涵盖了项目策划决策 规划设计 施工建设到竣工交付
  • R语言——基本操作(二)

    目录 一 矩阵与数组 二 列表 三 数据框 四 因子 五 缺失数据 六 字符串 七 日期和时间 参考 一 矩阵与数组 matrix 创建矩阵 nrow 和 ncol 可以省略 但其值必须满足分配条件 否则会报错 只写一个值则自动分配 默认按
  • Leetcode 55 跳跃游戏

    题意理解 非负整数数组 nums 最初位于数组的 第一个下标 数组中的每个元素代表你在该位置可以跳跃的最大长度 需要跳到nums最后一个元素即为成功 目标 是否能够跳到最后一个元素 解题思路 使用贪心算法来解题 需要理解局部解和最优解的关系
  • 网络基础介绍

    1 网线制作 1 1 网线制作需要的工具 网线 网线钳 水晶头 测试仪 编辑 1 2 网线的标准 1 3 网线的做法 2 集线器 交换机 路由器的介绍 3 OSI七层模型 4 路由器的设置 4 1 常见的路由器设置地址 4 2 常见的路由器
  • C++设计模式 #3策略模式(Strategy Method)

    动机 在软件构建过程中 某些对象使用的的算法可能多种多样 经常改变 如果将这些算法都写在类中 会使得类变得异常复杂 而且有时候支持不频繁使用的算法也是性能负担 如何在运行时根据需求透明地更改对象的算法 将算法和对象本身解耦 从而避免上述问题
  • WinSync.dll文件丢失导致程序无法运行问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个WinSync
  • 达芬奇18.6DaVinci ResolveStudio(Win/Mac)激活版

    DaVinci Resolve Studio 18是一款业界领先的视频后期制作软件 它集成了剪辑 调色 视觉特效 动态图形和音频后期制作等功能 为用户提供了完整的创作解决方案 该软件不仅适用于电影 电视和网页内容的制作 还广泛应用于广告 纪
  • 小程序模版|报名管理服务源码

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板
  • Python 元组完全指南 1

    元组用于在单个变量中存储多个项目 mytuple apple banana cherry 元组是 Python 中的 4 种内置数据类型之一 用于存储数据集合 另外还有列表 集合和字典 它们都具有不同的特性和用途 元组是有序且不可更改的集合
  • WinSyncProviders.dll文件丢失导致程序无法启动问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个WinSync
  • 测试报告和结果分析 —— allure整合pytest生成测试报告

    一 生成HTML测试报告的三种方式 1 unittest和HTMLTestRunner整合 2 allure和pytest整合 3 Jenkins中安装allure插件 Jenkins安装插件出错 不能正常使用 二 allure整合pyte
  • F5创新产品赢得2023年众多全球知名奖项

    西雅图 2023年12月20日 全球多云应用安全和应用交付服务领导者F5 NASDAQ FFIV 日前宣布 公司在2023年斩获多项杰出荣誉 这些殊荣充分彰显了F5在潜心创新和追求卓越方面始终坚守的承诺 同时凸显了公司正在专注于利用更先进的
  • 浅谈小程序开源业务架构建设之路

    一 业务介绍 1 1 小程序开源整体介绍 百度从做智能小程序的第一天开始就打造真正开源开放的生态 我们的愿景是 定义移动时代最佳体验 建设智能小程序行业标准 打破孤岛 共建开源 开放 繁荣的小程序行业生态 百度智能小程序的生态玩家有三类 分
  • 华为OD机试真题-部门人力分配-2023年OD统一考试(C卷)

    题目描述 部门在进行需求开发时需要进行人力安排 当前部门需要完成N个需求 需求用requirements 表示 requirements i 表示第i个需求的工作量大小 单位 人月 这部分需求需要在M个月内完成开发 进行人力安排后每个月的人
  • std::string 转为 LPCTSTR类型

    在串口通讯中使用CreateFile 时 第一个参数类型为 LPCTSTR 通常使用的string类型需要进行转换 HANDLE CreateFile LPCTSTR lpFileName 指向文件名的指针 DWORD dwDesiredA