一句简介:内存最大可存100万,有一天能存300万,再有一天储900万,再一天可存1800万,直到3000万!
需求背景
记忆去年双十一只要当天当收件量超过1800万以上,基本都会出现内存溢出的情况,运维只能重启后台应用,重启后巴枪需等待30~40分钟缓存数据加载,无奈却在胜仗关键时刻出叉子,不但影响分拣效率,且在工作压力较大情况下,场地人员也出现较大情绪!
业务痛点(传统解决方式)
1、顺丰接近拥有300个中转场,若需每台服务器拆解更换内存条,费时费力;
2、因服务器内存插槽有限,没空闲插槽时,只能以舍弃现有4G换成8G方式进行,造成资源浪费;
3、如果有些中转场服务器较早期,内存扩展支持已到极限,需要更换服务器,造成成本费用则更高;
4、假设所有服务器均有无限内存插槽和扩展支持,但在千万数据量起步,吞吃内存胃口会增加几倍,甚至更多,不久后又要扩展;
算法概述
1、对象类型的数据转换字节类型的数据;
3、需要缓存的数据进行批量且快速压缩处理;
4、更新缓存数据时,对压缩数据断点判断与拼接;
5、请求缓存数据时,对数据定点标识与二叉树快速查找;
流程图如【图1-1】所示:
模拟演视
1、2倍以上加载效率(数据量越大越明显):jdk1.6,最大内存256,90万数据;
A、旧算法时间截图
B、新算法时间截图
2、30倍内存优化(数据量越大越明显):jdk1.6,最大内存256;
A、旧算法内存截图,101万时已经溢出
B、新算法内存截图,3000万正常
算法难点
1、数据段算法对残缺数据、特殊数据、超长数据、一表多个中转场等容易丢数据情况的拼接;
2、针对数据量较大时,对各种类型(long型、char型、String型等)转换字节算法的性能要求较高;
创新点
1、 以习惯扩展硬件内存方式对比,省时省力省钱,只要伴随正常版本的发布,即可达到降低内存的使用。
2、在数据量较大时,不但内存节省,还提高的加载和提取的效率, 能使巴枪终端反应灵敏,同时负载更多巴枪;
3、在后续缓存结构程序,都可以使用本内存优化算法,有效达到无边界效益反应,叠加节省更多的人力物力;
带来的影响