批量写的设计经验

背景

如下图所示,用户A在批量写入,如果执行时间长,长时间占用server线程,将会影响其他用户的读写操作,如用户B,难以构建高并发的Web系统。

批量写架构

优化

server职责

如下“批量写架构优化”图,用户A提交批量写请求,server不返回批量写的结果,只返回权限校验、数据校验和记录任务、写mq(消息队列)的结果,用户A只能在页面刷新等待写入DB的结果。

job职责

job接收mq消息,执行循环写入db操作,然后用户A就可以访问到写入的结果。

优势

用户A批量写不再长时间占用server线程,长时间写db操作在job执行,提升server的并发数。

批量写架构优化

防刷

当存在未执行完的任务,不允许当前用户再次触发批量写。

超时

当存在未执行完的任务且任务执行已经超过一定的时间,则认为任务执行失败(job重启、丢消息等),允许当前用户重新触发批量操作。

幂等

通常情况下job只执行接收到的mq消息所对应的任务。
对于是否重新执行之前中断或者失败的任务由具体需求场景决定。
是否需要保证重新执行结果幂等性需要根据需求具体分析。

推荐阅读更多精彩内容