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

  一、业务介绍

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.物料消息日志链路

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

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

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

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

相关文章

电子电路学习笔记之SA1117BH-1.2TR——LDO低压差线性稳压器

关于LDO调节器(Low Dropout Regulator)是一种电压稳压器件,常用于电子设备中,用于将高电压转换为稳定的低电压。它能够在输入电压和输出电压之间产生较小的差异电压,因此被称为"低压差稳压器"。 LDO调节器通…

设计模式之职责链模式(ChainOfResponsibility)的C++实现

1、职责链模式的提出 在软件开发过程中,发送者经常发送一个数据请求给特定的接收者对象,让其对请求数据进行处理(一个数据请求只能有一个对象对其处理)。如果发送的每个数据请求指定特定的接收者, 将带来发送者与接收…

【LeetCode】1448.统计二叉树中好节点的数目

题目 给你一棵根为 root 的二叉树,请你返回二叉树中好节点的数目。 「好节点」X 定义为:从根到该节点 X 所经过的节点中,没有任何节点的值大于 X 的值。 示例 1: 输入:root [3,1,4,3,null,1,5] 输出:4 …

【MOS管的作用和工作原理】

数电/模电知识学习与分享001 MOS管的作用和工作原理1、MOS管基本概念2、MOS管基本原理3、MOS管广泛作用4、MOS管特点4、参考文献 MOS管的作用和工作原理 1、MOS管基本概念 MOS管(Metal-Oxide-Semiconductor Field-Effect Transistor)是一种常用的半导体…

python AI绘图教程

前提 1.安装python 2.安装git 步骤 下载stable-diffusion-webui项目(链接:GitHub - AUTOMATIC1111/stable-diffusion-webui: Stable Diffusion web UI) git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git 安装st…

【Go Web 篇】Go 语言进行 Web 开发:构建高性能网络应用

随着互联网的快速发展,Web 开发已经成为了软件开发领域中不可或缺的一部分。随之而来的是对于更高性能、更高效的网络应用的需求。在这个领域,Go 语言因其并发性能、简洁的语法以及丰富的标准库而备受关注。本篇博客将深入探讨如何使用 Go 语言进行 Web …

centos7设置静态IP地址

安装完成系统后,接下来就是配置静态IP地址,如下: 进入编辑模式vim /etc/sysconfig/network-scripts/ifcfg-ens33 文件名不一定是ifcfg-ens33,到/etc/sysconfig/network-scripts下面找下是哪个文件 修改 : BOOTPROTO…

Python OCR 使用easyocr库将图片中的文章提取出来

Python OCR 使用easyocr库将图片中的文章提取出来 初环境内容步骤一:安装easyocr库步骤二:导入必要的库步骤三:创建OCR阅读器对象步骤四:指定要识别的图片路径步骤五:执行OCR识别并提取文章内容步骤六:遍历…

深入分析负载均衡情景

本文出现的内核代码来自Linux5.4.28,为了减少篇幅,我们尽量不引用代码,如果有兴趣,读者可以配合代码阅读本文。 一、有几种负载均衡的方式? 整个Linux的负载均衡器有下面的几个类型: 实际上内核的负载均衡…

【TI毫米波雷达笔记】UART串口外设配置及驱动(以IWR6843AOP为例)

【TI毫米波雷达笔记】UART串口外设初始化配置及驱动(以IWR6843AOP为例) 最基本的工程建立好以后 需要给SOC进行初始化配置 int main (void) {//刷一下内存memset ((void *)L3_RAM_Buf, 0, sizeof(L3_RAM_Buf));int32_t errCode; //存放SOC初…

同态比较算法

参考文献: [PS73] Paterson M S, Stockmeyer L J. On the number of nonscalar multiplications necessary to evaluate polynomials[J]. SIAM Journal on Computing, 1973, 2(1): 60-66.[IZ21] Iliashenko I, Zucca V. Faster homomorphic comparison operations …

redis7高级篇3 数据量亿级别的统计分析(hyperloglog,bitmap,geo)

一 亿级别统计分类 1.1 统计分类 1.聚合统计:统计多个集合聚合的结果,也就是多个集合之间交并差的统计。 2.排序统计:在需要展示最新列表,排行榜等场景时,如果数据更新频繁或者需要分页时,建议使用zset12…

滚珠螺杆导程对精度有影响吗?

滚珠螺杆的导程也称螺距,即螺杆每旋转一周螺母直线运动的距离,导程与直线速度有关,在输入转速一定的情况下,导程越大速度越快。正常来说,选择导程时,尽量选5和10最好。 很多人一直觉得导程会影响滚珠螺杆的…

【安卓】自定义View实现画板涂鸦等功能

一、实现效果 二、代码 1、MainActivity.class package com.lsl.mydrawingboarddemo;import androidx.appcompat.app.AppCompatActivity; import androidx.core.content.ContextCompat;import android.os.Bundle; import android.os.Handler; import android.view.View; impo…

73 # 发布自己的 http-server 到 npm

1、添加 .npmignore 文件,忽略不需要的文件 public2、去官网https://www.npmjs.com/检查自己的包名是否被占用 3、切换到官方源,然后检查确认 nrm use npm nrm ls4、登录 npm 账号 npm login5、发布 npm publish6、查看发布情况,发布成功…

npm 卸载 vuecli后还是存在

运行了npm uninstall vue-cli -g,之后是up to date in,然后vue -V,版本号一直都在,说明没有卸载掉 1、执行全局卸载命令 npm uninstall vue-cli -g 2、删除vue原始文件 查看文件位置,找到文件删掉 where vue 3、再…

山西电力市场日前价格预测【2023-08-27】

日前价格预测 预测明日(2023-08-27)山西电力市场全天平均日前电价为318.11元/MWh。其中,最高日前电价为356.66元/MWh,预计出现在19: 15。最低日前电价为273.48元/MWh,预计出现在04: 30。 价差方向预测 1: 实…

Jenkins的定时任务配置

jenkins配置定时任务位置(点击日程表的问好可查看语法配置) jenkins的定时任务的参数 # 定时任务参数(每个参数之间使用tab键或空格分隔)MINUTE HOUR DOM MONTH DOW 参数解释取值范围 MINUTE 分钟0-59HOUR小时0-23DOM一月的天数1-31MONTH月份1-12DOW 一周的天数0…

实验七 Linux 内核移植

【实验目的】 掌握 Linux 内核配置和编译的基本方法 【实验环境】 ubuntu 14.04 发行版FS4412 实验平台交叉编译工具:arm-none-linux-gnueabi- 【注意事项】 实验步骤中以“$”开头的命令表示在 ubuntu 环境下执行,以“#”开头的命令表 示在开发板下…

PHP 安装Composer,vue前端依赖包

电脑安装Composer 官网下载:https://getcomposer.org/Composer-Setup.exe 后端安装: 检查是否安装依赖: 安装Composer install 或 Composer i 前端安装: yarn install 安装依赖