Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Workflow engine with go
Search
Tsuji Daishiro
January 25, 2020
Technology
0
1.8k
Workflow engine with go
Tsuji Daishiro
January 25, 2020
Tweet
Share
More Decks by Tsuji Daishiro
See All by Tsuji Daishiro
Starting static analysis with Go
tutuz
0
2k
実務で役立つTCPクライアントの作り方
tutuz
6
5.2k
What's new Context in Go1.14
tutuz
2
1.5k
Workflow engine with go #2
tutuz
0
1.2k
Nginx cache pitfalls
tutuz
0
230
Check inline expansion with Go
tutuz
0
2.9k
Parallel-Simulated-Annealing
tutuz
3
4.8k
Other Decks in Technology
See All in Technology
地域コミュニティへの「感謝」と「恩返し」 / 20250726jawsug-tochigi
kasacchiful
0
120
生成AI時代におけるAI・機械学習技術を用いたプロダクト開発の深化と進化 #BetAIDay
layerx
PRO
1
760
モバイルゲームの開発を支える基盤の歩み ~再現性のある開発ラインを量産する秘訣~
qualiarts
0
1k
AI によるドキュメント処理を加速するためのOCR 結果の永続化と再利用戦略
tomoaki25
0
310
ファインディにおける Dataform ブランチ戦略
hiracky16
0
250
データ基盤の管理者からGoogle Cloud全体の管理者になっていた話
zozotech
PRO
0
160
Kiroから考える AIコーディングツールの潮流
s4yuba
3
590
LIFF CLIとngrokを使ったLIFF/LINEミニアプリのお手軽実機確認
diggymo
0
140
20250728 MCP, A2A and Multi-Agents in the future
yoshidashingo
1
190
解消したはずが…技術と人間のエラーが交錯する恐怖体験
lamaglama39
0
160
2025-07-25 NOT A HOTEL TECH TALK ━ スマートホーム開発の最前線 ━ SOFTWARE
wakinchan
0
200
増え続ける脆弱性に立ち向かう: 事前対策と優先度づけによる 持続可能な脆弱性管理 / Confronting the Rise of Vulnerabilities: Sustainable Management Through Proactive Measures and Prioritization
nttcom
1
230
Featured
See All Featured
Thoughts on Productivity
jonyablonski
69
4.8k
It's Worth the Effort
3n
185
28k
Bash Introduction
62gerente
613
210k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.4k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3k
Six Lessons from altMBA
skipperchong
28
3.9k
Designing for humans not robots
tammielis
253
25k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.2k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
A better future with KSS
kneath
238
17k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
182
54k
Transcript
ワークフローエンジンをGoで作る 2020/01/25 Umeda.go 2020 Winter 辻大志郎 @d_tutuz
None
Who are you? • 辻 大志郎(つじ だいしろう) @d_tutuz 渋谷区役所(~2014/9) Future
Architect(2014/10~) • 所属 Technology Innovation Group 競技プログラミング部
ワークフローエンジンとは 以下のようなことを実施するソフトウェア • 定期的なタスクの実行 • タスク間の依存関係を定義でき、順序関係を制御してタスクを実行 • タスクの実行状況/結果を管理
データ分析基盤などでよく用いられる • 定型業務の自動化 ◦ 大量のデータの収集 ◦ データの加工 ◦ データの集計
用語の定義(タスクとフロー) • タスク:処理の単位 • フロー:タスクの集合 タスク フロー データソース データレイク データマート
タスク タスク
既存のワークフローエンジン • たくさんある ◦ airflow ◦ argo ◦ rundeck ◦
cadence ◦ azkaban ◦ JP1 ◦ … • 十分に高機能&汎用的だが、扱いにくかったり... • ワークフローは業務と密に結合することが多い • シンプルなワークフローエンジンを作ってみたかった
Flowerを作った • フロー(Flow)を扱うソフトウェア(er)ということでFlower https://github.com/d-tsuji/flower
アーキテクチャ • Register(タスクの実行登録) • Watcher(タスクの実行監視/制御) • Worker(タスクの実行)
Flowerの特徴 • タスク管理 ◦ タスクの順序をマスタで一括管理 ◦ パラメータなどの埋め込みが可能 ◦ タスクを構成する処理はComponentとしてGoで実装 •
リカバリ/リラン ◦ エラー時にどのタスクでエラーになったかわかる仕組みを提供 ◦ テーブルのレコード更新でリランが可能 • 重複実行制御 • 流量制御
タスクの定義方法 • AirflowではPythonファイルとして処理と実行順序を記述 • タスクはGoのソースで、実行順序はマスタで管理できるようにしたかった タスク定義例 タスク例 タスク定義マスタ
タスク実行管理/制御 • タスクは管理テーブルで永続化 ◦ タスクのロスト、重複実行の制御は最重要な要素の一つ ◦ RDBMSが一番扱いやすい タスク管理テーブル exec_status 0:実行待ち
1:実行中 3:完了
重複実行制御 • 実行待ちタスクの行ロックを取得してから実行中に更新 • 実行中にステータスを更新して、workerにタスクをput • 同時に実行待ちタスクが参照されて二重にタスクが実行されることを防止 次に実行するタスクはこ のレコード 完了
実行待
流量制御 • 「実行中+実行待ちのタスク≦同時実行数」の場合はworkerにputしない 完了 実行中 実行中 実行待 実行待 例)同時実行数が2の場合 同時実行数を超えるので
zzzzzのフローのタスクは実行しない
落ち葉拾い • タスク監視のポーリング ◦ キュー(SQSとか)をはさめばイベント通知にできる • スケジューラ • 管理コンソール ◦
ほしいけど作っていない