类uber/滴滴分单引擎中应用到的技术原理(2)

author author     2023-02-20     185

关键词:

参考技术A 结合之前文章

-  类Uber/滴滴分单引擎中应用到的技术原理 (1)

回顾上一节,提到了此类‘分单引擎’ 核心需要解决的问题是:完成叫车订单的分配。策略上的核心原则是:“站在全局视角,尽量去满足尽可能多的出行需求,保证乘客的每一个叫车需求都可以更快更确定的被满足,并同时尽力去提升每一个司机的接单效率,让总的接驾距离和时间最短。”

那么,进行合理推断,业务上需要解决的核心问题如下:

- 如何且何时去触发乘客订单和司机之间的匹配计算进而完成派单(除了派单这种模式,何种场景下会使用抢单模式)才能满足乘客乘车需求?

- 考虑不同乘客的订单需求(接乘体验、效率)、司机自身的需求(如,有的司机只想接回家顺路单、司机只在限行区域内行驶、司机只听预约单),那么如何保障在各种业务场景都正确性的前提下,来找目标函数下的最优解?

- 从打分分配过程来看,目标函数考虑的因素不仅考虑乘客与司机之间的导航距离,还会考虑到司机的服务等级分、价格、供需紧张程度等多种因素。那么,如何在效率指标和成本等指标之间做出权衡?

- 在垂直的子场景下,优化子场景的目标,从而间接支撑核心目标,如动态定价、供需调度(基于供需热力图,给司机发空单调度司机到需求密度更好的地区)、分场景派单(机场、火车站的派单距离会长一些,且进行公平派单 - 先来后到的原则)、不同运力层之间互转(运力不足等情况下,快车单给专车)

... ...

可以预见,继续推导下去,需要解决的业务问题还有很多,但尝试对这类‘分单引擎’做一个总结和定位的话,应该有如下几个要点:

- 职责: 在合适的时刻,把合适的订单,分配给合适的司机

- 主要的业务目标: 兼顾业务运营上的需要,保障体验和全局效率最优

    - 猜测来看,从业务运营上,应该会分各类不同的场景,且围绕不同场景,定义出更具体的成本、体验、效率的指标,足见‘分单引擎’是实现业务运营目标的重要抓手

- 系统上的目标 :支撑全国各个城市(跨城)订单最优分配,保障系统对于业务规则类需求和策略类需求能够快速扩展开发落地、系统架构具备根据容量规模的横向扩展能力以及性能保障

    - 逻辑结构上,需要能够将分单的整个过程进行抽象,拆分成相对固定的模块/步骤。围绕模块/步骤,再嵌入可插拔的规则扩展实现。如,

        - 通过规则引擎来支撑上述所需要的为保障分单业务正确性的各类业务规则;

        - 通过策略引擎让算法同学基于统一的同一套数据结构可以按场景去叠加各种寻优策略来找到最优匹配(如,二分图,乘客与司机可以为两个顶点集合,通过计算各种边的权重,以找到图的最大匹配));

    - 核心系统架构上,需要有,

        - 实现‘延迟分单’的定时器

        - 有能够进行全局资源监控和管理的资源管理器 

        - 有对分单计算任务和资源匹配的任务调度器

        - 有用于具体执行分单匹配计算的任务计算节点服务。且在任务执行过程中,可以根据任务计算量,动态决定拆分一个大任务成多个可并行执行的小任务,然后再聚合结果

        - 存储着司机位置、订单数据等高效的索引存储系统

        ... ...

从上图可以看出,一次分单计算的任务类似一次Hadoop 中MapReduce的批量的执行计算任务过程(结合Yarn 资源调度管理来说):

- 定时触发生成的Job中,所有需要匹配计算的订单和司机数据,类似于MR程序要处理的数据;只是真正执行的程序不像MR Jar 那样,可以在Hadoo环境下,执行时再通过HDFS动态加载执行(即移动计算式的方式)。这里,执行的匹配计算逻辑,都预先启动在各个分单计算节点当中;

- 提交的任务根据需要计算的任务负载,从资源管理器匹配可以满足其需求的资源(包括master 机器信息以及可以进行并行执行子任务的Slave 机器信息)。根据任务的大小,如Yarn中所支持的能力(Uber 模式和non-uber 模式),可以实现动态判定对小任务类的匹配逻辑都执行在一个机器资源中并一起顺序执行,而大任务类的匹配计算(订单和司机之间的匹配过滤、打分等逻辑)则由资源管理器预先分配好哪些机器可以用于执行具体的匹配计算任务(包括指定一个Master节点和多个Slave 节点),在Master 节点中可以根据预先配置的分片阈值,拆分成多个分片,在并行执行完之后,再回到Master 节点执行最终的司机派单计算;

- 每个任务计算执行节点,定期上报自己的资源使用情况。Yarn中是通过Container 的抽象概念,综合了CPU、内存等多维度的资源模型;而基于统一的资源管理器和无状态的分单计算节点集群(被资源管理所管理),并结合任务大小自动决策资源分配,将使得资源可以在充分利用的情况下,并支持水平扩容;

springboot启动原理分析

...常解释器)加载SpringBoot内部实现的各种AutoConfiguration模板引擎TemplateAvailabilityProvider(如Freemarker、Thymeleaf、Jsp、Velocity等)总得来说 查看详情

滴滴打车好不好,

...你都不敢冲,你开锤子车。 参考技术B现在用优步似乎比滴滴实惠,可以注册个优步试试操作步骤如下:1.在手机上面下载安装Uber;2.打开之后点击注册;3.填写邮箱名称(用于登陆和找回密码),手机号码(打车过程中的通讯工... 查看详情

滴滴出行跨出国门,再战uber胜算有多大?

...中国用户提供跨境租车服务,该服务预计在2016年内登陆滴滴出行APP,届时滴滴用户可以租赁安飞士、巴吉在机场及市区门店的车辆。 众 查看详情

sharepoint中search的原理!!!!

hi股月关于search的搜索原理,这和普通搜索引擎类似,比如百度。大致过程如下:抓取内容源内容,索引关键字(内容),然后根据用户输入的查询关键字,匹配内容,然后呈现给用户。谢谢。参考技术A和普通的搜索引擎原理一样1... 查看详情

android插件化多开原理|使用插件化技术的恶意应用|插件化的其它风险|应用开发推荐方案

...件化的优点就是可以实现应用的多开,利用该多开虚拟化引擎,用户可以同时登录多个新浪微博;其原理是被多开的应用,不需要安装,被多开的应用运行在虚拟化引擎中,即宿主应用,被多开的应用就是插件应用;虚拟化引擎+应用A与... 查看详情

uber应用分享|使用parquetpageindex加速presto查询

...前,数据量呈快速增长态势,给诸如Presto等查询引擎带来了挑战。Presto作为一种流行的交互式查询引擎,具有可扩展、高性能并可与Hadoop进行平滑集成的特性。随着数据量的增长,Presto需要读取更大的数据块并将... 查看详情

[编程工具]uber上市背后那些开源软件

...resDB——AresDB是Uber开源的一个基于GPU运算的实时分析存储引擎和查询引擎。具备低查询延迟、高数据刷新率和高效内存和磁盘存储管理。AresDB要求CUDAToolkit的支持。Fusion.js——Uber的Web平台团队开发Fusion.js,一个开源的Web框架,用... 查看详情

履约核心引擎低代码化原理与实践

业界,规则引擎是一个非常普遍的技术类工具,也有很多非常优秀的开源工具,例如Drools等,它是一种嵌入在应用程序中的组件,主要解决易变逻辑和业务耦合的问题,把易变的规则从应用程序代码中分离出来,进而提升交付效... 查看详情

我想启动 UBER/LYFT 应用程序以使其从我的应用程序进入前台

】我想启动UBER/LYFT应用程序以使其从我的应用程序进入前台【英文标题】:IwanttostartUBER/LYFTapptogetitintoforegroundfrommyapp【发布时间】:2018-11-1401:47:42【问题描述】:我正在编写一个应用程序,以便在我的应用程序中使用浮动按钮访... 查看详情

原创全文搜索引擎技术原理入门

【原创】全文搜索引擎技术原理入门作者:黑夜路人(heiyeluren/Black)时间:2021/11文档:《全文搜索引擎技术原理入门》-黑夜路人            信息检索(InformationRetrieval)的含义可以是非常广泛... 查看详情

原创全文搜索引擎技术原理入门

【原创】全文搜索引擎技术原理入门作者:黑夜路人(heiyeluren/Black)时间:2021/11文档:《全文搜索引擎技术原理入门》-黑夜路人            信息检索(InformationRetrieval)的含义可以是非常广泛... 查看详情

搜索引擎工作原理解析

本篇文章从整个搜索引擎架构技术大框架方面来学习,搜索引擎工作原理。1搜索引擎基本模块2爬虫网络爬虫(Webcrawler),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本,它们被广泛用于... 查看详情

eeplatpaas整体方案及技术原理

...户管理子系统、企业应用后台配置开发环境、元数据驱动引擎、企业应用分发管理子系统等。核心原理流程图EEPlatPaaS平台的原理,核心是元数据和运行引擎。通过后台配置开发环境定义元数据, 查看详情

滴滴,uber,facebook,这些科技巨头怎样一步步变成了新时代的“万恶资本家”?

...断法被欧盟开出天价罚单。2018年5月,郑州空姐空姐搭乘滴滴顺风车遇害,而短短三个多月后的8月24日浙江乐清女孩赵某又发生同类案件。似乎不知不觉间,我们曾经为之兴奋的、改变我们生活的科技巨头们,突然变成了威胁安... 查看详情

滴滴滴,请看mysql事务的四大特征(acid)的实现原理:晓其原理而通其实现。

一.什么是事务的四特征原子性(Atomicity,或称不可分割性)一致性(Consistency)隔离性(Isolation)持久性(Durability)接下来,我们将对四大特性的具体概念以及其底层实现原理来进行剖析&#x... 查看详情

(高小德用车)高仿滴滴/快的应用源代码

...大批出行类软件。出行类软件大概有下面几种:打车类:滴滴打车、快的打车 专车类:滴滴专车、一号专车、神州专车 拼车类:嘀嗒拼车、51用车、天天用车高德地图开放平台出行类解决方式-乘客端(iOS)描写叙述使用... 查看详情

oc类对象/实例对象/元类解析

参考技术A上一篇文章OC对象占用内存原理(一文彻底搞懂)中我们讲到OC对象本身是一个结构体,这个结构体只有一个isa指针,关于OC对象实际开辟内存原理我们搞清楚了.那么本篇文章就结合runtime来实际探讨一下OC对象方法查找的具体... 查看详情

elasticsearch--1

...0c;简称为ES,ES是一个开源的高扩展的分布式全文搜索引擎,是整个ElasticStack技术栈的核心。它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。1-2全文搜索引... 查看详情