Soft_Job 板


LINE

文字教学: https://bit.ly/3jFMwvS 教学影片: https://bit.ly/3WI0Wdx 范例程式: https://bit.ly/3Z0U6Bt 系统架构图: https://i.imgur.com/VZyfv0M.png 本篇来聊聊『如何取消正在执行的工作任务』,当系统内有需要处理比较久或较多资源的 任务,肯定会将这些任务丢到其他机器再执行,执行过程如果需要取消,会经过如上图几 个步骤。先假设中间的过程不透过 Message Queue 机制,而是两个服务进行沟通透过 RESTful 或 gRPC 方式。 ## 使用情境 可以看到步骤一是 worker 会先发请求到後端服务,询问目前正在执行的任务是否取消, 这边可以用一个长连接持续 30 秒或 1 分钟才断线。步骤二是 User 从 Web UI 端按下 取消的按钮。步骤三是後端服务接受到取消任务的请求,就回覆 Worker 到请求执行取消 任务。 大家可以想看看此情境该如何设计流程,先不考虑多台後端服务的情境,也不考虑使用 Message Queue 的方式来实作。也许大家有想到一种方式,就是当使用者按下取消时 (到 步骤三),後端服务将此任务的状态改成取消。而 Worker 每次来询问状态 (步骤一),後 端就再查询一次就可以了 (步骤四),这方式也没有不对,只是即时性效果比较差,如果 是每 30 秒轮询一次,就有可能 30 秒後才能取消任务,轮询时间设定很短,又会造成过 多不必要的连线请求。除了这种方式外,还有没有其他方式可以不需要查询资料库就可以 即时让 Worker 知道目前任务状态。 目前先讲单机版解法,非常适用於要将服务部署在不同团队内。 ## 心得 本篇最主要是要用 Go 语言的 Channel 特性来处理两个服务之间的沟通机制,大家可能 想到的解法就是用 Message Queue 来处理,但是有时候把架构想的更简单一点,用 Go 语言的特性来处理,那就减少一个服务的维运,未来要将此架构转换到其他平台就会更简 单,其他部门有需求会是将整套服务架设在不同团队内,这时候架构越简单,除错时间会 越短。 -- AppleBoy Blog: http://blog.wu-boy.com --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.110.136.13 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1672537150.A.DD7.html ※ 编辑: appleboy46 (123.110.136.13 台湾), 01/01/2023 10:05:18
1F:→ loadingN: mq够简单了吧... 要转换到其他地方也不难 01/01 10:12
2F:→ ddoll288: 火山表示___ 01/01 10:58
3F:→ alan3100: ..哪个语言没内建mq 01/01 12:01
4F:推 LincolnBoy: 楼上那篇怎麽删文了 01/01 13:01
5F:→ alan3100: mq外部化可以让上下游达到stateless 01/01 14:17
6F:→ alan3100: subscriber每个语言都有 不太会自己实作多少秒观察一次 01/01 14:19
7F:→ alan3100: 除非服务很简单,不然用外部mq对维护营运上比较容易 01/01 14:24
8F:→ TSW: 感觉只是为了写而写.... 01/02 06:56
9F:嘘 Murasaki0110: 语言dependent又不scalable,算什麽系统设计?随便 01/02 09:48
10F:→ Murasaki0110: 哪个mq维护成本也比维护这土炮架构好 01/02 09:48
11F:→ lance70176: MQ 设计好多了吧 01/03 07:46
12F:→ appleboy46: 用 MQ 处理长时间的任务,可能会遇到底下问题 01/04 11:50
13F:→ appleboy46: 1. 如何取得目前任务的状态? 01/04 11:51
14F:→ appleboy46: 2. 如何设定任务超时机制? 01/04 11:51
15F:→ appleboy46: 3. 如何跨服务取消任务? 01/04 11:52
16F:→ appleboy46: 4. 当 Worker 失去连线或不正常关闭,该如何让 Task 01/04 11:52
17F:→ appleboy46: 可以重新执行? 01/04 11:52
18F:→ appleboy46: 5. 当有多台 Server + 多台 Worker 时,该如何配送任 01/04 11:52
19F:→ appleboy46: 务及取消任务? 01/04 11:53
20F:→ alan3100: ..你没用过mq吧 不然应该不会问4&5 01/04 22:12
21F:→ alan3100: 别说task派送和取消了 现在还有跨服务交易但不绑连线 01/04 22:15
22F:→ alan3100: 可以查saga pattern. 01/04 22:18
23F:→ alan3100: 後面worker达到stateless很基本 就算土炮应该也不该担心 01/04 22:30
24F:→ alan3100: 失去连线或当掉或不正常关闭 就算你直接kill-9也可以 01/04 22:32
25F:→ alan3100: 直接查async request reply 或直接查go原始码 你会发现 01/04 23:14
26F:→ alan3100: 里面一定会有queue. 你只是享受别人封装好的 01/04 23:15
27F:→ peter98: 原po需要好好了解系统设计 人家如果问你"如何取消正在执 01/04 23:31
28F:→ peter98: 行的工作任务" 你在面试中会被炮到你完全无法讲答案 01/04 23:31
29F:→ peter98: 因为你回答的不是系统设计 01/04 23:31
30F:→ peter98: *你在面试中"这样答"会被炮到你完全无法讲答案 01/04 23:32
31F:→ peter98: 你这题答案所对应的问题是: 如何实作一个MQ来实现基本的 01/04 23:33
32F:→ peter98: 工作任务取消" 多注意点就好 感觉你没面试过系统设计 01/04 23:34
33F:→ peter98: 题目 或者你面试的公司比较low 不知道甚麽是系统设计 01/04 23:34
34F:→ peter98: 另外有认真做过硕论的话 不应该发生你这样的问题就是 01/04 23:36
35F:→ peter98: 你的标题跟本文如果对应到硕论题目跟本文(这边不论这东 01/04 23:38
36F:→ peter98: 西是否适合作为一个硕论题目) 你早就被教授炮到台上回家 01/04 23:39
37F:→ peter98: 哭也不是 不哭也不是。。。百分之百被炮的 01/04 23:39
38F:→ leolarrel: 现在刷leet code 才是高手保证.系统设计? 那是啥 01/05 10:59
39F:→ w0005151: 其实除了那几间大公司,现在考leetcode没那麽普遍 01/05 14:01
40F:→ w0005151: senior以上都还满注重系统设计的 01/05 14:01
41F:→ appleboy46: 了解了,我在把标题定义清楚些 01/05 15:21
42F:→ appleboy46: 感谢 @peter98 及 @alan3100 建议 01/05 15:21
43F:推 lovdkkkk: 上述 12345 MQ, 纯 http, 纯 socket, 纯 channel 或混用 01/06 00:07
44F:→ lovdkkkk: 应该都做得到, 只是实作花的时间跟运行成本可能有差 01/06 00:08
45F:→ lovdkkkk: 它们都只是通讯手段, 只是有的单向有的双向, 有的帮你排 01/06 00:09
46F:→ lovdkkkk: 好序, 有的提供端点识别或方便的广播, 或自动重送重试 01/06 00:11
47F:→ lovdkkkk: 需要实现的其实也只有 1. 对特定 server/worker 发送 01/06 00:13
48F:→ lovdkkkk: 2. 广播, 3. 针对特定 task 下指令 三件事 01/06 00:14
49F:→ lovdkkkk: 系统设计是很多方法都做得到再去做取舍, 如果很明确只有 01/06 00:16
50F:→ lovdkkkk: 特定方法才做得到的事情就不用设计了, 反正没得选 01/06 00:16
51F:→ appleboy46: 公司内部特定环境,没办法使用 MQ 等相关 Component 01/06 09:49
52F:→ appleboy46: 所以才有了这些方法跟机制来实现。 01/06 09:50
53F:推 ma721: ctrl alt del 01/09 17:06







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Tech_Job站内搜寻

TOP