今天很荣幸给大家介绍 58 速运从艰苦创业到成为同城货运行业领头人的整个系统演进过程。
为企业提供成都做网站、成都网站设计、网站优化、营销型网站、竞价托管、品牌运营等营销获客服务。成都创新互联拥有网络营销运营团队,以丰富的互联网营销经验助力企业精准获客,真正落地解决中小企业营销获客难题,做到“让获客更简单”。自创立至今,成功用技术实力解决了企业“网站建设、网络品牌塑造、网络营销”三大难题,同时降低了营销成本,提高了有效客户转化率,获得了众多企业客户的高度认可!
简单来说我们的业务是做同城货运,比如您去买一个大型家具,自己的家用车肯定是装不下的,这时你可能需要找路边的小型面包车或者金杯车来帮你搬运。
一般来讲,很容易遇到黑车,而且价格不标准,我们做的这个行业就是将这种传统的黑车行业进行线上化,在产品形态上可理解为滴滴打车的出租车版。
本次分享内容主要分为4个部分:
创业之初:快速迭代试错
58 速运在 2014 年是作为 58 集团下 20 多个孵化业务中的其中一个,那个时期基本上是平均三个星期一个业务孵化上线,当时有 20 多个业务孵化同时进行。这个时间我们不断的试错,不断去寻找 58 同城新的增长点。
从上图中,大家可以看到,我们所有的服务都是基于一个数据库来运行的,这个系统之间只需要通过一些简单的 tag 标记就可以区分开业务,系统迭代非常快。
对于新孵化的业务,我们增加了一些简单的业务逻辑就能实现这个产品的快速上线,我们在两周内实现了速运用户、商家的 APP 以及后端的产品上线。
派单-石器时代
这时的系统架构是非常简单的,我们称之为“石器时代”,当时所有的订单调度的逻辑放在一个 Jar 包,然后通过 MQTT 服务将订单推送到司机的 APP 上。
当时的订单调度(也是我们最初级的订单调度方案)是一个订单搜索附近的司机,然后由近到远的距离将订单推送出去,司机抢单后即中单。因为在创业阶段,我们需要吸引客户、司机,对于每单都会有补贴。
这个阶段面临的痛点如下:
针对以上痛点,我们做了***次的技术引进——迁库、集群拆分。
***次技术演进:迁库、集群解耦
为什么要迁库?谁痛谁知道!不想受到其他业务小伙伴的影响,就要做到解耦。
一个最简单的方案就是停服,把所有的服务停掉,然后把数据库抽离出来,相对来讲这是成本最简单的。
但是停服会产生的影响:
我们采用的方案:将订单表单独地拆离出来,放在单独的数据库里,两个数据库之间使用双向同步。
双向同步需要解决的问题:
经过多次的迁移,将原有的数据库按照业务划分成了订单库、结算库、配置库和轨迹库等,每个数据库会根据业务量容量的大小来配置数据库物理机的内核、内存,减少成本。
高速发展:稳定、高效
2015 年我们进入了高速发展的阶段,市场上出现了蓝犀牛、1 号货的、云鸟的等多个强劲的竞争对手。各方都是争分夺秒,一个系统、功能,我需要抓紧把它给迭代上来,谁也不能比谁落后。
这个阶段我们存在的问题:
这时我们进行了第二次技术演进,我们称之为“进行了奔跑中的火车换轮子”,我们进行了服务化解耦;缓存、分库分表,提升系统性能;接入大数据平台,进行复杂需求的分析。
第二次技术演进:奔跑中的火车换轮子
派单-铁器时代
我们将所有的系统都按服务模块进行了拆分,比如说结算、充值、推送、司机任务等,现在大概已有 20+ 个服务,每个服务都有独立的数据库,有独立的负责人。
这样就可以做到我自己的代码我自己来写,别人都不允许去插手。
此外我们进行了推送的多通道化,从上图可以看到,我们针对每个司机选取了两种推送通道,同时我们也建议大家在做推送消息时采取这种方案。
拿小米的手机来说,“小米”推送通道的到达率是***的,但小米的通道在华为的手机上,到达率不如“个推”的推送到达率高。
我们就会根据司机的机型来选取一个到达率***的三方通道。同时在设计上不能有单点,假如说小米的通道出现了问题,那我们的服务就不可用了,司机接收不到订单,用户的需求就没法得到满足。
所以我们还有一个自研渠道 TCP 通道,这个 TCP 通道除了和我们三方通道做一个双通道保活外,它还可以做一些数据的上传。
这时的订单调度,被称为探索阶段,初期的距离推送效果有限,谁抢到谁就中单,司机的服务质量我们没有办法去评判,补贴也是大众化的。
所以我们自己研究了一个按象限推送的方法:
分库分表
前面提到数据库性能已经成为瓶颈了,所以这里以一个用户服务给大家讲一下我们的分库分表是怎么做的:
水平拆分比较简单,大家也容易理解,而垂直拆分就是比如说我把一个用户 10 个最常用的属性放到一个组表里,把不常用的属性放到另外一张表里面去,这样可以减少 I/O 的操作,也可以提高整体的产品性能。
在这里水平拆分要重点提一下,就是如果资源允许,水平拆分还是建议分库。
数据库的性能瓶颈也是会受到硬件设备和网络 IO 的影响,如果访问量持续增加,数据库还是会成为瓶颈。
我们的水平拆分有两种方法:
范围法:用户 ID 在 1K 万以下的放到一个库,1K 万~2KW 以上的放到另外一个库,这样切分简单,扩容也方便,但是会存在数据库之间的负载不均匀。
哈希法:根据用户 ID 进行哈希运算,切分简单,整体负载比较均衡,平滑迁移可能是需要我们去解决的难点。
拆分后的问题:
问题分析,“任何脱离业务架构的设计都在耍流氓”:
前端解决方案:
这样我直接通过这个表和 Patition key 进来后先去找一下 uid,这样就可以找到这个 uid 在哪个库,但是增加了一次数据库的查询。
运营侧需求解决方案:
注意这个后台库是千万不能用于现场生产的,因为运营会在上面做一些复杂的慢查询,数据库的响应会非常慢。
到了 2016 年,竞争对手基本上已经被消灭了,58 速运已经成为行业的领头者了,如何使用更少的补贴获取***化的收益?
我们有如下几点反思:
平台补贴是不是真的起到了作用,然后我们到底需要补多少钱才能帮助用户完成订单?
如何去尽量满足用户的需求?每个新用户进入平台是有成本的,一个用户的成本在几十甚至到一百块左右,如何满足用户的需求,让用户持续的留在平台中。
平台的司机良莠不齐,司机的收益应如何分配?
第三次技术演进:战斧项目
我们进行了第三次的技术引进,我们称之为战斧项目,项目的定义:精准、高效。
我们做了以下优化:
智能时代:效率、精准
智能模型训练
上图为智能模型训练图,首先我们会将订单信息、用户信息、司机信息、客司关系信息、订单总体推送、司机接单等场景信息统一上传到大数据平台。
通过这种归一化&分桶、XGBoost、特征组合、独热编码等将这些数据分析为特征数据。
针对分析出来的特征数据,我们需要对它进行训练,如:订单价格、订单距离等特征在整个订单派单中起到的权重。
因为特征很多,计算出来的权重可能并不是一个***的解,只能说是近优、***的一个解法,通过不断地迭代优化,最终训练出来最终的模型。
订单-模型运用
订单模型的运用:
派单-智能时代
上图是智能派单时代的系统架构图。用户在下完单以后,订单会进入到我们整体的策略系统,它包含推送系统、补贴系统、价格系统、任务系统等。
然后通过特征匹配系统,计算出一个***的订单调度解,将这个订单推送到司机的单队列引擎和订单的排序策略引擎,最终通过我们的推送服务将订单推送给司机。
策略分流+监测
智能系统需要有不同的算法在线上实验,当我们一些新算法研发完成以后,肯定不能用 100% 的流量在线上进行验证算法的可行性,如果有问题,会对线上业务产生影响。
我们一般取 5% 或 10% 的流量在线上验证,根据用户手机号、设备码、用户属性等,以及取模、集合等方式。对线上算法验证时,如何实时的监测算法的效果,避免错误算法对线上业务造成的影响?
如上图所示,用户在 APP 中的每个步骤、运用了哪个算法,我们都会将用户的 ID、采用的算法 ID 通过日志上报到统计平台。业务监控平台会实时进行监控,对于出现异常的算法就自动关闭分流。
特征计算
特征数据中有 40 多万个特征,每个订单需要推送给很多个司机,需要进行上万次的运算,需要在几十毫秒内给出计算结果,如何保证计算的高性能呢?
我们采用的是这种阶段性事件驱动的计算方式来***化提高并行计算的能力。
如图所示,这是我们的计算链,里面包含多个 Stage,包含准备阶段、转化阶段、取数阶段和计算阶段。
每一个阶段都有自己独立的线程池,根据每个阶段的特征设置核心线程数,同时整个计算链做到了可插拔的形式,方便业务调整。
利器-监控平台
监控可以说是整个架构演进过程中非常重要的部分:
立体化监控
目前已经做到的监控包含:关键字、接口、流量、端口,JVM、CPU、线程、缓存、DB 所有的监控等等,同时还有服务治理,当服务节点发生异常,实时切换。
业务化的指标监控,渠道转化率、渠道取消率、渠道推送数量、异常订单数量等等,如果出现异常,***时间预警。
调用跟踪系统
很多互联网公司都已经在使用调用跟踪系统,目的是需要看到 APP 发起的每个请求在整个 Service 后端走过的所有过程,效果如下图所示,可以监控到每一步所调用的服务和耗时。
总结
***给大家总结了 5 点经验:
胡显波,58 到家技术经理、58 速运后端架构总负责人。2014 年 7 月加入 58 到家,先后负责 58 到家 APP、58 小时工、58 美甲等,见证了 58 到家飞速发展。2014 年 11 月负责 58 速运整体业务,带领团队小伙伴支撑了速运业务日订单从 0~50W 的飞速增长。
本文标题:给奔跑中的火车换轮子,58速运订单调度系统架构大解密
网站路径:http://www.csdahua.cn/qtweb/news28/220828.html
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网