背景
如下图所示,用户A在批量写入,如果执行时间长,长时间占用server线程,将会影响其他用户的读写操作,如用户B,难以构建高并发的Web系统。
优化
server职责
如下“批量写架构优化”图,用户A提交批量写请求,server不返回批量写的结果,只返回权限校验、数据校验和记录任务、写mq(消息队列)的结果,用户A只能在页面刷新等待写入DB的结果。
job职责
job接收mq消息,执行循环写入db操作,然后用户A就可以访问到写入的结果。
优势
用户A批量写不再长时间占用server线程,长时间写db操作在job执行,提升server的并发数。
防刷
当存在未执行完的任务,不允许当前用户再次触发批量写。
超时
当存在未执行完的任务且任务执行已经超过一定的时间,则认为任务执行失败(job重启、丢消息等),允许当前用户重新触发批量操作。
幂等
通常情况下job只执行接收到的mq消息所对应的任务。
对于是否重新执行之前中断或者失败的任务由具体需求场景决定。
是否需要保证重新执行结果幂等性需要根据需求具体分析。