手机银行客户端框架之mPaaS介绍

移动开发平台(Mobile PaaS,简称 mPaaS)是源于支付宝 App 的移动开发平台,为移动开发、测试、运营及运维提供云到端的一站式解决方案,能有效降低技术门槛、减少研发成本、提升开发效率,协助企业快速搭建稳定高质量的移动 App。

动态灵活的客户端能力

作为开发者,您可以借助客户端动态灵活的能力,有效提升开发效率,打造极致的 App 体验:

  • 3 大研发框架:Native 开发框架、Kylin H5 开发框架、小程序开发框架。

  • 20 多个功能性组件,例如网关服务、埋点分析、热修复、用户反馈、消息推送、离线包等。

  • 100 多个 UI 控件,包括 AntUI 和 AntMobile。

    mpaas_benifits_client

坚实的移动中台

覆盖 App 全生命周期,提供强大的支撑,确保客户端稳定、高效运行,并进行快速变更和创新。

mPaaS 生命周期

面向未来的研发方式:小程序

实现开发一次多端投放,实现更流畅的用户体验。同时,全面开放支付宝能力,快速构建新业务、新生态。

mPaaS 生态

组件功能

为方便开发,mPaaS 封装了众多性能优异的组件,能够覆盖移动开发的各个阶段。组件可以跟框架一起使用来快速开发新的 App,各组件也可以独立集成到已有 App 中。

开发阶段

组件名称

描述

客户端开发

设备标识

简单快捷地获取设备 ID,快速定位到特定设备。

H5 容器和离线包

在 Native 代码中快速加载 H5 页面。

社交分享

快速便捷地将信息共享到各个渠道。

扫一扫

快速扫描识别二维码、条形码。

统一存储

客户端持久化存储。

定位

快速便捷地使用定位服务。

服务端开发

消息推送

推送消息到客户端 App。

移动网关

管理客户端与服务端连接。

智能投放

提供应用内个性化投放和定向投放广告的能力。

发布

实时发布

发布新版本。

热修复

动态修复 Native 代码中的 bug。

分析

实时日志

通过埋点进行用户行为分析。

闪退报告

闪退分析快速定位问题。

卡顿报告

多种性能指标分析。

实时发布服务(Mobile Delivery Service,简称 MDS)是 mPaaS 平台的核心基础服务组件之一,提供版本升级包、热修复包、H5 离线包的管理和发布服务,同时支持 开关配置、白名单、发布规则 管理功能。

在客户端集成实时发布服务功能后,您可以在 mPaaS 插件中生成新的包,然后在实时发布控制台发布新包,客户端收到新包并进行升级。实时发布服务还支持通过白名单进行灰度发布,您也可以使用高级过滤规则,比如指定机型,来进行更精准的灰度发布。

功能特性

  • 灰度发布

    在正式发布之前,可以通过白名单来做小规模发布(比如内部员工)以验证新包的功能是否达到预期。还可以进行时间窗灰度发布,在规定的时间段内发布给规定用户人数。如果达到预期就可以进行全网推送。

  • 高级过滤

    在进行灰度发布的时候还可以利用高级规则来定义更为精准的白名单人群,比如可以只发给小米手机的用户,多个过滤规则可以叠加,只有在所有的过滤规则都符合的情况下才会推送。

  • 实时回滚

    仅支持热修复。即使进行了灰度发布,正式上线的时候还是难免会发生问题,这个时候就可以进行实时回滚,自动回滚到发布前的版本。

  • 自定义验签

    为了保障安全性,热修复有自定义的验签流程,保证脚本来源的正确性。 mPaaS 插件中提供生成热修复资源包并对包进行加签的功能。

 

实时发布平台包含了客户端 SDK,您可以便捷地把实时发布的能力集成到客户端。

实时发布的流程如下:

  1. 在客户端添加相应 SDK,集成实时发布升级、热修复或 H5 离线包的能力。

  2. 在 mPaaS 插件中打包生成版本升级包、热修复包、离线包等,上传到发布控制台。

  3. 在控制台创建发布任务进行灰度发布、正式发布等。

  4. 客户端再去拉取新的发布包进行升级、热修复、离线发布。

另外,您还可以使用开关配置服务修改客户端代码处理逻辑。通过在控制台增加需要的开关配置项,实现针对性地下发。

使用流程

以下图表展示了实时发布版本升级包、热修复包、离线包的流程:

lADPJxf-wA124-7NByHNDIM_3203_1825

热修复(Hotpatch)用于在不发布新版本的情况下热修复线上故障(Bug)。

使用场景

每一次热修复,都是一次 紧急发布。因此,mPaaS 限定了热修复的使用范围是:在来不及发布版本的情况下,需要立刻解决线上客户端问题。

根据最佳实践,热修复只用于修复严重的、影响面大的、具有高可复现性的问题。包括但不仅限于以下情况:

  • 高概率的闪退

  • 严重的 UI 问题

  • 可能造成资损与用户投诉的故障

  • 客户端某些功能不能使用

  • 监管审查导致的紧急修改

使用说明

  • 目前 iOS 热修复功能仅支持专有云环境,公有云环境中无法使用 iOS 热修复功能。

  • 目前 Android 支持两种热修复方式,分别为 DexPatch 和 InstantRun。

  • 使用热修复涉及到调用 MDS 的更新发布接口,会产生相应的接口调用费用。有关接口调用的计费说明,参见 产品定价 中的实时发布计费项说明 。

DexPatch 和 InstantRun 对比

对比项

DexPatch

InstantRun

包大小

无需插桩,没有变化

需要插桩,体积变大

是否立即生效

否,需要重启

特定条件下立即生效,

重启必定生效

是否支持 so 文件修复

不支持

支持

是否支持资源文件修复

不支持

支持

额外依赖

依赖 Gradle 插件插桩

说明

两种热修复不能在同一个版本内混合使用,可以跨版本更换方案。

 

移动分析服务(Mobile Analysis Service,简称 MAS)是 mPaaS 平台的一个核心基础服务组件,是一项方便您轻松地大规模收集、可视化并理解应用程序使用数据的服务。MAS 通过统计和分析客户端流量、性能质量和用户行为等数据,用数据实现产品、运营、推广的决策;通过对闪退的分析,快速定位闪退原因,提高程序稳定性。

移动分析简介

组件原理

MAS 涉及的相关组件介绍如下:

  • mdap:日志采集网关,负责收集客户端埋点日志,收到日志后,直接传输至 JStorm 集群进行计算。

  • JStorm:实时计算引擎,根据处理规则对日志进行实时解析并将需要的数据存储入库。

  • SSDB:KV 数据存储层,底层使用 Leveldb,支持单表十亿级记录。

  • ZooKeeper:集群管理、组件间服务发现。

mas系统架构 拷贝

组件特点

  • 极简接入:引入移动分析组件便可自动搜集用户行为日志、网络日志、异常日志,简单方便。

  • 全面分析:具备用户行为、终端问题、流量、电量、通讯链路、性能等多个目标的分析角度。

  • 多维度展现:可以从终端类型、终端版本、地域、网络类型、厂商机型等多个维度展现和分析移动应用数据。

  • 快速定位问题:闪退、异常日志提供发生错误的接口名称、异常原因、运行环境等信息,帮助开发者快速定位问题。

组件功能

  • 用户行为分析:提供应用使用分析,包括用户报活、用户登录、新增用户等多种指标的统计功能,并支持按照平台、版本、地域、时间的多维度分析对比,方便用户更快速、便捷的了解自身 App 的使用情况。

  • 稳定性分析:提供应用稳定性分析,包括闪退监控、异常监控、性能监控及用户诊断功能,帮助开发人员及时发现、定位问题。

  • 问题诊断:提供应用问题诊断,包括个人用户诊断和诊断日志采集两部分。其中个人用户诊断实时获取用户客户端行为,诊断日志采集通过 push 方式下发指令到客户端传回客户端本地日志。

应用场景

  • 通过数据指导业务:帮助开发、运营人员利用数据进行产品、运营、推广方案的决策。

  • 提升用户体验:快速定位闪退位置,结合热修复功能快速修正 APP 闪退,提升用户体验、增加客户留存率。

客户端诊断是指通过服务端获取客户端写入的诊断日志,并根据诊断日志进行客户端问题的诊断。

您可以在客户端关键链路写入诊断日志,当出现线上问题时,在控制台针对用户下发诊断指令拉取诊断日志,从而排查问题。客户端诊断功能支持通过 数据同步简介 或者 消息推送 通道拉取诊断日志。

原理框架

控制台根据不同的诊断通道(消息推送或移动同步)下发日志诊断指令,客户端接收到诊断指令后,将诊断日志上报到日志网关,当诊断文件上报成功后,在控制台可以下载诊断文件。基本框架如下所示:

诊断框架

 

移动性能监控(Application Performance Management,APM)是移动开发平台(mPaaS)提供的一款集移动应用性能数据采集、分析、监控于一体的应用性能运维产品,支持实时检测、分析并可视化展示应用各项性能指标统计数据。通过对移动客户端、H5 等多端埋点及网络探针数据的采集与分析,实现对应用的性能进行全方位的监控和管理。目前,APM 的性能监控分析覆盖网络、应用启动、页面性能、H5 性能和崩溃分析五个维度。

APM 可配合移动分析服务、移动测试平台、热修复等组件,对保障应用质量实现完整闭环。即通过 APM 全方位的性能分析以及移动分析的日志诊断来感知、定位问题,借助移动测试平台进行问题复现、调试,然后使用热修复组件及时修复问题,持续保证用户体验。

产品功能

APM 接入移动应用数据,并基于多种维度,对关键应用性能指标进行监控分析,并可针对性能异常发送告警通知。

  • 网络分析

    基于客户端侧的网络请求情况进行监控和分析,通过监控用户的网络请求响应时长,帮助用户发现和解决应用的网络延迟、网络抖动等网络问题。支持从地域、版本、平台、网关类型等维度来筛选和查看细分的网络情况。

  • 启动分析

    分析应用的启动性能,通过首次启动、非首次启动的启动时长发现启动问题,支持从设备、版本、平台维度进行监控分析。支持自定义启动完成事件,帮忙用户定位应用启动的不同阶段的时长。

  • 页面性能

    针对应用原生页面,通过统计页面加载时长来分析页面启动的性能情况。支持从客户端平台、版本维度查看相关性能指标数据。

  • H5 性能

    对 H5 页面性能进行监控和分析,覆盖 H5 页面的浏览量(PV)、用户量(UV)、页面加载时长、慢加载占比和 JS 错误数。

  • 崩溃分析

    监控 App 的闪退、卡死、卡顿等崩溃类事件,并及时上报 App 对应的内存堆栈信息,方便定位问题。

  • 监控告警

    从网络、启动、业务、页面、崩溃、H5 页面等多个方面对 App 指标异常情况进行实时监控,实时了解并追踪 App 性能情况。针对异常情况,发送告警通知,及时通知运维人员进行问题排查,提升用户体验。

产品优势

  • 监控维度全

    支持网络分析、启动分析、页面分析、H5 性能分析、崩溃分析,提供最丰富的维度来监控应用性能,及时发现问题并定位问题。提供网络请求响应、页面加载时长、启动速度、JS 错误数等应用关键性能指标分析,同时从设备、平台、版本、地域多个维度分析应用性能的影响因素。通过各种丰富的图表和报告,帮助您实时掌控用户体验健康状态。

  • 性能优

    支持大并发量的监控数据上报,及时响应,并提供分钟级和秒级刷新频率的实时大盘。

  • 时效性高

    支持自动化实时监控,可视化呈现应用性能监控数据大盘,帮助用户实时了解应用的运行状态。

  • 诊断迅速

    结合网络请求数据分析、页面加载性能、JS 异常监控等功能,可迅速进行业务故障排查,将问题根源定位的时间提升至秒级。

应用场景

  • 网络性能问题定位

    通过网络全链路数据监控,及时发现网络问题,定位故障链路问题节点,辅助用户进行网络诊断。

  • 页面性能问题定位

    通过对页面加载时长指标进行监控,发现慢加载页面,从而定位问题页面,帮助技术人员进行问题排查。

  • 应用异常诊断

    帮助应用运维人员快速定位、分析应用异常,迅速发现性能瓶颈,保证业务稳定性。例如,当用户反馈页面加载较慢时,可通过网络分析、页面分析等去定位是网络问题、资源加载问题,还是页面解析问题,问题是否与用户的设备、所在地域有关系等。

  • 提升用户体验

    基于海量实时日志分析和处理服务,对当前线上所有真实用户的访问情况进行实时监控,快速获取应用的用户访问情况,及时诊断应用异常,并快速修复,保证用户体验。

 

智能投放(Mobile Content Delivery Platform,简称 MCDP)组件提供 App 内的个性化广告投放能力,支持针对定向人群进行个性化广告投放,帮助 App 运营人员精准、及时触达用户,实现留存、促活、增长业务的目标。同时支持一次广告投放搭配多套投放素材,系统根据广告投放效果进行自动调优,让广告投放的流量效果最佳,无需人工干预,降低运营成本,有效提升运营效果。

智能投放简介

产品优势

  • 告别运营排期

    MCDP 为一站式智能运营管理平台,支持活动人群、营销资源以及营销动作的一站式配置,并提供营销数据看板。App 运营人员可独立完成营销流程,无需依赖研发人员,即可自主创建并执行活动计划,操作简单快速,从而告别长时间的运营排期。

  • 灵活定制投放人群

    MCDP 整合了移动分析组件(MAS)的用户分群能力,可根据客户端用户的属性或行为来锁定活动的目标客群,同时也支持手动创建投放人群。

  • 支持高并发调用

    MCDP 支持 1000 次/秒的并发调用(服务器为 4C8G,即 4 个 CPU,8 GB 内存),投放效果稳定。

产品功能

5

MCDP 系统框架如上图所示,作为一站式智能运营管理平台,MCDP 集活动创建、执行、管理和反馈为一体,产品功能如下:

  • 活动管理

    • 提供活动单元 – 活动的两级管理方式,支持更灵活、更复杂的营销活动的开展。

    • 支持创建主动营销和互动营销 2 种类型的营销投放活动。

    • 支持在一个活动内同时添加广告投放和消息推送 2 种营销动作。

    • 支持在一个流程内完成多个广告的投放配置,活动配置效率得到显著提高。

    • 支持投放和推送的疲劳度策略,为用户体验保驾护航,也为多个活动的并行上线提供了实现基础。

    • 支持自定义投放规则,实现灵活的灰度投放。

  • 人群管理

    创建活动投放的目标人群,或直接调用移动分析组件的人群,根据用户行为或属性筛选活动受众,进行定向广告投放。

  • 展位管理

    可视化地完成对一个展位的创建和管理,无需开发客户端代码,即可创建不同样式、位置、高度以及内容类型的展位,降低开发时间和成本。 提供展位大盘,实时监控展位资源的使用情况,以便您调整展位资源的分配。

  • 素材管理

    提供在线素材库,支持多种素材类型。营销活动可直接调用素材库中的资源作为广告投放的物料,为连续性的活动创建过程提升配置效率。多人合作的工作模式,有效提升人效。

  • 推送管理

    推送管理用于对推送的疲劳度进行配置。

  • 活动效果分析

    实现 T+1 的统计活动的营销数据,多维评估活动效果,运营情况一目了然。

应用场景

  • 主动营销场景

    某银行实施一个以促活拉新为目的的营销活动,活动主题为“线上支付周三单单享折扣”,并在每周三进行一年期的循环投放。针对不同的人群,投放不同的物料。

    • 已开卡并且已开通线上支付功能的用户:准备 A 活动(向用户提供线上支付笔笔享X折权益)。通过 MCDP 广告投放(App 首页腰封轮播广告)的方式触达用户。

    • 已开卡且未开通线上支付功能的用户:准备 B 活动(向用户提供新开通线上支付得三张优惠券,并享受线上支付笔笔享X折权益)。通过 MCDP 广告投放(App 首页腰封轮播广告和开屏广告)的方式触达用户。

  • 互动营销场景

    对最近一个月内登录过 App 的用户,用户在活动期内完成连续 3 天登录,对用户推送“活跃用户送积分”活动的消息。

消息推送服务(Message Push Service,简称 MPS)是移动开发平台 mPaaS 提供的专业的移动消息推送方案,针对不同的场景推出多种推送类型,满足您的个性化推送需求。为了提升推送的到达率,mPaaS 在 MPS 中集成了华为、小米等厂商的推送功能,在提供控制台快速推送能力的同时,也提供了服务端接入方案,方便用户快速集成移动终端推送功能,与 App 用户保持互动,从而有效地提高用户留存率,提升用户体验。

功能特性

可通过 MPS 发起多种类型的消息推送,推送通道支持自建通道和厂商通道,推送方式支持控制台页面推送和 API 推送,基于实际业务场景,选择合适的推送类型、推送通道以及推送方式。

MPS 核心功能如下:

  • 多种推送方式:可以精准推送消息给自定义目标用户群体、单个用户、全部用户等多种方式,并可以从移动推送服务控制台页面发送消息,也可以利用 API 接口发送消息。

  • 自定义消息有效期:若初次下发消息时设备未在线,那么在消息有效期内,设备建连或者发起用户绑定均可触发消息再次下行,确保消息最终送达目标用户。

  • 不同推送目标类型:可以建立设备与登录用户的对应关系,基于设备标识或用户标识推送消息。

  • 个性化消息模板:通过模板管理页面,您可以配置个性化模板,满足业务的个性化推送需求。

  • 使用分析:基于客户端埋点上报数据,在平台、版本、推送通道、推送类型、时间等维度上,对推送数据进行统计分析,生成分析报表,可展示分钟级别的统计结果。

  • 推送配置:通过推送配置页面,配置证书,您可以选择 iOS 设备推送所对应的 APNs 网关。

  • 推送通道配置:接入厂商推送通道,集成华为、小米等厂商通道推送功能,提升推送到达率。

  • 密钥管理:MPS 的所有对外接口都需要对请求进行签名,保证了业务的安全性,提供了密钥配置页面供用户配置自己的密钥。同时,提供消息回执功能,以便追踪消息的投递结果。

原理框架

MPS 推送服务为 mPaaS 体系内直接与客户端通讯的核心必备基础组件之一,其基础原理为基于 TCP 长连接通道或者手机厂商推送通道进行 消息通知 相关业务数据传输。

客户端通过使用 mPaaS 移动网关服务(MGS),调用远程过程调用(Remote Procedure Call,简称 RPC)网关进行设备注册、用户绑定以及厂商通道的关系绑定,实现基于设备维度和用户维度的消息推送。按照既定规范采集和上传客户端行为日志埋点,后端实时统计分析推送数据,生成统计报表。MPS 同时支持 API 推送与控制台页面推送,您可以在自己的服务端根据业务逻辑通过 API 调用推送个性化消息,也可以通过控制台页面直接推送消息。为了提升消息到达率,MPS 支持接入华为、小米、FCM 和 APNs 等推送通道,并对后端业务系统保持透明,可让业务系统专注于完成业务功能,无需关注终端机型。

组件优势

MPS 具备以下优势:

  • 快速稳定:消息下发速度快,保证稳定到达。

  • 接入简单:降低接入成本,更高效。

  • 量化推送效果:集成推送数据统计,更智能地分析消息送达率,打开率,明确推送效果。

  • 精准个性化推送

    • 可以向单个用户、自定义用户分组等各种维度精准推送个性化信息。

    • 提供控制台推送页面推送,满足简单的推送需求。同时,也提供服务端接入方案,满足更为复杂的需求。

    • 提供消息回执,供您追踪消息下发结果,有效提升用户留存率跟活跃度。

    • 建立设备标识与 App 用户体系的对应关系,可把 App 用户名作为消息接收者直接发送消息,无论用户在哪台设备登录信息都能准确送达。

应用场景

消息推送的典型应用场景如下:

  • 营销活动

    向用户推送针对性的消息,包括营销活动、业务提醒等,以提升用户粘度。App 通过调用消息推送 API,对目标用户进行定向消息推送,以更主动的方式触达更多用户,吸引用户消费,从而提升最终营销活动转化效果。

  • 系统通知

    按照 App 服务端业务逻辑指定推送人群,直接将消息推送给目标设备。

针对不同应用场景,MPS 提供以下几种推送方式:

  • 极简推送(Simple Push):针对单个用户或设备快速推送消息,配置简单。

  • 模板推送(Template Push):针对单个用户或设备推送消息,可指定消息模板,消息正文由替换模板占位符得到。

  • 批量推送(Multiple Push):针对大量设备或者用户推送消息,可指定消息模板,在配置文件中针对不同设备或用户设置不同的占位符变量值。

  • 群发推送(Broadcast Push):针对全网设备进行推送,可指定消息模板,消息正文由替换模板占位符得到。

 

音视频通话组件( Mobile Real-Time Communication,简称 MRTC)是 mPaaS 提供的音频、视频通话组件。该组件功能丰富,提供纯语音通话和视频通话功能,支持 PC、移动端、IoT 设备等多终端接入。音视频通话可实现一对一通话及多人会议,通话过程中支持屏幕录制、屏幕共享、截图等功能,同时支持即时文字消息和文件传输。此外,支持实时语音识别,能够识别对端的语音确认,辅助本端判断对端的意向;点播功能可实现在视频通话过程中,播放视频、PPT 等多种提示画面。

音视频通话具有安全性高的特点,端到端全链路加密,符合国密标准,视频录制传输及存储均进行加密。

功能特点

  • 视频通话

    • 多种参与模式:支持一对一视频通话及多人视频通话。

    • 多平台:支持 iOS、Android、PC Web、H5 以及小程序。

    • 多端互通:支持手机、PC、IoT 设备之间互联互通。

    • 会话保持:网络短暂异常、网络切换时,业务流程不中断,保持会话的持续性。

    • 自定义视频规格、自适应视频规格:支持自定义宽、高、最大帧率、最大码率,并能在上限范围内根据网络状况自适应调整视频规格。

  • 通话录制

    • 多粒度录制控制:纯语音录制、纯视频录制、音视频混合录制、一人录制、两人录制、多人录制。

    • 多端录制:根据安全要求,既可以在坐席侧录制,也可以在服务端录制。

    • 多种画面组合模式:支持画中画、九宫格模式。

    • 叠加水印:支持实时叠加文字、图片水印、时间戳,以防篡改。

    • 多种存储系统:支持 NAS、OSS、AFTS、本地文件系统。

    • 多格式:支持多种常见格式,包括 FLV、MP4 等。

  • 数据通信

    • 即时通讯:支持简单的文字消息,方便在视频通话前进行沟通。

    • 文件传输:上传文件后,传输文件链接到对端,供对端下载获取文件。

    • 命令透传:为业务提供透明可靠的命令传输通道。

  • 自动化和智能化

    • 自动语音风险提示:自动播报风险提示等内容,代替人工说明。

    • 视频点播:在视频通话过程中,播放视频、PPT 等风险提示画面。

    • 自动纪要:实时识别视频通话的语音内容,并按照时间分角色交替文字记录对话内容。

    • 自动确认:识别客户对风险提示的语音确认,辅助坐席判断客户的意向。

  • 增强功能

    • 屏幕共享:将本端的屏幕内容投送到其他端。

    • 截图:支持远程控制摄像头拍照、本端截图。

  • 系统转接

    • 旁路直播:云端混音合图,转接直播系统。支持推流到 CDN、第三方直播平台。

产品优势

  • 高安全性

    • 动态加签验签。

    • 端到端全链路加密,符合国密标准。

    • OpenAPI 动态密钥鉴权。

    • 录制加密传输、存储。

  • 弱网环境下视频质量自适应

    • 根据网络丢包类型、丢包率、RTT、网络抖动评估,来准确的评估网络有效带宽。

    • 经过优化的视频质量自适应算法,视频清晰度、流畅度、尺寸可随目标码率实时变化。

    • 优先保证感兴趣区域的视频质量。

  • 高可靠的媒体流和信令传输

    • 实时流媒体传输平台,确保传输稳定。

    • 冗余链路和优选,动态切换。

    • 信令在节点到节点、端到端实现了双层高可靠机制,既降低了时延,又提高了可靠性,使可靠性达到了 99.95%。

  • 低时延

    • 超低时延,远程操控领域可达到 200 ms。

    • 快速对焦。

    • 改进的 FEC 算法,抗丢包 40%。

    • H.264-highprofile 技术,可减少高达 50% 的带宽消耗。

  • 多端接入

    • 支持 PC、手机、Pad、小程序、IoT 设备等多终端接入,不同终端和 App 之间能够互通。

  • 功能丰富

    • 双录:云端双向录制、多粒度、多格式、个性化水印、多种存储方式。

    • 智能坐席:自动语音风险提示、视频点播、自动纪要。

  • 接口简洁,接入方便

    • 提供轻量版本,便于接入。

    • 已有业务最快接入纪录:一周开发上线。

产品架构

音视频通话的产品架构如下:

音视频 - 产品架构图

音视频通话的系统架构如下:

音视频 - 系统架构图

  • 音视频 SDK:客户端 SDK,现有支持 Android、iOS、PC Web、小程序、Linux 以及 Windows。

  • 信令服务:负责信令连接管理、信令转发、房间管理、生命周期维护。

  • master:均衡调度服务器,负责媒体服务器的均衡调度、存活管理。

  • rtcmcu:媒体转发服务,负责媒体流接收、转发、处理、状态维护。

  • rtcrecorder:录制服务,负责录制存储。

  • rtcvod:点播服务,负责音视频点播。

移动网关服务(Mobile Gateway Service,MGS)是移动开发平台(mPaaS)提供的连接移动客户端与服务端的组件产品。该组件简化了移动端与服务端的数据协议和通讯协议,能够显著提升开发效率和网络通讯效率。

功能特点

移动网关是连接移动客户端跟服务端的桥梁,移动客户端通过网关来访问后台服务接口。移动网关能够:

  • 自动生成客户端的 RPC 调用代码,用户不需要关心网络通信、协议以及使用的数据格式。

  • 将服务端返回的数据自动反解生成 Objective-C 对象,无需额外编码。

  • 提供数据压缩、缓存等增强服务。

  • 统一进行异常处理,如弹出对话框、Toast 提示框等。

  • 支持 RPC 拦截器,实现定制化的请求与处理。

  • 实行统一的安全加密机制和防篡改的请求签名验证机制。

  • 限流管控,保护后台服务器。

价值优势

移动网关服务的优势在于:

  • 简单配置即可适配多种终端,连接异构的后端服务。

  • 自动生成移动端 SDK,实现前后端分离,提升开发效率。

  • 支持服务注册、发现与管控,实现服务聚合与集成,降低管理成本和安全风险。

  • 提供优化后的数据协议与通讯协议,提高网络通讯质量和效率。

应用场景

移动网关服务的应用场景如下:

  • 开放移动服务能力

    随着移动互联网、普惠金融的迅猛发展,企业越来越迫切地希望将现有成熟的后端服务开放出去。接入移动网关服务,无需额外工作,即可形成移动服务能力。

  • 一套服务,多端输出

    移动互联时代,服务需要支持多样化的终端设备,这往往极大地增加了系统复杂性。企业只需在移动网关中定义服务,便能支持多种终端接入。

  • 异构服务,建立标准统一的对外服务接口

    企业往往存在多种语言和结构的后端服务,只需遵循一定的标准接入移动网关,就可以对外开放标准统一的服务接口。

数据同步是 mPaaS 平台的一个核心基础服务组件。数据同步源自蚂蚁集团内面向移动应用、从服务端到客户端进行海量数据推送的全链路解决方案 — SYNC。该组件提供了一个安全的基于传输控制协议(Transmission Control Protocol,简称 TCP)和安全套接层(Secure Sockets Layer,简称 SSL)的数据通道,能够及时、准确、有序地将服务器端的业务数据主动地同步(SYNC)到客户端 App。

传统的远程过程调用(Remote Procedure Call,简称 RPC)已立足互联网行业几十年,也能满足绝大部分业务场景和功能需求。但在现阶段,随着移动互联网的全面普及和发展,无论是 App 的规模还是用户对于 App 的要求都已进入了一个新的阶段。传统的 RPC 请求因其自身的特性,存在许多的不足:

  • 客户端在特定的场景下需要调用 RPC 请求来获取最新的数据,而服务端(云端)实际没有或仅有少量数据发生变化。

  • 在客户端启动时,不同的业务模块、业务功能因设计上的独立,需要分别进行 RPC 请求来完成各自业务的数据拉取。

  • 客户端无法及时感知服务端发生的数据变化,只能通过定时轮询 RPC 接口的方式来刷新数据。

  • 传统 RPC 大多基于 HTTP(S) 的短连接进行数据交互,连接上即使使用 keepalive 等特性也无法长期保持连接,无法做到链路持续复用。请求创建连接、证书交换、加解密等对网络耗时及性能都会带来不小的损耗。

为改善或解决上述问题,数据同步应运而生。

1

功能特性

数据同步具备以下特性:

  • 可靠同步

    针对业务要求的 QoS(Quality of Service)等级为必达的业务场景而言,数据同步保证只要用户在该数据有效期内活跃并且匹配业务推送要求的条件(如客户端版本号、操作系统类型等维度),就一定让客户端同步到业务推送的数据。

  • 增量有序

    数据同步保证同一个通道内到达客户端的消息顺序一定是与业务服务器调用数据同步服务器的顺序一致,并且所有消息以增量方式同步至客户端。

  • 高实时性

    当客户端连接的网络状况良好时,数据同步可以保证非常高的推送实时性,消息推送耗时几乎是纯网络传输的耗时(1s 之内送达)。

基本原理

类似于 MySQL 的 binlog 机制,数据同步服务器和客户端 SDK 之间传递的基本数据单元为 oplog,当业务需要同步一个变更数据到指定的用户或设备时,业务调用数据同步接口,数据同步服务端会将业务需要同步的数据变更包装为一个 oplog 持久化到数据库,然后当客户端在线的时候把 oplog 推送给客户端。每个 oplog 拥有一个唯一的 oplog id,oplog id 在确定的用户、确定的业务范围内保证唯一并且单调递增(按调用顺序)。数据同步服务端会按照 oplog id 从小到大的顺序把每一条 oplog 都推送至客户端。数据同步服务端和客户端都会记录客户端已经收到的最大 oplog id,称为同步点(亦可以被理解成数据版本号)。

1

价值优势

  • 合并推送

    客户端初始化成功时,服务端可一次性推送多个业务数据,减少不同业务的请求。

  • 增量推送

    只在有增量数据时才推送业务数据,可有效减少冗余数据的传输,降低网络成本。

  • 减少请求

    在没有增量数据时,不会消耗请求成本,减少业务的冗余请求。

  • 提高时效

    当服务端发生数据变化时,可在最短时间内将变化数据直接推送至客户端,无需等待客户端请求。

  • 提升体验

    数据无感知推送,在渲染客户端界面之前,数据已到位,降低了用户等待时间。

使用场景

数据同步可应用于客户端内需要实时推送数据的业务场景,如转账结果推送、支付结果推送、消息中心等。您可以通过以下场景对数据同步的能力有更深入了解。

  • 在即时通讯 App 中,数据同步提供增量、可靠的消息触达能力,将聊天消息按发送方的发送顺序,有序推送至指定用户。

  • 在需要动态更新配置的 App 中,数据同步可以动态地将配置信息进行全设备推送。将 App 功能开关、动态参数、动态配置等信息实时推送至指定客户端,或者批量动态地改变 App 在运行期间的业务参数、业务配置。

  • 在支付类 App 中,数据同步能够为交易数据的在线推送提供安全数据通道,保证在线 App 可实时接收推送数据。同时数据同步还能够提供数据持久化能力,使 App 在下一次上线时收到不在线期间的推送数据。

 

mPaaS 统一组件库(AntUI)以标准化的视觉规范为基础,将抽象的视觉规范概念转化为控件实体。作为开发人员,通过使用统一组件库,可以在接入控件时,实现客户端视觉规范的统一。

统一组件库架构

AntUI 的整体架构类似于积木搭建,由下至上构建出 AntUI 统一控件体系:

AntUI

由下而上的构架层级及其描述如下表所示:

构架层级

描述

基础层(Foundation)

视觉规范单元化的体现,构建 AntUI 体系的基础,主要包含原子资源、原子控件和 Iconfont 图标。基础层是由视觉规范最小的单元构建。

通用层(Common)

AntUI 的核心统一模块,即业务方最常用的统一控件模块,包含通用资源、基础控件和样式管理器。通过对基础层的组合和视觉化应用而构建出通用层,通用层可以应用在客户端所有常见的场景。

场景层(Scene)

按照分场景的方式,构建具有场景特点的控件集合,比如资金控件、商家控件、社交控件等。由于 mPaaS 是一个超级 App,其体量决定了很多业务需要有自己的个性化处理。因此,统一组件库搭建了场景层,按照这些场景在通用层的基础上构建处理业务的个性化控件。

应用层(Application)

应用层提供平台差异化处理和 H5 容器支持等能力,解决了统一和平台个性化之间的矛盾点。原子、组合和场景成为 AntUI 构建的基础,但在实际应用中,需要同时兼顾到 Android、iOS 和 H5 三个方面的需求。因此,统一组件库构建出一些平台个性化和差异化的接口,即应用层。

基础层(Foundation)

基础层是视觉规范单元化的体现,构建 AntUI 体系的基础,主要包含原子资源、原子控件和 Iconfont 图标。

  • 原子资源

    将控件使用的颜色、大小、间距等资源进行原子化定义,保证其唯一性,比如颜色红黄蓝,字号 123 等。

  • 原子控件

    将平台框架自带控件进行包装,构建一套基本的原子控件库。

  • Iconfont 图标

    收集常用场景的图标,并构建 Iconfont 格式,提供一套可用的控件图标库。

通用层(Common)

通用层是 AntUI 的核心统一模块,即业务方最常用的统一控件模块,包含通用资源、基础控件和样式管理器。

  • 通用资源

    将原子化资源按照使用场景做二次定义,比如标题颜色、内容颜色、链接色等。

  • 基础控件

    对视觉稿定义的控件进行一对一的视觉还原,保持 Android 和 iOS 两个平台的命名和实现一致性,便于客户端开发使用。

  • 样式管理器

    对样式进行抽象定义,并统一在管理器内部实现对其的管理,可以实现特定控件在多套皮肤间更换。样式抽象通过增量定义的方式实现,所以只需要关注业务需要的部分元素样式。

场景层(Scene)

场景层按照分场景的方式,构建具有场景特点的控件集合,比如资金控件、商家控件、社交控件等。

应用层(Application)

应用层提供平台差异化处理和 H5 容器支持等能力,解决了统一和平台个性化之间的矛盾点。

Android 和 iOS 平台在视觉规范上存在差异,以 actionsheet 为例,AntUI 根据平台对其做了不同处理:

  • 对 iOS 平台,保持底部浮出。

  • 对 Android 平台,则采用中间列表弹窗方式处理。

H5 会有很多差异的场景出现比如弹窗、标题栏等。为了让 H5 部分在视觉体验上保持平台特点,统一组件库对 H5 容器定义了统一的 JSAPI,方便唤起对应的平台控件,实现 H5 页面在 Android 和 iOS 平台上的差异化处理。

联动

为减少设计和开发人员之间的沟通成本、避免重复的控件开发工作和视觉设计,统一组件库(AntUI)聚合完成了开发和视觉工作。

image

设计师制定规范,开发解释规范成为控件,完整的开发指南便于开发实现,形成一站式的控件体系。

  • 通过统一的命名实现开发和设计的统一认知,更多关于命名规范。参见本文的 组件规范和原则。

  • 通过设计板实现设计人员对已有控件的认知,仅需要拖拽就可以搭建出页面基本结构。

  • 利用门户聚合开发文档和视觉规范,并提供 Demo 下载,可更加直观地查看控件视觉效果。

组件规范和原则

  • 命名风格

    Android 和 iOS 两个平台的同类控件命名需完全一样,控件命名以 AU 为前缀,控件自定义属性全部采用驼峰命名。

    注意

    某些组件可能存在平台差异,一个平台需要实现,而另外一个平台不需要实现。

  • 基础控件与视觉/交互规范匹配

    • 规范中没有的控件不能放入标准控件中。

    • 规范中没有但已经在多处使用的控件应放入候选控件集合中。

    • 不强制某一规范必须实现为单个控件,例如标题栏规范。

  • 易用性

    • 与 commonui 不同的是,不对系统控件再做简单封装(如 APImageView, APTextView),需要用系统控件时,推荐使用原生控件。

    • 命名一定要准确,无二意性。

    • 类似功能在不同控件中应保持一致。

    • 尊重用户习惯。

  • 扩展性

    • 控件功能中不要使用硬编码,比如切换标签个数支持动态更改。

    • 部分控件要提供外部修改布局功能,如一些对话框,导航条等。

  • 新颖性

    可尝试使用最新的平台功能,如 Android 的 recycleview。

H5 容器是一款移动端 Hybrid 解决方案 SDK(Nebula SDK)。提供了良好的外部扩展功能,拥有功能插件化、事件机制、JSAPI 定制和 H5App 推送更新管理能力。

功能

H5 容器组件提供以下功能:

  • 加载 H5 页面,并按照会话(Session)的概念管理各个页面。

  • 提供丰富的内置 JSAPI,实现如页面推送(push)或页面弹窗(pop)、标题设置等功能。

  • 支持用户自定义 JSAPI 和插件功能,扩展业务需求。

  • 接入实时发布(Mobile Delivery Service,MDS)平台后,方便管理离线包。

  • Android 使用 UCWebView,拥有解决系统级 WebView Crash 的能力,内存管理更合理, 网络加载提升更快,兼容性更好。彻底告别了在 Android 下兼容不同 WebView 的问题。

特点

H5 容器在以下方面有着出众而强大的特点。

优异的稳定性

  • 经过亿级用户考验,崩溃率、ANR 率(Application Not Responding,应用程序无响应)以及其他稳定性指标有保障。

  • Android 平台基于 UCWebView 深度定制,崩溃率和 ANR 率远低于系统 WebView,拥有解决系统 WebView 问题的能力。

强大的离线包能力

  • 强大的离线包统一推包平台:通过 MDS 推包平台,能够迅速将离线包推送到客户端,保证客户端数据在短时间能够获得最新同步。

  • 预置离线包:针对特殊场景,支持在客户端预置,提高打开效率。

广泛的生态基础

支持蚂蚁内部接入,并接入了全部的蚂蚁 App,拥有稳定的生态基础。

Nebula

 

传统的 H5 技术容易受到网络环境影响,因而降低 H5 页面的性能。通过使用离线包,可以解决该问题,同时保留 H5 的优点。

离线包 是将包括 HTML、JavaScript、CSS 等页面内静态资源打包到一个压缩包内。预先下载该离线包到本地,然后通过客户端打开,直接从本地加载离线包,从而最大程度地摆脱网络环境对 H5 页面的影响。

使用 H5 离线包可以给您带来以下优势:

  • 提升用户体验:通过离线包的方式把页面内静态资源嵌入到应用中并发布,当用户第一次开启应用的时候,就无需依赖网络环境下载该资源,而是马上开始使用该应用。

  • 实现动态更新:在推出新版本或是紧急发布的时候,您可以把修改的资源放入离线包,通过更新配置让应用自动下载更新。因此,您无需通过应用商店审核,就能让用户及早接收更新。

离线包原理

您将从以下方面了解离线包原理:

  • 离线包结构

  • 离线包类型

  • 渲染过程

离线包结构

离线包是一个 .amr 格式的压缩文件,将后缀 amr 改成 zip 解压缩后,可以看到其中包含了 HTML 资源和 JavaScript 代码等。待 H5 容器加载后,这些资源和代码能在 WebView 内渲染。

以 iOS 系统为例,下图显示了一般资源包的目录结构:

  • 一级目录:一般资源包的 ID,如 20150901

  • 二级目录及子目录即为业务自定义的资源文件。建议所有的前端文件最好保存在一个统一的目录下,目录名可自定义,如 /www,并设定当前离线包默认打开的主入口文件,如 /www/index.html

    xxx

离线包类型

通常,在 H5 的开发过程中,会存在使用一些基础通用库的情况,比如 zepto,fastclick 等。在 App 中的 WebView,有时候缓存不可靠,曾经发现有机型在退出后,缓存自动失效。为了进一步提升 H5 页面性能,使用全局离线包,将一系列的通用资源打成一个特殊的 App 包,下发到客户端。

离线包可以分为以下类型:

  • 全局离线包:包含公共的资源,可供多个应用共同使用。

  • 私有离线包:只可以被某个应用单独使用。

使用全局离线包后,在访问 H5 的时候,都会尝试在这个包尝试读取。如果该离线包里有对应资源的时候,直接从该离线包里取,而不通过网络。因此,全局离线包的机制主要是为了解决对于通用库的使用。

由于要保证离线包的客户端覆盖率以及足够的通用性,此包一般的更新周期至少为 1 个月,并且严格控制离线包的大小。

渲染过程

当 H5 容器发出资源请求时,其访问本地资源或线上资源所使用的 URL 是一致的。

H5 容器会先截获该请求,截获请求后,发生如下情况:

  • 如果本地有资源可以满足该请求的话,H5 容器会使用本地资源。

  • 如果没有可以满足请求的本地资源,H5 容器会使用线上资源。

因此,无论资源是在本地或者是线上,WebView 都是无感知的。

离线包的下载取决于创建离线包时的配置:

  • 如果 下载时机 配置为 仅 WiFi,则只有在 WiFi 网络时会在后台自动下载离线包。

  • 如果 下载时机 配置为 所有网络都下载,则在非 WiFi 网络时会消耗用户流量自动下载,慎用。

  • 如果当前用户点击 APP 时,离线包尚未下载完毕,则会跳转至 fallback 地址,显示在线页面。fallback 技术用于应对离线包未下载完毕的场景。每个离线包发布时,都会同步在 CDN 发布一个对应的线上版本,目录结构和离线包结构一致。fallback 地址会随离线包信息下发到本地。在离线包未下载完毕的场景下,客户端会拦截页面请求,转向对应的 CDN 地址,实现在线页面和离线页面随时切换。

离线包简介

离线包运行模式

要打开离线包,您需要完成以下步骤:

  1. 请求包信息:从服务端请求离线包信息存储到本地数据库的过程。离线包信息包括离线包的下载地址、离线包版本号等。

  2. 下载离线包:把离线包从服务端下载到手机。

  3. 安装离线包:下载目录,拷贝到手机安装目录。

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

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

相关文章

Docker Redis Debian服务器版

1.使用官方安装脚本自动安装docker 安装命令如下: curl -fsSL https://get.docker.com -o get-docker.shsudo sh get-docker.sh 如果安装提示 -bash sudo command not found 则需要 #update sudo apt-get update sudo apt-get install sudo再执行安装脚本1 安装…

c++中常用库函数

大小写转换 islower/isupper函数 char ch1 A; char ch2 b;//使用islower函数判断字符是否为小写字母 if(islower(ch1)){cout << ch1 << "is a lowercase letter." << end1; } else{cout << ch1 << "is not a lowercase lette…

IntelliJ IDEA(WebStorm、PyCharm、DataGrip等)设置中英文等宽字体,英文为中文的一半(包括标点符号)

1.设置前&#xff08;idea默认字体为 JetBrains Mono&#xff09; 2.设置后&#xff08;楷体&#xff09;

计算机网络常见面试总结

文章目录 1. 计算机网络基础1.1 网络分层模型1. OSI 七层模型是什么&#xff1f;每一层的作用是什么&#xff1f;2.TCP/IP 四层模型是什么&#xff1f;每一层的作用是什么&#xff1f;3. 为什么网络要分层&#xff1f; 1.2 常见网络协议1. 应用层有哪些常见的协议&#xff1f;2…

systemctl start docker报错(code=exited, status=1/FAILURE)

运行systemctl start docker报错内容如下: 输入systemctl status docker.service显示以下内容&#xff1a; 本次启动不起来与docker服务无关 具体解决问题是修改 /etc/docker/daemon.json&#xff0c;vim /etc/docker/daemon.json # 添加如下内容 {"registry-mirrors&qu…

ccf201509-3模板生成系统(list,map,字符串综合运用)

问题描述 成成最近在搭建一个网站&#xff0c;其中一些页面的部分内容来自数据库中不同的数据记录&#xff0c;但是页面的基本结构是相同的。例如&#xff0c;对于展示用户信息的页面&#xff0c;当用户为 Tom 时&#xff0c;网页的源代码是&#xff1a; 而当用户为 Jerry 时…

使用htmlentities()和nl2br()将文本数据正确显示到前台

问题&#xff1a; 在后台textarea里编辑了有一串字符串&#xff0c;虽然在textarea里编辑是有换行效果的&#xff0c;但是数据获取到就只是\n&#xff0c;前端是不认识这个的&#xff0c;正确输出到前台的换行只能是<br/>。 $str "ABCDEFGHIJKLMNOPQ"; echo…

Golang | Leetcode Golang题解之第22题括号生成

题目&#xff1a; 题解&#xff1a; var res []stringfunc generateParenthesis(n int) []string {res make([]string, 0)dfs(n, 0, 0, "")return res }func dfs(n int, lc int, rc int, path string) {if lc n && rc n {res append(res, path)return }…

机器学习-09-图像处理01-理论

总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍机器学习中图像处理技术。 参考 02图像知识 色彩基础知识整理-色相、饱和度、明度、色调 图像特征提取&#xff08;VGG和Resnet特征提取卷积过程详解&#xff09; Python图像处理入门 【人工智能】PythonOpenCV…

微服务学习(黑马)

学习黑马的微服务课程的笔记 导学 微服务架构 认识微服务 SpringCloud spring.io/projects/spring-cloud/ 服务拆分和远程调用 根据订单id查询订单功能 存在的问题 硬编码 eureka注册中心 搭建eureka 服务注册 在order-service中完成服务拉取 Ribbon负载均衡 Nacos注册中心…

水利自动化控制系统平台介绍

水利自动化控制系统平台介绍 在当今社会&#xff0c;水资源的管理和保护日益成为全球关注的重要议题。随着科技的进步和信息化的发展&#xff0c;水利监测系统作为一种集成了现代信息技术、自动化控制技术以及环境监测技术的综合性平台&#xff0c;正在逐步改变传统的水利管理模…

快照技术的基本介绍

目录 一、概述 二、名词解释 三、镜像分离 四、COW 五、ROW 六、参考 一、概述 全球网络存储工业协会 SNIA&#xff08;Storage Networking Industry Association&#xff09;对快照&#xff08;Snapshot&#xff09;的定义是&#xff1a;关于指定数据集合的一个完全可用…

广佛站点导航助手小程序产品使用说明书

一、产品简介 广佛站点导航助手小程序是一款专为广佛地区用户设计的地铁导航工具。通过获取用户的实时位置信息&#xff0c;小程序能够迅速定位并展示离用户最近的三个地铁站点。用户可以通过本小程序轻松查找地铁站点&#xff0c;规划出行路线&#xff0c;提高出行效率。 二、…

Win11 WSL2 install Ubuntu20.04 and Seismic Unix

Win11系统&#xff0c;先启用或关闭Windows功能&#xff0c;勾选“适用于Linux的Windows子系统”和“虚拟机平台”两项 设置wsl默认版本为wsl2&#xff0c;并更新 wsl --list --verbose # 查看安装版本及内容 wsl --set-default-version 2 # 设置wsl默认版本为wsl2 # 已安装…

Debian 安装 Docker

Debian 安装 Docker。 这是官方安装文档 Install Docker Engine on Debian | Docker DocsLearn how to install Docker Engine on Debian. These instructions cover the different installation methods, how to uninstall, and next steps.https://docs.docker.com/engine/i…

计算机网络——抓取icmp包

前言 本博客是博主用于记录计算机网络实验的博客&#xff0c;如果疏忽出现错误&#xff0c;还望各位指正。 抓包 我们是用Wireshark工具来进行抓包的。 ​在安装时候一路打勾安装即可&#xff0c;不过最后那个因为是英文&#xff0c;一定要看清&#xff0c;点了立即重启&am…

mars3d.MaterialType.Image2修改配置面状:图片2的speed数值实现动画效果说明

摘要&#xff1a; mars3d.MaterialType.Image2修改配置面状&#xff1a;图片2的speed数值实现动画效果说明 前提&#xff1a; 1.在示例中&#xff0c;尝试给mars3d.MaterialType.Image2材质的图片加上speed参数&#xff0c;实现动画效果&#xff0c;但是没有看到流动效果说明…

去掉el-date-picker弹窗默认回显当前月份的方法

打开日期弹窗&#xff0c;默认会显示当前月份&#xff0c;如图 会发现加了穿透&#xff1a;&#xff1a;v-deep 样式也不生效 .el-month-table .today .cell {color: pink&#xff1b;font-weight: 400;}要让 popper-class“xclass” :append-to-body“false” 这俩配合着使用…

界面设计【1】-项目的UI设计css

引言&#xff1a; 本篇博客对简单的css html界面设计做了简要介绍 这篇博客主要就是介绍了做横向项目中&#xff0c;CSS界面设计与优化。 界面设计【1】-项目的UI设计css 1. 什么是css?2. css编程demo3. 可视化效果 1. 什么是css? CSS是层叠样式表&#xff08;Cascading S…

每日一题 — 将 x 减到 0 的最小操作数

思路&#xff1a; 题目要求是让我们从数组的最左端和最右端进行操作&#xff0c;这样的话解题的难度大大提升&#xff0c;我们可以用 正难则反 的思想&#xff1a; 题目中要求是减去数组中的数刚好等于X&#xff0c;我们可以转换成 数组中某一段的和等于 数组的总长减去X(sum -…