菜鸟+Hologres=智能物流
优采云 发布时间: 2020-08-17 14:25菜鸟+Hologres=智能物流
简介:菜鸟智能货运剖析引擎是基于搜索构架建设的货运查询平台,日均处理包裹风波几十亿,随着业务量的降低,数据在原储存系统HBase中的导出时间也越来越长。本文将会为你分享新手团队怎样使用Hologres成功替换原HBase构架,打造新一代智能货运平台。一、业务背景
菜鸟智能货运剖析引擎是基于搜索构架建设的货运查询平台,日均处理包裹风波几十亿,承载了菜鸟*敏*感*词*的大部分处理任务。
智能货运剖析引擎将基于运配网路的各种应用场景集中到了统一的一个技术构架,以此提供强悍的吞吐和估算能力。基于原构架的数据处理流程为:Datahub实时采集数据源,收录仓、配、运和订单等数据,实时估算Flink基于流批一体的模式对数据预处理,形成一个以订单为单位,收录订单跟踪风波的宽表,写入储存引擎HBase中,再供外部查询。
在数据处理部份,随着数据量的降低,原有的储存系统HBase在维表全量导出中所须要的时间越来越长,这就须要花费大量的资源,另外其单机吞吐的表现不是挺好,单位成本高。在数据量较小时,成本不是须要考虑的关键诱因,但当数据量规模变大时,成本的重要性就彰显下来了。菜鸟智能货运每晚须要处理大批量的数据,这也就意味着每晚将会浪费大量的资源。
同时,在我们的场景中,有些表是作为Flink维表基于PK进行PointQuery,有些表须要进行OLAP剖析,而HBase并不能两种场景都满足。为了OLAP剖析,需要将数据同步到批处理系统中,为了KV查询,需要将数据同步到KVStore。不同的查询需求就须要利用多个系统,数据在不同系统之间的导出导入除了会加深数据同步的负担,也会带来冗余储存,也极容易出现数据不一致的情况,并且多个系统也会给开发和运维带来一定的成本。
基于以上背景,当前我们最须要解决的问题是增加整体的资源消耗成本,那么就须要有一款产品既能提供储存能力还要提供高性能的写入能力。而在查询场景上,若是这款产品能同时满足KV查询和复杂OLAP查询将会是加分项,这样才会解决多个系统带来的数据孤岛问题,一次性满足所有需求。
我们在集团内对多个产品进行了督查,最终选择了Hologres替换现有的HBase。
二、业务构架
菜鸟物流引擎须要处理大量的表和数据,全量任务快件线和仓配线通过MaxCompute(原ODPS)表的日分区快照做驱动源,增量任务通过对应的风波流做驱动,来进行引擎数据写入。
全量任务会依照包裹的历史履行进度进行聚合,生成这个包裹的客观履行和历史属性信息,并通过Flink Job实时同步更新到Hologres里,提供给数据任务进行关联。实时数据在接收到一条风波消息后,首先会去关联这条包裹历史履行,并会调用算法服务链,进行拆合单、末端网点预测、路由选择、时效预测等,生成新的预测履行进度。新的预测履行会作为回流数据写入TT(消息中间件,类似Kafka)和Hologres中,并再提供给数据任务进行关联。
通过数据任务之间的相互协同,我们对数据关系进行了梳理,并尽量减少数据之间的依赖,最终业务处理构架如下图所示:
三、业务价值
将HBase替换成Hologres以后,给业务带来的价值主要有以下几个方面:
1.整体硬件资源成本上涨60%+
对比HBase,相同配置的Hologres有着更强的写入性能,能够提供更好的吞吐量,也就是说我们可以用更少的资源来满足现有数据规模的处理需求。在实际业务应用中,整体硬件资源成本上涨60%+,解决了我们最棘手的问题。
2.更快的全链路处理速率(2亿记录端到端3分钟)
全量数据处理所需的时间是十分重要的指标,设想某三天新发布的数据处理代码有bug,新产出的数据不可用,即使修补了代码,还得继续解决早已存在的错误数据,此时就要跑一次全量,用正常的数据覆盖错误的数据。全量任务的运行时间决定了故障的持续时间,全量运行的速率越快,故障能够越快解决。
在货运剖析引擎的全量中,我们须要先通过所有维表的数据,确保维表自身的数据是正确的,这是一个特别历时的操作。以其中一张表为例,2亿多的数据量,使用Hologres同步只须要3分钟左右,这也意味着可以更快的执行完毕全量数据,以便我们能否更从容应对突发情况。
3.一个系统,满KV和OLAP两个场景,没有数据冗余
Hologres在储存上支持行存和列存两种储存模式。列存适宜海量数据的交互式剖析,而行存适宜基于Primary Key的整行读取。这就意味着我们可以将所有的数据储存在Hologres中,需要PointQuery就选择行存模式,需要复杂OLAP剖析就选择列存模式,满足了OLAP和KV查询,无需再利用其他系统,既保证了数据储存的唯一性,也防止了各类系统之间的导出导入和复杂运维。
4.大维表实时SQL查询
以前假如想查一下维表中的数据,由于是KV插口,并不是很方便。Hologres兼容PostgreSQL生态,可以直接使用psql客户端访问,通过标准的PostgreSQL句型查询表中的数据,支持各类过滤条件,能够很方便的实时检测数据是不是有问题。
5.强Schema
原有的维表储存是一个弱Schema的储存服务,在Flink任务中,即使访问不存在的数组也不会报错,只是获取到的数组值为空。代码里不留神弄错了数组名,一是很难立即发觉,通常要等到数据产出时侯才会发觉,甚至只能等用户发觉,另外排查上去也很麻烦,没法直接定位。使用Hologres的时侯数组名弄错立刻报错,错误信息太明晰,避免了潜在的错误风险,还能节约时间。
作者:阿里巴巴菜鸟物流团队(弃疾,孝江,姜继忠)
原文链接