- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
作者:vivo 互联网AI团队- Liu Zuocheng、Zhou Baojian 。
本文根据周保建老师在“2022 vivo开发者大会"现场演讲内容整理而成。公众号回复【2022 VDC】获取互联网技术分会场议题相关资料.
使用基于有限有向图的调度框架,可以控制在线服务中异步调度的流程,但这对分支路径的管理不够友好,随着节点增多,调度流程会越来越复杂而难以控制。因此我们实现了支持分支路径的图调度框架,解决普通图调度框架可扩展性差的问题.
vivo效果广告实时在线服务是提供实时AI算法推荐的服务。在广告投放场景,承载了一天百亿级别数量的请求,支持vivo广告收入。在可用性、可扩展性等方面具有非常高的要求。服务中起到调度作用的模块,上下游依赖特别多,比如特征服务、ABT实验平台、实时数据流、模型计算模块等等。调度模块在请求下游服务的方式都是采用异步的方式。那么我们是怎么管理这么多异步请求的呢?
异步调用已成为系统设计中的主流方法。虽然异步调度提升了系统性能,提升了资源的利用率,但却对系统的可扩展性和可维护性提出了挑战。回忆历史中用过的异步管理方法有以下三种.
面向过程方法 。
树调度 。
有限有向图管理 。
单纯使用 面向过程的方法 ,简单却粗放,随着下游服务增多,代码逻辑中产生大量的callback函数和类使,得系统调度过程繁杂无序,可扩展性和可维护性变差.
树调度方法 ,使得异步调度进入框架调控的新阶段。可扩展性方面较面向过程的方法要好很多。但树结构不能准确描述复杂服务的调用流程.
有限有向图 ,是目前使用最为广泛的方法。扩展性较好,能管理复杂的调用流程。但这是否是一种完美的方法呢?不是的。有限有向图,对图中节点是全路径访问,对分支路径的管理不够友好。因此我们依然要探索新的方法.
为了解释有限有向图在实时在线服务中的局限性,我们以vivo效果广告预估服务的调度流程为例,进行说明。把调度流程经过抽象后,调度流程如左图一样简洁明了,但这只是理想状态.
。
那么现实状况又是什么样子的呢?大家来看,和所有的实时在线服务一样,我们在系统设计时,为了系统健壮,总要和大量的异常和超时做斗争。并且除了异常和超时,系统还需要有兜底逻辑。上一个简洁明了的有限有向图已经不复存在.
为了进一步说明,有限有向图不能完全把控在线服务中异步调度的流程。我们依据刚才展示的流程调度图,做了一个状态转换图。在这个图中,展示了系统中各个状态的流转路径,总数达到了7条之多。有限有向图是一种全路径图调度框架,已经难以适用复杂度不断增长的系统.
全路径图调度框架具体有什么痛点,逼迫让我们去寻找新的方法。具体原因就在这里,有限有向图在落地实践中,使用skip状态变量约束路径。系统在处理一次任务的过程中,不经过的路径上的所有节点状态都会被设置为skip.
全路径的图调度框架中,每增添一个节点,会导致:控制变量数量 +1,状态全集 x2, 复杂度成指数增长。在如此状态下,对复杂系统添加流程或调整流程,就会变成工程师的噩梦。设计开发时必须小心甚微,上线时则如履薄冰.
为了安全开发和提升迭代效率,新的调度方法被迫切地创建出来,那就支持分支路径的图调度框架。它的原理,则是在原有的图调度框架中,添加两处功能,一是加入了分支节点,二是对于图中节点的触发和激活支持“与”激活和“或”激活。是不是像极了逻辑电路呢?
大家是否有疑问,添加两处修改就可以了吗?这样做真的有效吗?其实依据,就来自于我们的《编译原理》里的常见概念和常见规律.
有限有向图,是一种NFA,即不确定的有限自动机。我们都知道,在实践中NFA实现难度很大,它不如DFA简洁和简单。所以结论呼之欲出,支持分支路径的图调度框架,则是把图变成DFA。我们还给它起了新名字,DDAG.
实践是检验真理的唯一标准,我们再通过实际的落地过程看,分支路径调度框架是否满足我们的预期.
我们回忆一下vivo效果广告预估服务的调度流程,那一个充满着异常、超时、兜底逻辑的调用图。为了便于说明,我们把它化简了一下,变成一个流程图,如左图,目前它还是一个全路径的调度图。使用分支路径调度框架改造后,变成右图,图中添加了判断节点,具体路径的走向则由判断逻辑来控制。大量Skip的状态控制变量依然不复存在。图中蓝、青、红分别代表了3条路径,让路径和流程一目了然.
当图与实时在线系统融合在一起的时候,我们发现了分支路径图调度框架更多的提升空间。比如,图的整体的超时、异常管理,图中节点的超时、异常管理,以及复杂图结构的自动化简,会成为我们以后进一步升级的空间.
分支路径图调度框架在vivo效果广告预估服务中做了一次成功的实践。它帮助工程师降低在开发过程中的风险,提速在项目中的迭代效率。让算法预估服务的飞轮越转越快! 。
最后此篇关于分支路径图调度框架在vivo效果广告业务的落地实践的文章就讲到这里了,如果你想了解更多关于分支路径图调度框架在vivo效果广告业务的落地实践的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我做了一个app,这个是按时间间隔存储位置信息并发送到服务器的app服务在后台或前台模式下工作。它在普通的 android 手机上运行良好。顺便说一句,应用程序在 oppo 和 vivo 中运行不佳启
我已经在我的 Android 应用程序中实现了 FCM 推送通知。我在数据有效负载中获得了所有通知 JSON。而且我在 api 上“未添加”“通知”标签。所以在所有状态(前景/背景/杀死)中,我只收到
我在我的应用程序中实现了快捷方式,但这在 VIVO 10(Funtouch OS)中不起作用。请帮我。我已经使用了很多方法但没有成功。 方法1:我正在使用此代码但无法正常工作 @SuppressLin
vivo 今年二月在欧洲商标局(EUIPO)中注册了vivo Watch的商标。微博数码博主 @it 科技站 五月曾曝出该智能手表的外观设计。vivo 近日又有两款智能手表产品通过了国家 3C 认证
数码博主 @数码闲聊站 今日爆料称,vivo 智能手表 vivo Watch 或将于两个月以内发布,其中男款 vivo Watch 采用了 46mm 的圆形表盘,配备彩色 OLED 显示屏,支持心率
我在我的应用程序中更改了我的应用程序图标,当我将我的应用程序更新到mi或vivo手机时,即使我重新启动它或更改主题,启动器中的图标也没有更新。 最佳答案 这可能是由蹩脚的主题管理器引起的。只需更改主题
我希望我的应用程序在 vivo 设备中自动启动,但是当我尝试这样做时,我的应用程序没有显示在列表中。谁能告诉我如何解决这个错误 我已经能够重定向到 vivo 的自动启动 Activity if (B
即使应用程序从堆栈中被杀死,我也想在后台运行服务。此功能在某些设备上运行良好。但是在 oppo 和 vivo 手机中,如果应用程序被杀死,它就不会运行。有什么解决办法吗?如果没有,我该如何打开允许权限
我主要在 Vivo 设备上收到 Resources$NotFoundException。这只发生在 Drawable 资源上。我有从 mdpi 到 xxxhdpi 的所有变体。所有这些都是png。我无
即使应用程序被终止,我也想在后台运行该服务。此功能在某些设备上运行良好。但在 oppo、mi 和 vivo 手机中,如果应用程序被杀死,它就不会运行。我如何为这些设备执行此操作 最佳答案 我在 Opp
在摩托罗拉测试应用程序,三星在应用程序被杀死时工作正常。但是当我在体内测试应用程序时,如果应用程序被破坏,OPPO 将无法工作。 public void onMessageReceived(Remo
我正在使用前台服务来跟踪用户的实时位置。它在现有的 android 设备上运行良好,但在 oppo、vivo、Mi 等品牌中,当设备进入 hibernate 模式时,该应用程序被终止。我也尝试使用 F
我有一个带有 IntentService 的 WakefulBroadcastReceiver,每半小时就会发出警报并做一些事情。我已经使用 setExactAndAllowWhileIdle() 方
我是一名优秀的程序员,十分优秀!