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.9k
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.3k
Nginx cache pitfalls
tutuz
0
240
Check inline expansion with Go
tutuz
0
2.9k
Parallel-Simulated-Annealing
tutuz
3
4.9k
Other Decks in Technology
See All in Technology
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
11
77k
動画データのポテンシャルを引き出す! Databricks と AI活用への奮闘記(現在進行形)
databricksjapan
0
130
PLaMo2シリーズのvLLM実装 / PFN LLM セミナー
pfn
PRO
2
900
非同期処理実行基盤 Delayed脱出 → Solid Queue完全移行への旅路。
srockstyle
3
1.6k
AI Agentと MCP Serverで実現する iOSアプリの 自動テスト作成の効率化
spiderplus_cb
0
340
Azure SynapseからAzure Databricksへ 移行してわかった新時代のコスト問題!?
databricksjapan
0
110
Goに育てられ開発者向けセキュリティ事業を立ち上げた僕が今向き合う、AI × セキュリティの最前線 / Go Conference 2025
flatt_security
0
320
10年の共創が示す、これからの開発者と企業の関係 ~ Crossroad
soracom
PRO
1
120
AWSにおけるTrend Vision Oneの効果について
shimak
0
110
Function calling機能をPLaMo2に実装するには / PFN LLMセミナー
pfn
PRO
0
810
Go Conference 2025: GoのinterfaceとGenericsの内部構造と進化 / Go type system internals
ryokotmng
3
580
Flaky Testへの現実解をGoのプロポーザルから考える | Go Conference 2025
upamune
1
380
Featured
See All Featured
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.5k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
Building an army of robots
kneath
306
46k
Code Review Best Practice
trishagee
72
19k
Docker and Python
trallard
46
3.6k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.1k
The Cult of Friendly URLs
andyhume
79
6.6k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
Designing for humans not robots
tammielis
254
25k
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.7k
Mobile First: as difficult as doing things right
swwweet
224
9.9k
Git: the NoSQL Database
bkeepers
PRO
431
66k
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とか)をはさめばイベント通知にできる • スケジューラ • 管理コンソール ◦
ほしいけど作っていない