2021-04-22

背景

在master-worker中一般会采用全局mq进行任务分发,由worker进行依次拉取任务并执行。但是worker拉取任务是有一定耗时的(具体耗时因mq选型而异),另外在网络抖动等一些情况下,拉取耗时可能会变的很大,且不可控。

解决方案

预拉取

  • worker新增预拉取策略,本地缓存下一个要执行的任务
    • 等当前任务执行完之后,从buffer中取出,同时异步去拉取下一个任务

饥饿模式

上面的方案短板是很明显的,如果worker当前执行任务耗时太久,则会导致下一个任务执行的latency加大。这个是我们不希望看到的。

因此提出饥饿模式,这里我们需要一个manager,它负责维护任务分发等信息,并且我们需要给任务定义以下5种状态

  • 待分发
  • 已分发待执行,(已经分发给worker,等待执行)
  • 执行中,(worker已经在执行)
  • 执行完成
  • 饥饿模式

针对每个任务从分发出去开始,启动一个定时器,如果在一定时间范围内没有被执行,则该任务状态切换为饥饿模式,同时发命令给之前的worker取消执行buffer中的任务(因为是分布式的,任务可能被多次执行,所以需要保证幂等)。

针对饥饿模式的任务,因为已经等待了一定的时间,所以如果重新走任务分发可能也好导致单个任务latency较大,所以可以预启动一些worker做buffer,处理这种饥饿模式下的任务。

具体实现

manager

  • 维护一个已分发待执行的延迟队列,针对已经到期的任务, 执行将原worker删除任务命令 和 任务切换到饥饿模式。
  • 维护一个饥饿模式任务队列,当其不为空的时候,启用buffer-worker。
    • 问题:是否可以强制其他正常worker也先执行这边的任务。(这样的设计感觉有点负责,存疑)

worker

  • 针对本地任务的状态上报,对manager进行上报。manager收到状态变动后,对其状态进行修改。
  • 执行任务并异步拉取下一条任务。
    • 如果本地没有队列,向manager同步拉取并阻塞住。
  • 对worker而言,其自身不应该意识到自己是normal还是buffer。尽量让其执行任务和任务流转状态保持一致。

QA

饥饿模式名词的由来

参考自 go Mutex的设计:https://github.com/golang/go/blob/master/src/sync/mutex.go#L42

mutex等待队列中第一个goroutine在长时间抢占不到锁的时候,会将mutex切换到饥饿模式(starvation)。该模式下其他goroutine将不会再尝试抢占锁,这样就在一定程度上保证了goroutine抢占锁的公平性。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 225,529评论 6 524
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 96,683评论 3 406
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 172,905评论 0 370
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 61,318评论 1 303
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 70,325评论 6 401
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 53,754评论 1 316
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 42,081评论 3 431
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 41,088评论 0 280
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 47,653评论 1 327
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 39,651评论 3 347
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,766评论 1 355
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 37,359评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 43,083评论 3 341
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 33,491评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 34,654评论 1 278
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 50,367评论 3 383
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 46,836评论 2 367

推荐阅读更多精彩内容

  • 关于《电力企业内训师系统培养方案》企业培训是人力资源开发...
    师资供应阅读 387评论 0 0
  • 时间:2021年4月22日(星期三)下午5:30左右 地点:操场 人物:豆豆(4岁)、明明(3岁10个月)、辰辰(...
    柳柳说说阅读 251评论 0 0
  • 要提高企业效率,管理真的很重要 中国向来有“家和万事兴”的说法,兵法中除了...
    2华典智慧阅读 331评论 0 0
  • 外贸邮件有哪些不为人知的小技巧 好的外贸邮件可以带来很多外贸客户咨询,几乎每一个外贸订单的成交都离不开邮件,由此可...
    易家小健阅读 806评论 0 0
  • 30道大概率会考到的题( 11-15题) 本章内容 11,箭头函数特点 12,CSS盒模型 13,Vue组件dat...
    小王子__阅读 500评论 0 1