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/m.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燈, 水草

請輸入看板名稱,例如:e-shopping站內搜尋

TOP