亿级中转场:30倍内存优化算法设计与实现

    一句简介:内存最大可存100万,有一天能存300万,再有一天储900万,再一天可存1800万,直到3000万!算法

    需求背景

     随着公司的快递业务日益增加,特别是节假日或购物节,如五1、61八、双十一的快递单量瞬间暴增,中转场需缓存大量数据等待分拣,在去年双十一高峰期,有些场地的进港和出港数据仅保留2到3天的数据,但分别都已经高达到2000至4000万之间,而场地有些服务器高达38G的内存都没法支撑起数千万数据内存的消耗,致使后台服务直接开档空挂,巴枪使用瘫痪!

     记忆去年双十一只要当天当收件量超过1800万以上,基本都会出现内存溢出的状况,运维只能重启后台应用,重启后巴枪需等待30~40分钟缓存数据加载,无奈却在胜仗关键时刻出叉子,不但影响分拣效率,且在工做压力较大状况下,场地人员也出现较大情绪!缓存

    业务痛点(传统解决方式)

一、顺丰接近拥有300个中转场,若需每台服务器拆解更换内存条,费时费力;服务器

二、因服务器内存插槽有限,没空闲插槽时,只能以舍弃现有4G换成8G方式进行,形成资源浪费; 运维

三、若是有些中转场服务器较早期,内存扩展支持已到极限,须要更换服务器,形成成本费用则更高;  性能

四、假设全部服务器均有无限内存插槽和扩展支持,但在千万数据量起步,吞吃内存胃口会增长几倍,甚至更多,不久后又要扩展;  优化

    算法概述人工智能

一、对象类型的数据转换字节类型的数据;spa

二、千万级别的List集合缩小为万级别的List集合;

三、须要缓存的数据进行批量且快速压缩处理;对象

四、更新缓存数据时,对压缩数据断点判断与拼接;内存

五、请求缓存数据时,对数据定点标识与二叉树快速查找; 

流程图如【图1-1】所示:

                                              

    模拟演视

一、2倍以上加载效率(数据量越大越明显):jdk1.6,最大内存256,90万数据;

A、旧算法时间截图

B、新算法时间截图

 二、30倍内存优化(数据量越大越明显):jdk1.6,最大内存256;

 A、旧算法内存截图,101万时已经溢出

B、新算法内存截图,3000万正常  

 

    算法难点

一、数据段算法对残缺数据、特殊数据、超长数据、一表多个中转场等容易丢数据状况的拼接; 

二、针对数据量较大时,对各类类型(long型、char型、String型等)转换字节算法的性能要求较高;

 


创新点

一、 以习惯扩展硬件内存方式对比,省时省力省钱,只要伴随正常版本的发布,便可达到下降内存的使用。 

二、在数据量较大时,不但内存节省,还提升的加载和提取的效率, 能使巴枪终端反应灵敏,同时负载更多巴枪;

三、在后续缓存结构程序,均可以使用本内存优化算法,有效达到无边界效益反应,叠加节省更多的人力物力;


带来的影响

一、主要对进港、出港等几个数据量大的缓存进行算法优化就能达到2~6倍的内存使用效果,10.5版本已在进港验证功能使用正常(现10.8版本);
 
二、不管是互联网发展或公司业务扩展,又或者搭载新应用,如人工智能程序等,中转场内存必须是扩展的过程,假设一个16G的中转场本来要花费600元(按中关村三星8G内存400元~800元取平均值)扩展8G内存,但使用优化算法后,能空出了8G以上的内存,便是双倍节省,做280个中转场计算(中转场还在增长),双倍费用节省33.5万元左右,固然之后的叠加效果能够会更多;
 
三、部分中转场的服务器已经出现没法支持扩展更大的内存,面对内存不足时,只能更换服务器,这会是更大一笔费用,优化内存后实现资源再利用!
相关文章
相关标签/搜索