大数据量订正数据时,清空cache的问题

错误案例

【现象描述】

芝麻开门项目在周末两天的时间内共对1650万左右的数据进行了订正,订正当天应用正常。到了周一,由于中文站的访问量一下子增加,导致memcached写入死锁。从上午九点左右开始,发现阿里助手首页打开很慢,中午到下午两点响应时间进一步增加。下午三点半左右,随着cache的会员逐渐增多,应用逐渐恢复,下午五点开始基本恢复正常。

【错误代码】

While(存在未处理的数据) {
    Member = readFromDB(); // 从数据库中逐一读取
    update(member); // 更新这个会员数据,并默认清空该会员cache中的数据;
    logger.info(member);
}

错误分析

在大数据量订正的时候,如果该数据也保存在cahce中,要把大数据块分成小块,每次只处理小块数据,并要防止cache数据被清空。因为在系统高访问的情况下,高并发的写入cache,每一次写入cache都会加锁,而mencached本身有缺陷,在高并发的时候,等待写入的请求直线增加,会导致写入无限制延长,甚至写入死锁。

正确用法

提取所有数据保存到文件file1;

评估确定每天允许更新的数据量 k,分块处理大数据量;

设置定时任务,每天执行一次;

任务代码如下:

i = 0;
While(i <= k){
    member  = readFromFile(file1);
    Update(member);
    putBackToCache(member) // 必要时需要这么做,但是需要和架构师讨论;
     logger.info(member);
    removeFromFile(file1);
    i ++;
}

测试关注点

1、测试环境下执行任务,使得cache数据被清空;

2、模拟用户高并发访问的情况,启动多个进程进行持续访问;

3、打开系统页面,检查系统响应时间是否增加,以及是否可以接受,检查系统是否有死锁的日志。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值