范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

架构方案优化分布式延迟任务触达时效性

  作者:小傅哥
  博客:https://bugstack.cn -  包含: Java 基础,面经手册,Netty4.x,手写Spring,用Java实现JVM,重学Java设计模式,SpringBoot中间件开发,IDEA插件开发,DDD系统架构项目开发,字节码编程...
  沉淀、分享、成长,让自己和他人都能有所收获! 一、前言
  不卷了,能用就行!
  哈哈哈,说好的不卷了,能凑活用就行了。但每次接到新需求时都手痒,想结合着上一次的架构设计和落地经验,在这一次需求上在迭代更新,或者找到完全颠覆之前的更优方案。 卷完代码的那一刻总是神清气爽
  其实大部分喜欢写代码的一类纯粹码农,都是比较卷的,就比如一个需求在实现上是能用大概 是P5 、如果这个做出来的功能不只是能用还非常好用是P6 、除了好用还凝练共性需求开发成通用的组件服务是P7 。每一个成长过来的码农,都是在造轮子的路上一次次验证自己的想法和加以实践,绝对不是一篇篇的八股文就能累出来一个高级的技术大牛。二、延迟任务场景
  什么是延迟任务?
  当我们的实际业务需求场景中,有一些活动开始前的状态变更、订单结算后的T+1对账、贷款单息费的产生,都是需要使用到延迟任务来进行触达。实际的操作一般会有 Quartz、Schedule 来对你的库表数据进行定时扫描和处理,当条件满足后做数据状态的变更或者产生新的数据插入到表中。
  这样一个简单的需求就是延迟任务最初需求,如果需求前期内容较少、使用方不多,可能在实际开发中就只是一个单台机器直接对着表一顿轮训就完事了。但随着业务需求的发展和功能的复杂度提升,往往反馈到研发设计和实现,就不那么简单了,比如:你需要保障尽可能低延迟完成较大规模的数据量扫描处理,否则就像贷款单息费的产生,已经到了第二天用户还没看到自己的息费信息或者是还款后的重新对账,可能就这个时候就要产生客诉了。
  那么,类似这样的场景该如何设计呢? 三、延迟任务设计
  通常的任务中心处理流程主要,主要是由定时任务扫描任务库表,把即将达到超时时间的任务信息扫描到处理队列( 内存/MQ消息 ),再由业务系统进行处理任务,处理完成后更新库表中的任务状态。
  高延时任务调度
  问题 : 海量数据规模较大的任务列表数据,在分库分表下该需要快速扫描。 任务扫描服务与业务逻辑处理,耦合在一起,不具有通用性和复用性。 细分任务体系有些是需要低延迟处理的,不能等待过长时间。 1. 任务表方式
  除了一些较小的状态变更场景,例如在各自业务的库表中,就包含了一个状态字段,这个字段一方面有程序逻辑处理变更的状态,也有到达 指定到期 时间后由任务服务自动变更处理的操作,一般这类功能,直接设计到自己的库表中即可。
  那么还有一些较大也较为频繁使用的场景,如果都是在每个系统的各自所需的N多个表中,都添加这样的字段进行维护,就显得非常冗余了,也不那么易于维护。所以针对这样的场景就很适合做一个通用的任务延时系统,各业务系统把需要被延时执行的动作提交到延时系统中,再有延时系统在指定时间下进行回调,回调的动作可以是接口或者MQ消息进行触达。例如可以设计这样一个任务调度表:
  任务调度库表设计 抽取的任务调度表,主要是拿到什么任务,在什么时间发起动作,具体的动作处理仍交给业务工程处理。 大批量的各自业务的任务进行集中处理,则需要设计一个分库分表,满足于后续业务体量的增长。 门牌号设计,针对一张表的扫描,如果数据量较大,又不希望只是一个任务扫描一个表,可以多个任务扫描一个表,加到扫描的体量。这个时候就需要一个门牌号来隔离不同任务扫描的范围,避免扫描出重复的任务数据。 2. 低延迟方式
  低延迟处理方案,是在任务表方式的基础上,新增加的时间把控处理。它可以把即将到期的前一段时间的任务,放置到 Redis 集群队里中,在消费的时候再从队列中 pop 出来,这样可以更快的接近任务的处理时效,避免因为扫库间隔较大延迟任务执行。
  任务处理流程 在接收业务系统提交进来的延迟任务时,按照执行时间的长短放置到任务库或者也同步到 Redis 集群中,一些执行时间较晚的任务则可以先放到任务库,再通过扫描的方式添加到超时任务执行队列中。 那么关于这块的设计核心在于 Redis 队列的使用,以及为了保证消费的可靠性需要引入二阶段消费、注册 ZK 注册中心至少保证一次消费的处理。 本文重点主要放在 Redis 队列的设计,其他更多的逻辑处理,可以按照业务需求进行扩展和完善
  Redis 消费队列
  Redis 消费队列 按照消息体计算对应数据所属的槽位  index = CRC32 & 7 StoreQueue 采用 Slot 按照 SlotKey =  #{topic}_#{index}  和 Sorted Set 的数据结构按执行任务分数排序,存放任务执行信息。定时消息将时间戳作为分数,消费时每次弹出分数小于当前时间戳的一个消息 为了保障每条消息至少可消费一次,消费者不是直接 pop 有序集合中的元素,而是将元素从 StoreQueue 移动到 PrepareQueue 并返回消息给消费者。消费成功后再从 PrepareQueue 从删除,如果消费失败则从PreapreQueue 重新移动到 StoreQueue,这样二阶段消费的方式进行处理。 参考文档:2021 阿里技术人的百宝黑皮书PDF文, 低延迟的超时中心实现方式
  简单案例 @Test public void test_delay_queue() throws InterruptedException {     RBlockingQueue blockingQueue = redissonClient.getBlockingQueue("TASK");     RDelayedQueue delayedQueue = redissonClient.getDelayedQueue(blockingQueue);     new Thread(() -> {         try {             while (true){                 Object take = blockingQueue.take();                 System.out.println(take);                 Thread.sleep(10);             }         } catch (InterruptedException e) {             e.printStackTrace();         }     }).start();     int i = 0;     while (true){         delayedQueue.offerAsync("测试" + ++i, 100L, TimeUnit.MILLISECONDS);         Thread.sleep(1000L);     } }
  测试数据 2022-02-13  WARN 204760 --- [      Finalizer] i.l.c.resource.DefaultClientResources    : io.lettuce.core.resource.DefaultClientResources was not shut down properly, shutdown() was not called before it"s garbage-collected. Call shutdown() or shutdown(long,long,TimeUnit)  测试1 测试2 测试3 测试4 测试5  Process finished with exit code -1 源码:https://git***.com/fuzhengwei/TimeOutCenter 描述:使用 redisson 中的 DelayedQueue 作为消息队列,写入后等待消费时间进行 POP 消费。 四、总结调度任务的使用在实际的场景中非常频繁,例如我们经常使用 xxl-job,也有一些大厂自研的分布式任务调度组件,这些可能原本都是很小很简单的功能,但经过抽象、整合、提炼,变成了一个个核心通用的中间件服务。 当我们在考虑使用任务调度的时候,无论哪种方式的设计和实现,都需要考虑这个功能使用时候的以为迭代和维护性,如果仅仅是一个非常小的场景,又没多少人使用的话,那么在自己机器上折腾就可以。 过渡的设计和使用有时候也会把研发资源代入泥潭 其实各项技术的知识点,都像是一个个工具,刀枪棍棒斧钺钩,那能怎么结合各自的特点,把这些兵器用起来,才是一个程序员不断成长的过程。如果你希望了解更多此类有深度的技术内容,可以加入 Lottery 分布式抽奖秒杀系统 学习更有价值的更抗用的实战手段。
有什么是你去齐齐哈尔才知道的事情?齐齐哈尔市有着300多年的建城史和255年的黑龙江省会史,是世界珍禽丹顶鹤的栖息地,素有中国优秀旅游城市之称。改革开放40年来,齐齐哈尔市着力保护原始生态资源,拥有中国最大世界闻名痛风与豆制品真的对立吗?你怎么看?在我的临床工作中,经常会做痛风石切除术。据我了解,这些人群对于痛风患者的饮食就存在很多认识的误区。豆制品嘌呤含量高?一直以来,许多医学的专业人士都认为豆类和豆制品的嘌呤含量较高。所都知道空腹血在3。96。1都是正常的,空腹血糖多少最好?都知道空腹血在3。96。1都是正常的,空腹血糖多少最好?空腹血糖是指在隔夜空腹(至少812小时未进任何食物,饮水除外)后,次日清晨早餐前所测的血糖。它是糖尿病最常用的检测指标,代表如何评价柳传志?你又如何评价褚时健?这二人,你更尊重谁?褚时健是拿了应该属于他的,柳传志是拿了他不该拿的。褚时健没有变卖国有资产,柳传志把国有资产私有化。褚时健值得同情和尊敬,柳传志不值得。烟草大王褚时健,最起码他是爱国的,没有转移国家985应届生毕业就失业是什么感受?虽然985毕业生较之211和普通高校生是高学府中的佼佼者,重点中的重点,但人的表现总有好中差,经验也有足与弱,如进入似华为和人工智能及互联网包括如今受美国恶卡围堵的芯片制造等高科技做代驾需要哪些条件?代驾的收入怎么样?大家好,很高兴回答这个,我用我的亲身经历告诉大家做代驾的感受。总的来说收入还可以,我做的平台是滴滴代驾,代驾这个行业一般都是晚上单子比较多,(可以兼职)价格也高,一晚上多的话可以收想尽快把中人工资领到手,这样想法能实现吗?首先纠正,是中人退休金,而不是中人工资。想尽快把中人退休金领到手,这样的想法是完全可以理解的,现实不现实由政策说了算。自国务院关于行政事业单位工作人员养老保险制度改革的决定发布,行做家务的保姆想让东家加工资,该怎么说?做家务的保姆想让东家加工资,我认为这个和职场上升职加薪的道理是一样的。那么怎么才能升职加薪呢?我认为是把事情做到极致,深度为雇主思考考虑技能提升适当时候直接提几个方面简要说明。一把孙兴慜为什么不要求离开热刺,反而跟热刺续约了?孙兴慜与热刺续约是明智的的选择。其理由如下1。孙兴慜年龄已近30岁,在足球场上毕竟象C罗梅西或过往的米拉大叔一样的运动员少之又少,失去的青春不再让他左顾右盼,挑肥拣瘦2。热刺历来以AC米兰和尤文图斯谁才是豪门?我是体坛霸主我来回答这个问题。这俩支球队都是豪门!区别在于AC米兰是顶级豪门,而尤文图斯是超级豪门,总体来说AC米兰略强于尤文图斯。AC米兰篇AC米兰始创于1899年,是一支有着1现在坐火车都实名制,被拉进黑名单能买到火车票能坐上火车吗?我是一个就像你说的被拉到黑名单的人,我是去年法院强制执行的,俗称为老赖,为什么被强制执行成老赖呢,因为有钱不还!我从去年的2月份就开始被银行起诉了,因为我被起诉的时候,我并不知道自
选购或者更换手机的五条根本原则是什么?本文来告诉你当前科技发展日新月异,智能手机迭代极快,各种品牌琳琅满目,有不少朋友在选购新机或者更换旧机的过程中,往往左顾右盼,焦虑不堪,难以抉择。今天本文就为您解忧消愁,为您梳理出五条根本的原9月十大劲爆热文全面屏iPhone15设计图曝光国产芯不用EUV光刻机也能造每年的9月份对于硬件圈来说可谓是意义非凡,毕竟有着科技春晚之称的苹果秋季新品发布会都会在每年9月拉开大幕,而今天的主角自然是大家期待已久的iPhone14系列,灵动岛的设计终于在N虞书欣红了以后就是不一样,穿的衣服一套比一套贵,真好看虞书欣在大家的眼中是一位非常漂亮的演员,只是之前她的漂亮一直都没有向大众展现出来,近期她的一些时尚穿搭震惊了大家的眼球,大家这才发现,正所谓是红气养人。红了之后的虞书欣反而越变越漂眼角平平无奇一颗黑痣,一查竟是癌33岁的美美(化名),两年前在照镜子时,无意间发现自己眼角边上长了一颗米粒大小的黑痣。痣大家都会长的,一开始不痛不痒,脸上平时化化妆也看不出来,所以美美从来没把它当回事。后来不知不宝玑手表属于什么档次?宝玑为什么会这么贵宝玑(Breguet)多年来一直是瑞士钟表最重要的代名词,近年在历经公司重组。1747年,宝玑在瑞士的纳沙泰出生,他大部分时间居于巴黎,一生中创造无数伟大的发明,他活跃于制表业中每5G万物,中国人闯出数字生活新天地视频加载中中新网北京10月3日电题十年中国风5G万物,中国人闯出数字生活新天地记者宋宇晟峰顶5G信号特别好。2020年5月,登山队员在珠峰峰顶通过5G网络拨通电话。登山队登顶测量的有多大的手,就端多大碗,有多大的承受力就干多大的事俗话说有多大的手,就端多大的碗。小手端大腕,端不稳还容易把碗打碎。有多大的能耐,就做多大的事,超出你的能力,能力不足容易穷途末路,也容易跌落人生的低谷。身边有个朋友,误信了一位商业国庆三愿今天,是祖国73华诞,首先祝愿祖国繁荣昌盛人民安居乐业家人平安健康!在变乱交织的世界,在这疫情战火冷战混成的年代,在这不确定性因素增多逆周期调节困难各类矛盾问题混杂的时候,我们既要杨幂的10幅美图,张张都是珍藏款1。爱人就像粗布衣,虽然不美丽,可是能遮挡风寒。情人就像时装,感觉很美好,却不能穿出去。2。人生三大遗憾不会选择,不坚持选择,不断地选择。3。不管别人怎么看走好自己的路,别人满意,新车比低配贵1万多十余项实用配置,实拍捷途大圣王者PRO版文懂车帝原创张凯懂车帝原创产品本月初,捷途大圣正式上市,作为紧凑型SUV市场新成员,新车不仅提供传统燃油动力,还有插电式混合动力可选。其中前者搭载1。6升涡轮增压发动机,售价区间9人不得志怎么办?少感慨怀才不遇,多思考如何成才世人都说李广难封提拔都是看关系的,我家里没什么关系,还是早早选择躺平吧!领导是眼瞎了吗,我这么优秀他竟然看不见。我能力比他强十倍,但是领导就是不提拔我,谁叫我没有关系呢。毕业后,我