当前位置: 首页 > news >正文

分布式任务调度处理方案(无代码)

业务涉及到,需要向数据库、redis、elasticsearch、MinIO写四份数据,这里存在分布式事务问题。

如何解决问题,先分析cap,是要保证可用性,还是保证一致性。

如何选择是CP还是AP?分析业务场景

CP的场景:满足C舍弃A,强调一致性。

跨行转账:一次转账请求要等待双方银行系统都完成整个事务才算完成,只要其中一个失败另一方执行回滚操作。

开户操作:在业务系统开户同时要在运营商开户,任何一方开户失败该用户都不可使用,所以要满足CP。

AP的场景:满足A舍弃C,强调可用性。

订单退款,今日退款成功,明日账户到账,只要用户可以接受在一定时间内到账即可。

注册送积分,注册成功积分在24分到账。

支付短信通信,支付成功发短信,短信发送可以有延迟,甚至没有发送成功。


分布式事务控制有哪些常用的技术方案?

  • 实现CP就是要实现强一致性:

  • 使用Seata框架基于AT模式实现

  • 使用Seata框架基于TCC模式实现。

  • 实现AP则要保证最终数据一致性:

  • 使用消息队列通知的方式去实现,通知失败自动重试,达到最大失败次数需要人工处理;

  • 使用任务调度的方案,启动任务调度将课程信息由数据库同步到elasticsearch、MinIO、redis中。

本次业务满足AP即可

如何保证任务的幂等性?

任务执行完成后从消息表删除,如果消息的状态是完成或不存在消息表中则不用执行。

如何保证任务不重复执行?

任务调度采用分片广播,根据分片参数去获取任务,另外阻塞调度策略为丢弃任务。

注意:这里是信息同步类任务,即使任务重复执行也没有关系,不再使用抢占任务的方式保证任务不重复执行。

如果一个任务有好几个小任务,比如:课程发布任务需要执行三个同步操作:存储课程到redis、存储课程到索引库,存储课程页面到文件系统。如果其中一个小任务已经完成也不应该去重复执行。这里该如何设计?

将小任务作为任务的不同的阶段,在消息表中设计阶段状态。

http://www.lryc.cn/news/16947.html

相关文章:

  • 2023年博管办香江学者计划、澳门青年学者开始申报
  • (二十一)、实现评论功能(1)【uniapp+uinicloud多用户社区博客实战项目(完整开发文档-从零到完整项目)】
  • 【Docker】初识Dcoker以及镜像操作(一)
  • (1)C#传智:在vs2022中基本了解(第一天)
  • 【数据结构与算法】算法的时间复杂度和空间复杂度
  • 不使用contab -e的方式,添加计划任务
  • sentry2摄像头之blink篇
  • springboot集成PDF导出
  • Podman 创建持久 MySQL 数据库容器
  • Java-反射
  • 构造agent类型的内存马(内存马系列篇十三)
  • JavaEE简单示例——<select>中的查询参数传递和结果集封装自动映射关系
  • 信息安全圈都在谈论CISP,CISSP,这两者有什么区别呢?
  • 浅谈Redisson实现分布式锁的原理
  • UVM实战(张强)-- UVM中的寄存器模型
  • 什么是 CSAT?这份客户满意度流程指南请查收
  • AD域备份和恢复工具
  • 老学长的浙大MPA现场复试经验分享
  • 制作证书链并进行验证
  • 基于python多光谱遥感数据处理、图像分类、定量评估及机器学习方法应用
  • 初识 git--本地仓库
  • Redis学习之持久化(六)
  • C++11 之 auto decltype
  • 论文笔记:How transferable are features in deep neural networks? 2014年NIP文章
  • python基于flask共享单车系统vue
  • C++11 之模板改进
  • Linux - POSIX信号量,基于环形队列的生产者消费者模型
  • 学习Flask之七、大型应用架构
  • CentOS9下编译FFMPEG源码
  • 炼石:八年饮冰难凉热血,初心如磐百炼成钢