如何设计一个端计算架构?

本文涉及的产品
简介: 什么是端计算?如何在不额外占用服务端资源的情况下,在客户端解决计算需求?端计算和云计算相比,有哪些优势?本文从设计一个解决埋点热修问题的通用化架构,及其演变乃至解决其他端计算问题的案例,来说明设计一个端计算架构的一般性方法。

1.png

作者 | 技神
来源 | 阿里技术公众号

移动端发展至今,诞生了很多架构用于解决各领域的专有问题。比如针对移动端动态化的Hybrid方案;兼顾动态化和性能的RN、WEEX乃至界面搭建方案;针对热修复的各种Patch方案;还有一些配置、编排等特殊需求的方案。这些方案的核心都是用某种语言描述业务的逻辑方法,描述能力越强大,能够解决的问题越多。脚本语言似乎有着无限的可能性,但是当我们尝试解决某个未知领域的计算问题,对于问题计算的可行性又缺少自信。此外,正确评估各种架构的计算性极限对于我们选型、解决具体问题也是十分重要的。因此需要总结如何设计、评估端计算架构的一般性方法。

一 从解决埋点热修问题理解何为端计算

因众所周知的原因,苹果禁止类似JSPatch的热修复方案上线。对于考拉iOS客户端,大多数问题需要发版解决。通过发版解决数据问题,周期长且持续产生脏数据。对于依赖数据驱动产品迭代的开发方式会产生很大影响。同时,我也在思索是否有一种更敏捷的移动端取数方案,缩短数据试验周期。基于以上目的,埋点热修方案的研发就提上了日程。

虽然我们可以使用JS脚本作为计算载体,但是需要证明埋点热修是否可通过计算修复。

2.jpg

如上图所示,埋点修复其实就是将一个错误的字典计算为一个正确字典的过程。如果满足下面两个条件,则可以修正任何错误的埋点数据:

  • 能够无二义性的识别错误数据。
  • 完备的数据,可以计算出正确的数据。

要满足第一个条件,可以根据字典本身的数据特征、交互特征、当前页面等上下文数据来识别。埋点数据源自服务端返回数据、前端位置及交互和页面上下文。要满足第二个条件,只需要补充上述数据即可。因此接入的数据源是否完备,是决定框架修复能力上限的一个重要的因素。

3.jpg

上面解决了埋点错埋和多埋的问题,但是不能解决埋点漏埋的问题。解决埋点漏埋需要在交互的合适时机,计算好埋点字典传输给SDK。计算的问题上面已经解决。那么只要满足在合适的时机计算,就可以解决埋点漏埋的问题。

4.jpg

综上所诉,如果要修复埋点问题,则需要满足下面三个条件:

  • 能够无二义性的识别错误数据。
  • 完备的数据,可以计算出正确的数据。
  • 需要在合适的时机进行计算。

其实对于错埋和多埋的修复场景,就是在上报SDK前这一时机进行计算。

至此,一个解决埋点热修问题的计算框架原理基本完成。框架主要围绕三件事情展开:

  • 一,向JSContext补充API提供基础计算能力。
  • 二,补充数据源为计算提供物料。
  • 三,补充触发计算的时机。

计算、数据、时机是一个计算框架能力最重要的三个因素。为了进一步说明,下面给出一个修复加购埋点漏埋问题的案例。

5.jpg

随着提供的API、数据以及时机能力增强,该框架可以解决一些线上功能性问题修复。比如:

  • 修复视频多段拍摄存在问题:在进入剪辑编辑器前修改传入的音轨信息,禁用多段拍摄功能,并调整页面相关控件的显示状态。
  • 修复搜索特定关键词,导致富文本渲染出现崩溃:修改下发数据字段,回避崩溃问题。
  • 修复因缺少参数,导致品牌非自营商品搜索请求失败:修改接口的请求体,补充必要数据。
  • 修复SKU切换时某区域数据未刷新问题:在SKU切换后,重置该区域的View的显示状态。

此外,还进行过一些数据实验。比如分析5秒内用户退出APP的原因,UT通道数据丢失指标建立等。

对计算、数据、时机三个维度的补充,框架已经从埋点修复,泛化为一般的端计算框架。通过控制数据,去影响APP的功能。从端计算的角度看JSPatch等热修框架,它的计算、数据层面限制较少,但是修复时机是函数调用级别。相比代码行级别的修复,框架对修复方案有一定的限制。

二 从端计算角度改善DinamicX框架

DinamicX的搭建能力非常强,一般情况下,模板主要从单一数据源取数计算。数据源通常由网络请求下发。

6.jpg

如果期望做一些接口胶水层聚合,或者定制客户端ViewModel的逻辑,可以接入FAAS层对DX的数据源进行重计算。

7.jpg

但是FAAS只能利用服务端侧数据进行计算,从端计算角度看,无法天然使用客户端侧数据进行计算。这样并不适应需要服务端侧和客户端侧数据共同计算的需求。比如有些展示坑位有红点提示,需要点击后让红点消失,或者消失后隔一段时间再次展示。这个需求客户端侧相对好实现一些,坑位点击后本地打标,也不需要消耗服务端资源。服务端也有一些方案,比如点击后发起请求由服务端打标,然后FAAS层根据标记计算数据源展示。或者客户端打标,在请求时回传标记给服务端,然后由FAAS层计算数据源展示。两种服务端方案,本质上类似,都是想办法让服务端侧获取这个标记数据。

不想消耗服务端资源,又想从DX层面实现这个需求,如果看了之前埋点热修的框架方案,很自然的得出下面的解法。

8.jpg

这个方案是可以解决上面的问题,但也有一些设计上的问题。比如纯动态化发版解决有些麻烦,逻辑分散,客户端会有额外的内存、IO操作。回到问题本身,其实我们是期望在DX引擎渲染计算时能够利用服务端侧和客户端侧数据。我通过对DX框架的学习,发现一种更优雅解决该问题的方案。

虽然DX渲染接口上只能使用单一数据源,但是DX提供了DataParser自定义计算表达式机制。我们可以定制一个DataParser,在模板渲染中使用客户端侧数据。这样DX模板其实可以支持多种数据源进行计算。同时DX提供了一个用户上下文,用于参与DataParser和EventHandler的计算。我们可以设计一个DataParser,获取用户上下文中的键值对数据;此外可以设计一个EventHandler用于将键值对数据设置到用户上下文中。用户上下文提供多种生命周期的存储方法,实现页面内DX组件间数据互通,页面间DX组件间数据互通,以及持久化能力。从时机角度看,其实DX可以在事件触发时,执行多个EventHandler。这样可以通过组合执行EventHandler代替类似万能函数的EventHandler实现。使计算更具有灵活性。最终改造后的方案如下。

9.jpg

新方案通过计算和数据两个角度进行了优化。方案不额外占用服务端资源,在DX模板中实现了全部逻辑,同时支持动态发布能力。比较优异的解决了该需求。

三 端计算优势以及未来发展

计算上云目前是趋势。极端的角度看,期望客户端越做越轻,将主要的计算能力放到云上解决。我之前做过类似云游戏的方案,3D游戏这种极端依赖客户端硬件能力的应用也可以上云。随着通讯技术的进一步发展,游戏上云、APP上云将来会有商业化产品出现。虽然趋势如此,但是端上依然有两大优势,是云计算无法替代的:一是算力经济性,二是数据完备性。

从算力经济性角度看,端设备硬件的算力逐渐攀升。一般使用场景,算力其实是过剩的。同时频繁、大数据量的通讯,无论对用户还是运营组织,都是存在成本的。云计算与端计算未来会因经济性和体验,在适用场景上达到一个平衡。这是整体计算经济性最优导致的结果。

从数据完备性角度看,端上采集永远是第一手数据,无论维度还是数据量都较大。这些数据传输,以及在云上还原用户上下文场景都需要巨大的算力。云端获得数据前,需要端上处理、清洗数据。云端数据始终存在人为的信息丢失、修改情况。可计算性依赖数据完备性,另外出于对响应、算力的考虑,有些计算场景下放到端上计算更合适。特别是一些需要大量、复杂用户上下文数据参与的场景。此外,未来隐私合规升级,数据传输到云上会更为谨慎。为了保证一些服务的可持续运行,需要提供端计算的适配方案。

服务端和客户端都满足数据完备性的情况下,如果客户端再提供计算动态性支持,其实选用哪个方案没有本质性区别。例如FAAS服务可以使用云计算实现,也可以使用端计算实现。剩下的是性能、体验、成本以及稳定性等其他方面综合性考虑。

相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
1月前
|
算法 数据挖掘 调度
隐语实训营-第3讲:详解隐私计算框架的架构和技术要点
主要介绍隐语的隐私计算架构,并对每个模块进行拆解、分析,以期望不同使用者找到适合自己的模块,快速入手。
48 4
|
2月前
|
机器学习/深度学习 数据处理 数据安全/隐私保护
|
1月前
|
分布式计算 算法 调度
课3-详解隐私计算框架的架构和技术要点
隐语架构涵盖产品、算法、计算、资源和硬件五层,旨在实现互联互通和跨域管控。产品层包括SecretPad等,简化用户和集成商体验。算法层涉及PSI/PIR、SCQL和联邦学习,提供隐私保护的数据分析和学习。计算层如RayFed、SPU、HEU等,支持分布式计算和密态处理。资源层的KUSCIA用于跨机构任务编排,硬件层涉及FPGA等加速器。互联互通支持黑盒和白盒模式,确保不同平台协作。跨域管控则强调数据流转控制,保护数据权益。
|
5月前
|
缓存 测试技术 数据中心
【计算机架构】计算 CPU 动态功耗 | 集成电路成本 | SPEC 基准测试 | Amdahl 定律 | MIPS 性能指标
【计算机架构】计算 CPU 动态功耗 | 集成电路成本 | SPEC 基准测试 | Amdahl 定律 | MIPS 性能指标
250 0
|
5月前
|
存储 并行计算 编译器
【计算机架构】程序指令计数 | 功耗计算 | 电力功耗 | 安德尔定律(Amdahl‘s Law)
【计算机架构】程序指令计数 | 功耗计算 | 电力功耗 | 安德尔定律(Amdahl‘s Law)
55 1
|
1月前
|
机器学习/深度学习 算法 安全
隐私计算训练营第三讲-详解隐私计算的架构和技术要点
SecretFlow 是一个隐私保护的统一框架,用于数据分析和机器学习,支持MPC、HE、TEE等隐私计算技术。它提供设备抽象、计算图表示和基于图的ML/DL能力,适应数据水平、垂直和混合分割场景。产品层包括SecretPad(快速体验核心能力)和SecretNote(开发工具)。算法层涉及PSI、PIR、数据分析和联邦学习(水平、垂直、混合)。此外,SecretFlow还有YACL密码库和Kusica任务调度框架,Kusica提供轻量化部署、跨域通信和统一API接口。
48 0
|
1月前
|
算法
隐私计算实训营 第1期-详解隐私计算框架的架构和技术要点
本文简要介绍了隐语技术架构的五层结构:产品层、算法层、计算层、资源层和硬件层。每层分别涉及模块功能、定位和人群画像,旨在使不同角色的用户能轻松理解和使用,降低隐私计算的入门难度。此外,隐语产品设计具有开放性和前瞻性,易于集成。
|
1月前
|
存储 机器学习/深度学习 并行计算
阿里云服务器X86计算、Arm计算、GPU/FPGA/ASIC、高性能计算架构区别
在我们选购阿里云服务器的时候,云服务器架构有X86计算、ARM计算、GPU/FPGA/ASIC、弹性裸金属服务器、高性能计算可选,有的用户并不清楚他们之间有何区别,本文主要简单介绍下不同类型的云服务器有何不同,主要特点及适用场景有哪些。
阿里云服务器X86计算、Arm计算、GPU/FPGA/ASIC、高性能计算架构区别
|
3月前
|
弹性计算 资源调度 Cloud Native
融合云计算与分布式系统架构:拥抱数字化时代的技术进化
在当今数字化时代,云计算和分布式系统架构成为企业转型的关键工具。本文将探讨这两项技术的融合,以及它们在提升效率、降低成本和增强可扩展性方面的潜力。通过深入分析云计算和分布式系统架构的原理和优势,我们将看到如何利用这些技术推动企业的数字化转型。
|
4月前
|
存储 机器学习/深度学习 人工智能
极智AI | 一文看懂昇腾达芬奇架构计算单元
本文详细解释了昇腾达芬奇架构中计算单元的架构与计算原理。
172 0