阿里妹导读:2018天猫双11物流订单量创新高,突破10亿件,这是一次史无前例的物流洪峰。天猫双11十年来,见证了物流业从手写地址、人工分拣,到电子面单、机器人分拣。无论是物流园区、干线运输,还是秒级通关、末端配送,都通过技术高效连接,智能物流骨干网正在加快实现行业数字化、智能化升级。
因此,阿里技术推出《菜鸟智慧新物流》专题,邀请菜鸟技术人,为你揭秘物流核心技术。今天第一期,让我们一起走近神秘的“神鲸网络全球通关平台”,全方位了解新技术时代下的跨境智能关务。
前言
“跨境”,这是在当今行业一个非常 fashion的名词。从2014年起,海关总署陆续颁发多项跨境贸易政策,给跨境进出口业务带来了诸多红利。2014年也被很多业内人士称为跨境进口电商元年。也许你会听到这样一段对话:
A:Hey,兄dei,你是做什么的?B:哦,我搞跨境物流的。
A:是嘛,跨境这几年很火啊!政府在大力扶持这一块,我看很多公司都在做一块,有前途!
B:哪有?道路坎坷,很艰辛的,不过累并快乐着,我也挺看好这块的!
在整个跨境物流链路中,会涉及到多个角色:仓、干线、关务、快递等。关务是跨境物流链路最核心的环节,需要协同海关,国检等政府部门完成整个进出口国的通关操作。这块不仅业务复杂,而且存在诸多不确定性。为此,我们搭建了“神鲸网络全球通关平台”。旨在对接海关,协同CP(cainiao partner),从线下到线上,以全球化、数据化、智能化为方向,以快速、轻量、多态为核心目标,为跨境电商客户提供全球一体化的通关解决方案!
痛点和挑战
如下是整个通关全链路业务流程,包含资质备案、风控、出入区、跨境通关、税汇等核心领域。整个链路交互节点繁多,不同国家,甚至不同监管区在申报模式,交互方式,通关能力上都存在很大差别,另外由于申报链路冗长,任何一个节点出现抖动都有可能导致整个通关发生异常,进而导致申报时效拖长,为保障用户能够正常通关,我们往往需要投入更多的成本去解决申报链路过程发生的种种问题。所以,如何有效使用海关通关能力,给到跨境商户稳定的、高效的、统一的一站式通关解决方案?这是我们需要攻克的核心难题。
应对策略
通关异常繁多,申报时效冗长,大促成本飙高是大部分跨境通关企业碰到的问题。如何去异常,打时效,降成本,保障通关丝般顺滑?基于此,在神鲸网络通关平台中,我们做了诸多举措,有一体化监控的星宫大盘,阳关道批量申报,政企协同全链路摸高压测以及守护神智能辅助系统等等。今年的双十一大促上,因为有这些强有力的后盾,加上海关通关能力再创新高,大家在喝茶+聊天中度过了一个轻松愉快的双十一。今天,我们重点来交流下星宫大盘、批量申报和智能辅助系统。
星宫大盘,一体化监控
整个通关链路长,依赖系统多,如果有一个全链路的监控系统进行护卫,不仅可以实时窥视整个链路流转情况,还可以做到异常的实时跟踪处理。为此,我们搭建了关务数据中心,承载关务所有数据,并依托它构建了整个星宫大盘产品,将业务监控,指标监控,系统监控一体化,真正实现360度无死角主动监控。如下图(注:下图中数据非真实数据,仅做示例):
数据中心
数据中心涵盖了整个关务生态的数据,通过实时+离线两种方式,很好的支撑了实时业务监控和指标监控等核心业务。如下是整个数据中心核心架构,包含消息接入,指标计算,数据存储等核心模块。
作为一个数据产品,最基本的的诉求就是能保证数据实时性、准确性,那怎么在大促情况下能够做到99.99%数据准确性?这是数据中心面临的最大的一个挑战。
实时性(秒级生效)
业务系统通过消息埋点的方式记录各个链路节点数据,通过阿里消息中间件消息异步推送给数据中心。数据中心拥有一个支持水平扩展的庞大的服务器集群,具有强大的消息处理能力,保证消息的实时消费。
通过缓存+异步存储的方式提升整体消息处理能力; 存储之前先往缓存存一份,后面热点查询优先从缓存获取数据,提高查询效率,数据插入如果超时或者失败立即创建调度任务进行异步重试插入。
准确性(99.99%)
由于关务业务特殊性,星宫需要保证监控数据的准确性,传统的方案一般是通过流计算的方式把数据统计出来,这种方案统计和详情数据是分开的,可能会导致数据统计和真实数据存在误差的情况,这对于星宫来说是不可接受的。为此,项目组另辟蹊径采用实时详情数据聚合的方案,这里,我们引入了ES中间件,阿里中间件团队针对ES做了非常多的优化,具有高性能的聚合能力,支持海量级数据的实时聚合。另外我们在数据结构存储上面做了多层优化,比如:
- 热点查询条件用int来逻辑映射,字段存储底层采用列存储。
- 为了加快检索,存储树形结构把目录加载到缓存,犹如数据字典一样。
另外为了保证数据消费不丢失,在客户端启动了多层重试机制,保证数据的最终一致性。今年大促上,数据中心表现出色,双11当天QPS达到40000+ 平均耗时11ms,正是这种强大的数据消费能力保证了星宫数据实时性,另外亿级别数据多维度聚合统计基本上都是秒级返回,真正做到了100%可用。
批量申报,独木桥变阳关道
由于海关各个节点大多采用MQ+FTP的技术架构,文件数的个数会影响整体通道消费能力。另外总署的56号公告要求四单申报进行加签操作,随之带来的将是验签成本的增加。为减轻总署通道压力,并提升验签能力,我们采用了批量申报的策略,简而言之就是将多个订单聚合到一起进行申报,一次加签操作,一次申报动作。如下:
批量申报调度模块自研了一个轻量的批量调度框架实现,通过一个任务池汇总所有任务,按照不同业务规则聚合同类型的任务然后进行消费。如下:
记得当时该项目刚上线时,还有一个小插曲,压测下来发现整体性能远远达不到要求,这可急坏了整个项目组。任务消费过程大体分为:分页捞取任务-》锁定任务-》消费任务。其中捞取任务和锁定任务过程是通过抢占分布式锁的方式来防止并发,避免同一个任务被多个线程捞取并消费。正式由于这个分布式锁的限制以及单库单表的DB瓶颈,导致整体性能一直上不去。
经过讨论,最终我们采用了分布式锁池+DB散列方案。即既然单个分布式锁无法满足要求,那么设计成锁池好了;既然单库单表存在瓶颈,那按照业务关键字进行散列。分布式锁池我们使用的是redis的Set数据结构+spop和sadd命令实现的,应用启动时初始化指定个数的锁放到Set数据结构中,然后通过spop随机获取一个模值捞取任务,任务锁定后再通过sadd返还锁,插入任务时也是通过锁个数进行随机散列到多个库多个表中。通过该机制改造后,整体性能大大提升,数据库压力也降低了好几倍。
这次微小的调整,却带来了巨大的性能提升,在今年双十一大促上,批量申报也是大放异彩,整个通关审单时效大大降低,申报能力相比往年也有质的提升。如下是17年和18年双十一某一属地海关的平均审单时效对比,相比17年,今年的平均审单时效非常稳定,基本保持在20分钟以内,海关上行和下行通道毫无压力。
如下是某海关30分钟内审单完成率情况,相比往年,今年审单能力有巨大的飞跃,基本上是零堆积,申报速度跟审单速度几乎持平。
智能辅助系统,关务守护神
今年是关务的智能化元年,在正向申报链路上,我们推出了智能限流与智能hold单产品,自适应保护自身与海关系统。在人工成本降低的同时,保证了海关系统的最大吞吐能力。在异常处理上,我们基于规则引擎上线了异常智能处理系统,通过不断丰富异常处理规则,系统变得越来越聪明,基本上可以自动处理大部分海关异常。同时,作为关务智能大脑,还为关务数据中心提供数据分析服务。智能系统包含产品如下:
智能限流
整个智能限流的设计不仅支持集群环境下任意接口秒级与分钟级精准限流,还能根据接口的RT与失败率等指标对接口流量进行动态调节。
1.技术架构:
- 智能限流分三个主要模块:资源监控(对资源的请求量精准统计)、限流策略(请求量达到阈值后的操作)、智能调控(依据一定的规则与算法调节)。
- 智能限流整体采用了pipeline的设计模式,目前实现了单机限流、集群限流和自适应限流三个阀门,只有全部通过阀门,请求才能被放行,否则就会被拦截。这种设计便于维护以及后期限流策略的扩展,例如在双十一之前紧急增加的集群分钟级限流(开发测试仅半个人日)。
- 单机限流和集群限流都是固定限流,即人为提前设定好接口的限流值,如果请求量超过这个值,便会被流控。人工限流的关键是对请求量的精准统计。
- 动态限流则会依赖一些指标进行实时计算和分析,系统按照一定规则自行判断是否需要限流,这个限流是将接口能力分为档位进行调整,既会下调,也会自动上调恢复接口的能力。
2.资源监控
资源监控是指统计某个接口的各种指标,包含请求量/失败量/限流量等,这些指标基本上是在单台机器上的统计。但是在限流场景,单机限流仅仅能保护机器本身,对于下游的保护,还是需要集群限流功能,因此还需要对集群环境下的资源访问统计。
- 单机指标统计
单机指标主要是基于滑动窗口的原理进行统计,比如QPS(每秒的请求数)的统计是将1秒分为5个时间窗口,每个窗口统计200ms内的请求,最后做累加。
单机指标监控主要是做单机限流,单机限流的最大好处是能够保障单台机器不会被上游压垮。而对下游而言,单机限流可用性较低,对集群数据来说准确性不能保障。
- 集群指标统计
我们不仅仅要保护自己,还要保护下游系统,因此需要保证集群环境下给到下游的量是精确可控制的。
集群指标统计需要借助分布式缓存实现,通过使用incr原子累加功能,实现在分布式环境下对请求量的统计。
针对QPS的统计,缓存的key由接口名称+秒级时间戳(yyyyMMddmmSS)组成,例如:xxxx_20181118012012。
集群统计的准确性依赖两个点:一个是分布式缓存的性能,另一个是分布式环境下每台机器的时间一致性(NTP网络可以保证)。
智能限流的缓存使用的是阿里集团的tair(MDB),单次读写平均在5ms以内,对于并发量不是特别大的业务系统来说误差完全可以接受。
3.限流策略
通过对资源的准确监控,人工固定限流比较容易实现,只要比较下当前的实际qps值和设定的qps值大小即可,达到设定的限流值该请求就会被终止(目前通过抛出指定类型的异常)。
无论是秒级还是分钟级限流,只是监控的粒度不同,即统计的key的时间戳的区别,对于限流的逻辑完全一致。
在限流时,我们还会进行主动通知,便于人工干预。
异常智能处理
异常智能处理主要是在日常和大促后的扫尾阶段发挥重要作用。它以关务知识大脑为核心,协同CP、小二、系统共同高效解决业务异常。处理的异常越多,沉淀的就越多,系统也会越来越智能。
关务异常存在繁、杂、多、变等特点,如果靠人工去处理每一个异常订单,需要投入巨大的成本,时效也无法得到保障,在大促期间,异常订单量更是以百倍级别增长。技术是第一生产力,我们需要机器代替人工处理这些异常,系统自动处理也就应运而生。
然而,经过不断的实践证明,短期单纯依赖系统自动处理所有的异常是不现实的,有部分还是需要人工介入(比如备案问题),然后再利用系统进行重新申报。因此,异常智能处理系统的目标是:搭建人机交互闭环机制,沉淀底层知识大脑,快速提高异常处理的智能化程度。
在底层实现上,我们搭建了一套规则库用于知识沉淀,上层实时监听海关异常回执,实现大部分异常秒级处理;同时,启动定时异常处理任务,每天定点捞取遗漏订单进行处理;最后,为小二和CP推送需要人工介入的异常订单,处理完后再推送到系统,由系统接着处理后续流程。
展望未来
在全球化的道路上,我们任重而道远,AI智能,大数据协同是未来的方向,基于人工智能方式实现全球通关的丝般顺滑,让全球通关更简单!这是我们的宗旨和目标,我们会一步一个脚印一直走下去!
未来的路还很长,我们迫切需要有更多的能人异士加入,一起谱写旷世不灭的传奇。如果你足够优秀,如果你不甘平庸,来吧,让我们一起风骚前行!
本文作者:啸鹏
本文来自云栖社区合作伙伴“阿里技术”,如需转载请联系原作者。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。