【在路上5】实时计算助力派件管控

签收率系统试运营以来,每天算出高额罚款,虽然没有真正执行,但也挺吓人的。并且,完完全全的把全网人员积极性提升起来了。

总部网络管理中心每天给出各省区前一天的签收率报表,来了个排名和点名;

各省区管理中心给出本区域大网点的签收率报表,也来了个排名和点名;

大网点把超时单号导出(它们导致签收率下降),按承包区和业务员分组排名;

排行榜这一招,在中国几千年以来的各行各业,真的是屡试不爽。甭管是为了降低罚款还是为了面子,所有人都跟打了鸡血一般。

各层级领导和管理人员拿着数据说话,更是理直气壮。“A网点就在你家隔壁,为什么它的派送比你好那么多”。底下一顿之乎者也,各种解释。此时,管理人员恨不得看着这些业务员派送,为什么那么慢。于是提出,要是能够马上看到网点的派送数据和签收率就好了

 

【改架构】

系统架构是每天凌晨计算T-1(前一天)全网的签收率,因为这个时候大部分数据都已经上传完毕。按照日期和网点过滤数据,然后分组聚合,几个小时下来就能计算完。

如果实时计算当天数据,就得修改架构,几个小时才能算一次的办法显然不适用。

离线全量计算需要改为增量计算,否则到了下午晚上,随着当天数据变多,几千个网点要算很久;

业务策略越完善越复杂,最难的在于如何界定每一票件属于哪个网点哪一天的派送任务,只要定好日期、网点和频次(一二三派),那么计算网点今天的签收率最多就是一个分组统计的事情;

把末中心发件数据,派件网点的派件和签收扫描数据等,当作源源不断的数据流,以每秒几百行到几千上万行的速度流入系统。只需要对每一次操作进行增量式处理,即可达到我们的目标。这就是流式计算的思想。

 

【技术选型】

系统前期采用Oracle存储过程进行数据批量计算,.Net做数据展示。

原计划采用Hadoop替换存储过程来进行离线计算,就此夭折,因其做不到实时增量计算。当时也完全没有人会Spark和Kafka。

同时,业务策略日渐复杂,需要更多外部数据辅助计算,存储过程必然得换掉。

在这个背景下,我们选择了公司内最强的.Net开发技术,自主设计一套增量计算系统。(当时Java占比很低)

参考了多年前的系统经验(只有每月百万级数据),把数据按照入库时间切分为小片,每5秒作为一片,从数据库抽取出来,进行逻辑计算。判定每一票属于哪个网点哪一天的派件任务后,放入签收明细表中,按照省份进行分表。完美的把一个大数据计算系统,转化为大家熟知的数据库类应用系统,充分利用现有的人力资源和技术储备优势

新架构可以多线程并行计算,并且可以大量利用Redis等众多中间件进行优化。

 

【系统上线】

系统很快开发完成,试跑数据,每10分钟对明细表跑一次分组聚合更新签收率统计表。末端中心发件以及快递员签收后,签收率的确变了,不过需要等10分钟才会变动。用户不答应了,10分钟不变啊,这不算实时……真没想到,系统上线前夕,还遇到这么个小插曲!

整个系统用了一个Oracle数据库和一台32G内存的计算服务器,按省份分了12张表,保存6个月历史数据,平均每张表2亿多行数据。(当时2016年每天业务量1000万,现在2019年每天业务量4000万)

尽管有分区索引,但对2亿行数据表进行聚合统计,效率是相当低下的,10分钟周期不能缩短。最后用了个很出人意料的办法,给12张明细表加插入触发器,在其中对统计表进行累加更新,最终效果就是,派件量和签收率数据,每秒都在改变,用户非常满意!用触发器会让很多程序员笑话,但它很有效,最重要的是用户很满意,那就足够了!

 

【业务赋能】

签收率各个指标数据每秒都在跳动,全国各地分公司和数千网点的管理人员,犹如获得了一个派件端的数据大屏。

网点管理者通过积累本网点每个小时点的签收率,比如A网点每天11点签收率应该在70%左右,某天发现快11点了才做到60%,那么底下一定出了问题,马上电话联系沟通;

省分公司早上10点,发现某个网点签收率还不足1%,即怀疑网点是否遇到了困难,或者网点老板跑路?

电商旺季,网点在派车去中心拉件之前,就已经在系统看到了当日应派件量,可以准确地安排车辆和派件人员;

……一个签收率系统,不断向数据链的前后拓展,不断增加各种业务需求,俨然已经成为了派件端数据标杆,远超设计预期。

 

……闭关十天攻克一个技术问题,也写了十多天的代码,导致《在路上》系列断了十多天,今天恢复。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/311858.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构---B-(B)、B+的总结

数据结构—B-&#xff08;B&#xff09;、B的总结 原理&#xff1a;参考趣学数据结构 m阶B-树规则(有序的&#xff08;左子树的元素值<根节点的元素值<右子树的元素值&#xff09;、平衡的&#xff08;每个结点的左右子树的高度差<1&#xff09;、多路的&#xff08…

dfs巩固训练

按顺序从上往下刷即可&#xff01;&#xff01;&#xff01; 知识点: 关于环形的数组&#xff0c;前移动和后移动可能会溢出下标。解决方法是&#xff0c;转移后的坐标公式为 &#xff08;原坐标改变量数组长度&#xff09;%数组长度 易错点: 写搜索时候&#xff0c;有时候会…

python适用范围_Python应用范围总结概览

Python就是万金油&#xff01; Python&#xff08;派森&#xff09;&#xff0c;它是一个简单的、解释型的、交互式的、可移植的、面向对象的超高级语言。这就是对Python语言的最简单的描述。 Python有一个交互式的开发环境&#xff0c;因为Python是解释运行&#xff0c;这大大…

重磅!K8S 1.18版本将内置支持SideCar容器。

作者&#xff1a;justmine头条号&#xff1a;大数据与云原生微信公众号&#xff1a;大数据与云原生创作不易&#xff0c;在满足创作共用版权协议的基础上可以转载&#xff0c;但请以超链接形式注明出处。为了方便阅读&#xff0c;微信公众号已按分类排版&#xff0c;后续的文章…

广义表的学习(原理和代码)

广义表的学习&#xff08;原理和代码&#xff09; 参考链接&#xff1a; https://blog.csdn.net/it_is_me_a/article/details/99870530

bfs巩固训练

按顺序从上往下刷即可&#xff01;&#xff01;&#xff01; 知识点: 关于环形的数组&#xff0c;前移动和后移动可能会溢出下标。解决方法是&#xff0c;转移后的坐标公式为 &#xff08;原坐标改变量数组长度&#xff09;%数组长度 易错点: 写搜索时候&#xff0c;有时候会…

python输出文本 去掉引号_Python可以在文本文件中读取时从字符串中删除双引号吗?...

我有一些这样的文本文件&#xff0c;有50​​00行&#xff1a; 5.6 4.5 6.8 "6.5" (new line) 5.4 8.3 1.2 "9.3" (new line) 所以最后一个术语是双引号之间的数字。 我想做的是使用Python(如果可能的话)将四列分配给双变量。但主要的问题是最后一个术语&a…

word List 15

word List 15 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢&#xff01;

.NET Core 如何验证信用卡卡号

_点击上方蓝字关注“汪宇杰博客”导语最近在家闲的蛋疼需要写点文章。正好我本人在金融科技公司工作&#xff0c;对信用卡业务略有了解。我们看看如何在 .NET Core 里验证一个信用卡的卡号是否合法。信用卡卡号组成首先&#xff0c;信用卡的卡号一般为16位&#xff0c;也有少许…

python统计文件中每个单词出现的次数_python统计文本中每个单词出现的次数

.python统计文本中每个单词出现的次数&#xff1a; #codingutf-8 __author__ ‘zcg‘ import collections import os with open(‘abc.txt‘) as file1:#打开文本文件 str1file1.read().split(‘ ‘)#将文章按照空格划分开 print "原文本:\n %s"% str1 print "…

AcWing 1101. 献给阿尔吉侬的花束

阿尔吉侬是一只聪明又慵懒的小白鼠&#xff0c;它最擅长的就是走各种各样的迷宫。 今天它要挑战一个非常大的迷宫&#xff0c;研究员们为了鼓励阿尔吉侬尽快到达终点&#xff0c;就在终点放了一块阿尔吉侬最喜欢的奶酪。 现在研究员们想知道&#xff0c;如果阿尔吉侬足够聪明…

数据结构---关键路径

数据结构—关键路径 原理&#xff1a;参考趣学数据结构 代码&#xff1a; #include<stdio.h> #include<stdlib.h> #include "stack.h" #define typeNode int //每个头结点的标识数据类型 #define N 100 //最大结点数 int degree[N];//结点入度数,通过…

Kubernetes AIOps解决方案商 Carbon Relay获6300万美元A轮融资

每10家企业中就有4家报告说他们正在使用Kubernetes&#xff0c;Kubernetes是开放源代码容器编排框架&#xff0c;用于在生产环境中自动化应用程序的部署&#xff0c;扩展和管理。但是&#xff0c;诸如管理复杂性&#xff0c;部署时间和无法预料的错误之类的挑战可能会降低生产率…

python结束线程_2018-01-02 如何优雅地终止python线程

前言 零 我们知道&#xff0c;在python里面要终止一个线程&#xff0c;常规的做法就是设置/检查 --->标志或者锁方式来实现的。 这种方式好不好呢&#xff1f; 应该是不大好的&#xff01;因为在所有的程序语言里面&#xff0c;突然地终止一个线程&#xff0c;这无论如何都…

AcWing 1113. 红与黑

有一间长方形的房子&#xff0c;地上铺了红色、黑色两种颜色的正方形瓷砖。 你站在其中一块黑色的瓷砖上&#xff0c;只能向相邻&#xff08;上下左右四个方向&#xff09;的黑色瓷砖移动。 请写一个程序&#xff0c;计算你总共能够到达多少块黑色的瓷砖。 输入格式 输入包括…

SkyWalking学习笔记(Window环境 本地环境)

基于 Windows 环境使用 SkyAPM-dotnet 来介绍一下 SkyWalking&#xff0c; SkyAPM-dotnet 是 SkyWalking 的 .NET Agent环境要求JDK8Elasticsearch8080,9200,10800,11800,12800 端口不被占用Elasticsearch安装Elasticsearch下载安装 参考官方教程.Elasticsearch下载安装官方教程…

word List16

word List16 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢&#xff01;

python二分法求方程的根_Python查找函数f(x)=0根的解决方法

线性代数分享方程f(x)0的根 函数F(x)0的重根与F(x)0的根有什么关系&#xff1f;有些人一旦错过了&#xff0c;就是一辈子不再主动联系&#xff0c;不愿打扰你的生活&#xff0c;连偶尔的寒暄都没有&#xff0c;成长就是这样的&#xff0c;不断的告别&#xff0c;不断的遇见。 请…

[蓝桥杯2015决赛]穿越雷区-bfs

题目描述 X星的坦克战车很奇怪&#xff0c;它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转&#xff0c;否则将报废。 某坦克需要从A区到B区去&#xff08;A&#xff0c;B区本身是安全区&#xff0c;没有正能量或负能量特征&#xff09;&#xff0c;怎样走才能路径…

word List 17

word List 17 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢&#xff01;