架构是什么?
架构的本质是权衡,是使用合适的成本支撑好公司现有的业务,并且为后续业务的演进预留一定的扩展口。
派单是什么?
派单的本质是车单匹配,建立适合公司当前阶段的匹配策略,完成高效的车单匹配,给公司带来效益的最大化。
初期的派单架构
根据传统的风俗习惯,司机属于一个中高端的职业,出租车司机在大雨磅礴的城市街道穿行,乘客在招手打车,司机可以自由选择自己想拉的乘客,而不是乘客来选择司机。
基于这样的背景,最初的派单模式都是司机选订单模式。系统把订单发送给周边范围的司机,司机自己选择是不是要接单,把主动权交给司机来控制,司机可以根据自己的意愿进行挑单。
这时候的派单架构很简单,订单流量也不大。用户下单后,基于订单的起点位置,找到周边可用的司机,把订单推送给这些司机,司机自行选择是否抢单,谁先抢到算谁的。
演进的派单架构
随着打车用户的增多,原来弱势的需求方,慢慢变得强大。每个用户打车后,如果订单被司机挑来挑去,会浪费用户的打车时间,也会影响系统的派单效率。在行业初期最缺的是司机,当司机的数量慢慢上去,行业就会越来越关注打车需求。
基于这样的背景,司机从原来的选单模式就变成了强制指派模式,不允许司机挑单,系统直接把订单指派给司机。
这时候派单架构就要转变,订单派给哪个司机最合适?每个订单都独立派单还是城市的订单一起批量派单?
如果每个订单都独立派单,司机是公用资源,当多个订单竞争司机时,为了防止司机接单冲突,在技术层面就要做到公用资源的互斥。司机作为公用资源,按照时间顺序,哪个订单先抢到就给哪个。这样当用户下单的流量一旦过大,像上班高峰期全中国达到几十万或者上百万的呼叫,每个呼叫订单都要独占系统资源,就很容易把系统压垮。
再进化的派单架构
每个订单独占资源进行派单,高峰期流量容易把系统压垮,这个多加点机器也可以解决。但是为什么要每个订单独立派单呢?在高峰期司机不足的情况下,订单不管是否独立派单,都要等待新司机的到来才能被派到司机。在没有司机的情况下,订单独立派单和不独立派单一样,没有区别都空轮询一段时间来找司机。
以上说的独立和不独立,都是写给技术人员来看的。对于用户来说,只要能够快速给他找到司机就行,是否独立派单对用户来说就更不重要。
基于这样的背景,现在的派单系统都是基于城市定时进行批量派单,每一次把这个城市所有呼叫的订单全部取出来,然后一起进行派单。
这样做有什么好处呢?
- 减少系统资源的消耗。批量派单每次可以把订单依赖的公用资源进行复用,从而减少订单独立派单时公用资源各自独占的系统消耗。
- 派单的效果可以更优。批量派单可以对一批订单和一批司机进行全局最优的匹配,从而确保这批订单的匹配结果接驾时间最短;订单独立派单只能考虑单个订单视角,无法做到全局最优。
- 系统的稳定性可以更好的控制。批量派单,可以基于机器承载的上限来控制派单的流量,系统扛不住了可以选择优先派价值更高或者收益更大的订单;订单独立派单就无法进行整体的决策。
策略化的派单架构
当订单可以基于城市进行批量派单后,业务对城市的派单策略就会不停的演进。
派单策略从以前按照接驾距离和时间最优的策略,会进一步向公司流水或者利润最大化的策略迭代演进。
流水最大化:每轮派单按照订单流水最大的方式进行匹配。
利润最大化:每轮派单按照收益最大的方式进行匹配。
同时司机和乘客的交互策略也进一步复杂化。
乘客侧: 新增拼车/特惠/专车/加价调度 等等多种形式的产品能力
司机侧: 新增各种冲单奖/补贴策略/接单开关等等。
这个过程技术架构要打好内功,自身的模块化和领域化能力要增强,能够沉淀的底层能力要沉淀,冗余的技术链路要治理,前期野蛮生长的代码要优化。这个时候架构更多的是巩固自身的基座,把基础要打牢,把技术的体系化和规划化要建立起来。
进一步的挑战
随着架构的演进,基于城市进行批量派单,当上海这种大城市,订单流量过大时,批量派单可能单台机器就扛不住这么大的订单流量?
前面说过限流,基于机器的压力上限,进行流量控制,可以保障系统的稳定性,不至于在流量高峰期出现系统宕机的现象。系统进行流量限制,对于业务来说是有损的,当业务强制要求不允许系统进行流量限制时,这样的架构就会成为瓶颈。
在不影响城市派单效果的前提下,最简单的方式就是机器升配,提升机器能够承载更多的需求和运力流量。
另一种方式就是优化架构,把原来单城市批量派单的过程进一步拆分。
- 订单分流:拉取城市所有的订单,把订单按照机器数量平均分成多个批次。
- 每个批次独立去召回司机
- 多个批次订单分成多个任务,并行去召回司机,等任务都完成后,再进行城市最优匹配
- 召回司机: 基于订单起点位置去获取司机,并进行筛选,最终确定可匹配的司机列表。
- 最优匹配: 多个订单和多个司机的组合,进行全局最优匹配,确定最终订单和司机的匹配结果。
派单引擎是一个流程引擎,它的稳定性和性能会直接影响公司的派单效率,派单引擎的业务策略复杂,同时对技术的要求也较高,每个技术人员都要保持对系统很高的敬畏心,才能确保每年派单系统的稳定性