批量写的设计经验

背景

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

批量写架构

优化

server职责

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

job职责

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

优势

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

批量写架构优化

防刷

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

超时

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

幂等

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,099评论 19 139
  • 一、源题QUESTION 74View the Exhibit. You want to create a tab...
    猫猫_tomluo阅读 1,600评论 0 1
  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,690评论 8 265
  • 当你还在回味春节期间发生的种种事情的时候,不知不觉又要上班了,今天是春节后的第一天,也是情人节,祝我的两位情人快乐...
    davidpp阅读 338评论 0 0
  • 女主角: 慕容凝雪,学名:冷凝雪,英国名:蓝凝雪 ,一座大冰山,(除了对家人姐妹) 好友:慕容怡宣,慕容离月 姓名...
    傻的那般可爱阅读 550评论 0 1