背景
如下圖所示舍杜,用戶A在批量寫入赵辕,如果執(zhí)行時間長还惠,長時間占用server線程,將會影響其他用戶的讀寫操作蚕键,如用戶B,難以構(gòu)建高并發(fā)的Web系統(tǒng)笆怠。
優(yōu)化
server職責(zé)
如下“批量寫架構(gòu)優(yōu)化”圖蹬刷,用戶A提交批量寫請求,server不返回批量寫的結(jié)果办成,只返回權(quán)限校驗、數(shù)據(jù)校驗和記錄任務(wù)、寫mq(消息隊列)的結(jié)果状答,用戶A只能在頁面刷新等待寫入DB的結(jié)果冷守。
job職責(zé)
job接收mq消息,執(zhí)行循環(huán)寫入db操作惊科,然后用戶A就可以訪問到寫入的結(jié)果拍摇。
優(yōu)勢
用戶A批量寫不再長時間占用server線程,長時間寫db操作在job執(zhí)行馆截,提升server的并發(fā)數(shù)充活。
防刷
當(dāng)存在未執(zhí)行完的任務(wù),不允許當(dāng)前用戶再次觸發(fā)批量寫蜡娶。
超時
當(dāng)存在未執(zhí)行完的任務(wù)且任務(wù)執(zhí)行已經(jīng)超過一定的時間混卵,則認(rèn)為任務(wù)執(zhí)行失敗(job重啟窖张、丟消息等)幕随,允許當(dāng)前用戶重新觸發(fā)批量操作宿接。
冪等
通常情況下job只執(zhí)行接收到的mq消息所對應(yīng)的任務(wù)赘淮。
對于是否重新執(zhí)行之前中斷或者失敗的任務(wù)由具體需求場景決定。
是否需要保證重新執(zhí)行結(jié)果冪等性需要根據(jù)需求具體分析睦霎。