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

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

  作者:小傅哥
  博客: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 分布式抽奖秒杀系统 学习更有价值的更抗用的实战手段。
同意出售!恭喜C罗!成功逃离曼联苦海,下家锁定这两队随着2223赛季五大联赛的陆续揭幕,我们又迎来了每周都有顶级足球比赛可看的日子,不过,就在各支球队激战正酣的时候,今年夏天的足坛转会市场,依旧在如火如荼的进行中要说今年夏窗最具焦点迪丽热巴点地成毯,出山即出圈娱乐聚焦没有最适合只有都适合迪丽热巴的每一个红毯造型直播造型活动造型都很适合她她真的什么风格都能驾驭披个麻袋也是最靓的仔。这一张是我心中的NO。1,绝美女王大人!脉脉眼中波,盈盈花五宗罪告诉你曼联如何被布伦特福德4比0血洗在北京时间2022年8月14日0030,英超第二轮,曼联客场挑战布伦特福德。赛前,或者没有太多人能想象到曼联会以这样大比分惨败于英超中下游球队,并且在开始落后之后,整支球队包括主教光遇如果4号加塞复刻,将实现快乐三连?破晓季新增烛火前言大家好,我是喜欢玩游戏聊游戏的孟婆小叔。随着官方一声令下,很多事也浮出水面,七夕节和破晓季,终于确定了。同时也证实一件事,官方真的被渠道服背刺了。比如华为服,就提前预约破晓季版金铲铲之战S7万血英雄随处可见,可再也找不到S6大虫子的快乐在金铲铲S6赛季中,大虫子科加斯是一个非常快乐的英雄,只要来得早,有合适装备就可以养出超高血量,一旦血量达到一万,完全可以硬抗三星五费英雄的技能。如三星的金克丝,伤害不过就是888在人人喊打的VR游戏里,我度过了快乐的一天虚拟现实平台的社交软件VRChat(以下简称VRC),一直以来都是VR平台玩家们最热门的一款游戏。不光是在VR圈子里,在B站,总能看见VRChat中玩家们一些好玩的片段成为了一些经我敢说!这六个隐藏极深的小米手机技巧,只有元老级米粉才知道根据小米今年Q1财报显示,目前小米MIUI手机系统月活跃率已超过5亿,在这其中无疑有数不尽的米粉支持,同时也恰巧说明小米手机的好用程度!今天就给大家深扒一下小米手机隐藏的六个技巧,红米k50至尊版背刺小米12SUltra?夺笋啊,网友用参数让红米k50u背刺了小米12su。按照网友的逻辑,只要参数数字够大就行了,不可否认,这次k50u的配置确实可以,但还不能跟12su相提并论,你大哥就是你大哥,首先浅谈何子楚的拳术造诣,年近70现场打拳,一跺脚竟蹬破地板相较于如今工作机会多不胜数的现代社会来说,我国从古代到近代这段漫长的历史中,子承父业这种就业形式可以说是一直都是主流存在。尤其是如传统武术这类涉及到一些密不外传的核心机密传承,其传南航在垂直石墨烯纳米壁中的EMI屏蔽性能研究中取得进展成果简介本文,南京航空航天大学沈鸿烈教授团队中国科学院上海微系统与信息技术研究所吴天如等研究人员在ACSAppl。Electron。Mater期刊发表名为SynthesisofVe北控阵容调整完毕!四内线再聚首,苦追超外未果,马布里计划泡汤北控男篮新赛季注册名单已经公布,14名本土球员分别为刘傲廖三宁李玮颢刘畅王少杰张帆孙思尧满奕呈王俊杰马泳罗凯文俞长栋孙桐林邹雨宸。在外援阵容方面,北控男篮只是签约了2米20高塔哈斯
幻塔搞出大BUG?无限抽卡还能刷官方补偿?网友比原神香了大家好,这里是正惊游戏,我是正惊小弟。为了消灭游戏的BUG,各家的游戏都要经过再三测试才会公测的,然而就算经过再多的测试也不可能消灭所有BUG。公测后要只是出现一些无伤大雅的小BU弹射世界超风铃铛,无船长参战打进1分钟作者NGAlittlefriendgao如题,参战18名角色无船长,给没有船长的玩家一点参考。我的阵容(爆弹火)队友1(面包火)队友2(贯通火)长途车最好的一次战记打进1分钟(运气2021年TapTap年度游戏大赏入围游戏公布看入围游戏名单前,下面3条划重点入围游戏为2020年11月20日2021年11月1日在国内或海外正式上线的游戏。TapTap今年还特别增设了最受玩家喜爱最佳持续运营两个玩家奖项。(传奇世界梦寐以求的天玄套大家好,我是阿曼,今天和大家分享下在传奇世界游戏中关于道士的套装天玄套。传说道神套装是以整块的青冥玉翠雕琢而成,晶莹剔透。唯有领会了道家真正的奥义的强者才能佩戴。依稀一些道家仙气混英雄联盟卢锡安她曾是我的全部,但他们带走了她原创联盟英雄攻略联盟英雄攻略今天给大家带来的是圣枪游侠卢锡安的教学(我们更习惯称呼他为奥巴马),这是一个高人气的AD,前期能力相当强大,爆发高,有位移,唯一的缺点是在ADC中手长倒LOLM在线人数不断衰减,首批玩家已成老友?游戏注定火不了自LOLM上线以来,官方在宣传方面真是不遗余力,但对于玩家的游戏体验却几乎是不管不顾,导致一再有网友在网上吐槽,各种问题层出不穷。这不,现在LOLM的处境非常悲惨,每天都有玩家退坑过分了,牙膏生日恰逢圣诞节,吃蛋糕都不露脸还要等明年?最近虎牙直播牙膏过生日了,而且这天正好是圣诞节,正因为这样的巧合,牙膏也决定生日要和粉丝们一起度过,因此在生日的时候牙膏会在虎牙直播间开启直播,同时还邀请了阿三一起来三排,从24日冬季转会期仅剩三天,老将Lionkk去向成焦点,秋哥透露关键信息12月28号下午3点2021PCL冬季转会期正式结束,距离目前只有三天不到的时间了,如果想要在明年有所建树,这个冬季赛必须要买到一些好的选手,现在联赛中也有一些不错的选手,比如说即Steam新游推荐1225索引MalodyV白日梦的构想图(CyanotypeDaydreamTheGirlWhoDreamedtheWorld)MalodyV关键字节奏关卡编辑发行日期20211225(中一生必去的12个地方,你去过几个?(下篇)毕淑敏曾经说旅游能让你从一个全新的身份,去体验新的人生,去寻找新的自我。7。乘坐竹排在阳朔的漓江上二十块钱的桂林风光,曾经是多少人梦寐以求的?由此可以看出,阳朔是人间仙境,风景秀丽2021年百元级入门游戏鼠标推荐指南文章仅针对入门级鼠标,尽量挑选品牌与销量比较高的型号,即使是入门级也要用得放心。另外文章会针对有线无线,大手小手等适用性特点对鼠标进行简单分类推荐,不会推荐太多,以免选择综合型用户