分布式异步任务处理组件(二)

这篇具有很好参考价值的文章主要介绍了分布式异步任务处理组件(二)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一些关键点的设计脑暴记录----very important!!!文章来源地址https://www.toymoban.com/news/detail-615710.html

  1. 首先,任务存储交给kafka,由节点负责写入kafka,acks=1;失败重试;透传kafka的提交可靠性,保证任务提交成功;后续可以考虑自己实现kafka相关机制---做局部优化,因为强依赖kafka
  2. 如何保证消息唯一被消费一次---集群状态维护全局消息唯一key,在写入kafka之前生成,保证提交的任务具有全局唯一key;每次消息执行成功做集群广播,通知到一半以上的节点再持久化(这里考虑一半以上节点还是所有节点,应该是所有节点才行--研究一下一半以上的架构模型适用于什么场景);每个节点间隔时间做持久化,因为是集合操作保证不会重复;间隔时间做持久化保证性能;(这里存在疑点,如果多节点同时失败怎么办,参考zookeeper的持久化机制,或者集群同步机制)保证全局key持久化成功,这样不能保证任务消息只被提交一次---数据库操作才可以保证,需要依赖回滚机制;;;有些任务不具有回滚性质--比如发送邮件。如何处理?可以分为两段提交,prepare状态在发邮件之前执行,提供检查策略用于其他节点检查邮件是否真实被执行;数据库操作提供自检查--检查全局ID即可;文件和邮件短信之类的操作需要用户提供检查策略;---理论上严格保证唯一执行需要每次处理任务前执行检查策略--所以这里要可配置,是否需要严格只执行一次,还是至少被执行一次--原理和提交可靠性一样---也不太一样,提交策略是至少被提交一次,其实有可能多次提交;
  3. 如何维护集群状态全局唯一key,预分配+全局投票;
  4. 再谈如何保证消息唯一被消费一次--全内存操作,只有消息消费成功才给kafka提交offset,因为是全内存操作保证每次拉取的消息数量不会太多;---怎么保证消息不回积压--积压问题通过集群部署实现,因为全内存操作保证最大运行能力,还产生积压说明系统配置不够;--非必要不考虑将消息再次持久化,如果要持久化只考虑持久化极少数一部分;
  5. 集群状态通过全局广播或者zookeeper来实现--基本上考虑节点上线和节点下线问题;也要考虑节点网络延迟问题;--一般来说全局广播和zookeeper的原理是一样的;
  6. 定制化分布式线城池--任务分类;优先级;线程池动态监控和动态调整;---详细考虑设计哪些参数,比如任务执行时间,单任务实际线程运行时间和阻塞时间,IO操作时间--然后对任务打标签---标签是否需要广播,广播后在任务提交时就打标签,以配合自我流量控制;
  7. 任务处理器handler如何注册--动态加载;JNI;或者RPC--这三种方式应该都要支持;
  8. 单节点流量控制--根据当前节点实际任务执行情况做流量控制,单节点消费能力做流量调节跟其他节点没有关系--因为是最大能力执行;
  9. 延时队列怎么实现--双队列--实时队列和延时队列--但是这里也要配合标签和流量控制考虑到实际上的延时队列跟实际上的实时队列的差别---延时队列分为两种--一种是计时结束后需要立即执行,另一种是计时结束后重新入队;
  10. 因为保证强可靠性,任务是否支持子任务或者叫任务递归,任务嵌套--比如自动扣费成功后产生生成订单任务---在扣费任务里提交生成订单即可,不需要组件做管理;---第10点不用考虑;
  11. 单节点流量控制需要规避大任务阻当小任务的情况发生---比如一个大任务挡住所有后续所有小任务的执行;所以这里需要保证所有任务不是严格顺序执行的;比如一部分线程宁愿空着也不能消费大任务,这里可以做任务类型队列,CPU密集型任务队列,IO密集型任务队列,总时间小的任务队列,总时间长的任务队列;-----衡量标准要考虑绝对参数,自适应性参数调节可能产生相对参数;

到了这里,关于分布式异步任务处理组件(二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Asynq: 基于Redis实现的Go生态分布式任务队列和异步处理库

    Asynq [1] 是一个Go实现的分布式任务队列和异步处理库,基于redis,类似Ruby的 sidekiq [2] 和Python的 celery [3] 。Go生态类似的还有 machinery [4] 和goworker 同时提供一个WebUI asynqmon [5] ,可以源码形式安装或使用Docker image, 还可以和Prometheus集成 docker run --rm --name asynqmon -p 8080:8080 hibiken/as

    2024年02月14日
    浏览(41)
  • 分布式异步任务框架celery

    Celery是一个基于消息中间件的分布式任务队列框架,专门用于处理异步任务。它允许生产者发送任务到消息队列,而消费者则负责处理这些任务。Celery的核心特性包括异步执行、实时操作支持以及强大的调度能力,使其每天可以处理数以百万计的任务。 在Celery中,任务是以

    2024年04月10日
    浏览(45)
  • celery分布式异步任务队列-4.4.7

    version 4.4.7 学习总结 python实现、开源、遵循BSD许可的分布式任务队列; 可以处理大量消息,简单、灵活、可靠的分布式系统,专注任务的 实时处理 和 定时调度 处理; 它是线程、进程分配任务的一种机制,官方仅做支持linux开发。 五大部分: task,任务 beat,定时调度管理器

    2024年02月07日
    浏览(43)
  • 分布式任务调度,定时任务的处理方案

    适用场景: Spring 定时任务是 Spring 框架提供的一种轻量级的任务调度方案,它的特点是简单易用、轻量级。Spring 定时任务的执行是在 单个节点 上进行的,如果需要分布式任务调度,需要自己实现相应的解决方案。 1.导入依赖版本自己控制 2.启动类加上@EnableScheduling 3.编写业

    2023年04月14日
    浏览(60)
  • 4.4 媒资管理模块 - 分布式任务处理介绍、视频处理技术方案

    视频转码是指的对视频文件的编码格式进行转换 视频上传成功需要对视频的格式进行转码处理,比如:avi转成mp4 一般做文件存储的服务都需要对文件进行处理,例如对视频进行转码处理,可能由于文件量较大需要使用多线程等技术进行高效处理 文件格式 :是指.mp4、.avi、

    2024年02月02日
    浏览(48)
  • Celery分布式异步框架

    \\\"\\\"\\\" 1)可以不依赖任何服务器,通过自身命令,启动服务(内部支持socket) 2)celery服务为为其他项目服务提供异步解决任务需求的 注:会有两个服务同时运行,一个是项目服务,一个是celery服务,项目服务将需要异步处理的任务交给celery服务,celery就会在需要时异步完成项目的

    2024年02月11日
    浏览(43)
  • 分布式、锁、延时任务

    Redis分布式锁-这一篇全了解(Redission实现分布式锁完美方案) ls / / 下有哪些子节点 get /zookeeper 查看某个子节点内容 create /aa “test” delete /aa set /aa “test01” 模式 默认创建永久 create -e 创建临时 create -e /zz “hello zz” create -s 创建 有序节点 create -s -e 临时序列化节点 一次性的监

    2024年02月09日
    浏览(66)
  • 分布式定时任务

    本文引用了谷粒商城的课程 定时任务是我们系统里面经常要用到的一些功能。如每天的支付订单要与支付宝进行对账操作、每个月定期进行财务汇总、在服务空闲时定时统计当天所有信息数据等。 定时任务有个非常流行的框架Quartz和Java原生API的Timer类。Spring框架也可以支持

    2023年04月15日
    浏览(53)
  • 分布式任务调度系统分析

    首先,我们来思考一些几个业务场景: XX 信用卡中心,每月 28 日凌晨 1:00 到 3:00 需要完成全网用户当月的费用清单的生成 XX 电商平台,需要每天上午 9:00 开始向会员推送送优惠券使用提醒 XX 公司,需要定时执行 Python 脚本,清理掉某文件服务系统中无效的 tmp 文件 最开始,

    2023年04月22日
    浏览(68)
  • ray-分布式计算框架-集群与异步Job管理

    0. ray 简介 ray是开源分布式计算框架,为并行处理提供计算层,用于扩展AI与Python应用程序,是ML工作负载统一工具包 Ray AI Runtime ML应用程序库集 Ray Core 通用分布式计算库 Task -- Ray允许任意Python函数在单独的Python worker上运行,这些异步Python函数称为任务 Actor -- 从函数扩展到类

    2023年04月25日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包