Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Celeryの紹介と本番運用のTips
Search
Hank Ehly
August 24, 2023
Programming
0
970
Celeryの紹介と本番運用のTips
Hank Ehly
August 24, 2023
Tweet
Share
More Decks by Hank Ehly
See All by Hank Ehly
Fivetranでデータ移動を自動化する
hankehly
0
600
ChatGPTを活用した 便利ツールの紹介
hankehly
1
1.3k
Efficient Energy Analytics with Airflow, Spark, and MLFlow
hankehly
0
340
Deferrable Operators入門
hankehly
0
670
【初心者/ハンズオン】Dockerコンテナの基礎知識
hankehly
0
550
Compositeパターン: オブジェクトの階層関係をエレガントに表現する方法
hankehly
0
320
10/29 Airflowの基礎を学ぶハンズオンワークショップ
hankehly
0
270
システム/データ品質保証のための Airflow 活用法
hankehly
0
620
海外の記事からコードレビューのBest Practiceを集めてみました
hankehly
0
980
Other Decks in Programming
See All in Programming
AIコーディングエージェント(Gemini)
kondai24
0
190
大体よく分かるscala.collection.immutable.HashMap ~ Compressed Hash-Array Mapped Prefix-tree (CHAMP) ~
matsu_chara
1
210
宅宅自以為的浪漫:跟 AI 一起為自己辦的研討會寫一個售票系統
eddie
0
490
AIコーディングエージェント(skywork)
kondai24
0
150
CSC509 Lecture 14
javiergs
PRO
0
220
組み合わせ爆発にのまれない - 責務分割 x テスト
halhorn
1
140
20251127_ぼっちのための懇親会対策会議
kokamoto01_metaps
2
420
ゲームの物理 剛体編
fadis
0
310
開発に寄りそう自動テストの実現
goyoki
1
740
CloudNative Days Winter 2025: 一週間で作る低レイヤコンテナランタイム
ternbusty
7
2k
AWS CDKの推しポイントN選
akihisaikeda
1
240
WebRTC、 綺麗に見るか滑らかに見るか
sublimer
1
160
Featured
See All Featured
Facilitating Awesome Meetings
lara
57
6.7k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
A better future with KSS
kneath
240
18k
Statistics for Hackers
jakevdp
799
230k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
Stop Working from a Prison Cell
hatefulcrawdad
273
21k
Become a Pro
speakerdeck
PRO
30
5.7k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8.3k
YesSQL, Process and Tooling at Scale
rocio
174
15k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.8k
Transcript
Celeryの紹介と 本番運用のTips 2023/08/23 (水)
よろしくお願いします • Hank Ehly(ハンク・イーリー) • Slalom株式会社(スラロム) • Data & Analytics
シニアコンサルタント • https://hankehly.com • https://qiita.com/hankehly • https://github.com/hankehly • https://medium.com/@hankehly • https://www.twitter.com/hankehly • https://www.linkedin.com/in/hankehly
アジェンダ 1. Celeryの What・Why・Where・How 2. 本番運用の Tips
CeleryのWhat・Why・Where・How
• PythonのタスクキューのOSSフレームワーク • オープンソース(★22k、1,000以上のコントリビュータ、人気) What is Celery Celeryクライアント Celeryブローカー Celeryワーカー(複数可能)
他もある…
What is Celery (contd.) 非同期的に行われる
Why use Celery 計算・レポート出力
Why use Celery 計算・レポート出力
Why use Celery 計算・レポート出力
Why use Celery (contd.) ウェブサーバーの状況 ウェブサーバー に仕事させる時 Celeryに仕事 を委託する時 レスポンス時間
• ウェブサーバーにたくさん仕事さ せると、他のリクエストへの応答 が遅くなり、CPU/メモリー使用 率が高くなる Why use Celery (contd.) ウェブサーバーの状況
ウェブサーバー に仕事させる時 Celeryに仕事 を委託する時 レスポンス時間
• ウェブサーバーにたくさん仕事さ せると、他のリクエストへの応答 が遅くなり、CPU/メモリー使用 率が高くなる • Celeryワーカーに仕事を渡すと、 ウェブサーバーのリソースを節約 できて、応答を早くすることができ る
Why use Celery (contd.) ウェブサーバーの状況 ウェブサーバー に仕事させる時 Celeryに仕事 を委託する時 レスポンス時間
Where use Celery Eメール送信 MLモデル 予測処理 計算処理 →レポート出力 ポーリング処理 (定期的な状況確認)
Celeryが使えるワークロード MLモデル学習 →S3保存
Where use Celery Eメール送信 MLモデル 予測処理 計算処理 →レポート出力 ポーリング処理 (定期的な状況確認)
Celeryが使えるワークロード MLモデル学習 →S3保存
Where use Celery Eメール送信 MLモデル 予測処理 計算処理 →レポート出力 ポーリング処理 (定期的な状況確認)
Celeryが使えるワークロード MLモデル学習 →S3保存
Where use Celery Eメール送信 MLモデル 予測処理 計算処理 →レポート出力 ポーリング処理 (定期的な状況確認)
Celeryが使えるワークロード MLモデル学習 →S3保存
Where use Celery Eメール送信 MLモデル 予測処理 計算処理 →レポート出力 ポーリング処理 (定期的な状況確認)
Celeryが使えるワークロード MLモデル学習 →S3保存
Where use Celery Eメール送信 MLモデル 予測処理 計算処理 →レポート出力 ポーリング処理 (定期的な状況確認)
Celeryが使えるワークロード MLモデル学習 →S3保存
How to use Celery 1. Install from celery import Celery
app = Celery('tasks', broker='redis://...') @app.task def add(x, y): return x + y pip install celery 2. アプリケーション定義 Celeryクライアント Celeryブローカー Celeryワーカー(複数可能) 例えば…
How to use Celery 3. ワーカーを立ち上げる celery -A tasks worker
from tasks import add >>> result = add.delay(4, 4) # 呼び出す >>> result.get() # 終わるまで待つ 4. タスクを呼び出す Celeryクライアント Celeryブローカー Celeryワーカー(複数可能) 例えば… ※複数のワーカーを使う場合は環境ごとに実行
本番運用のTips
1. ヘルスチェックは「ping」コマンドを使おう celery -A myapp inspect ping --destination celery@${HOSTNAME} 設定項目
設定値 interval 30 timeout 15 startPeriod 10 retries 5 ヘルスチェックの実行間隔 (ゆるめな設定がおすすめ)
2. 回復可能なエラーが起きたら再実行しよう
2. 回復可能なエラーが起きたら再実行しよう
3. ブローカーの選定 評価ポイント Redis RabbitMQ SQS リモートコマンド (pingなど) ◯ ◯
X Taskの結果保存ができ る ◯ △ X メッセージを送れなかっ たら、どうなる? △ 再配信されない ◯ 再配信される ◯ 再配信される ヘルスチェックどうする?? データロスが(より) 起きやすい
4. モニタリングツールを入れよう flowerはCeleryワーカーの健 康状態を監視するツール Celeryワーカー・実行中のタス クの状況を可視化 デバッグ・パフォーマンスチュー ニングに役立つ コンテナイメージ・バイナリのデ プロイ方法はブログ記事まで
…→ (flowerの管理画面)
5. Spotインスタンスの中断対策 @app.task def not_atomic_not_idempotent_task(): delete_rows() insert_rows() now = int(time.time())
create_file(name="backup-{now}.csv") @app.task def atomic_and_idempotent_task(filename): with transaction.atomic(): delete_rows() insert_rows() create_file(name=filename) コケたらシステムは変な状態のまま (リトライできない) コケても何度でもリトライできる! 1. タスクを安全にリトライできるように実装する(アトミック・冪等である)
5. Spotインスタンスの中断対策 @app.task def not_atomic_not_idempotent_task(): delete_rows() insert_rows() now = int(time.time())
create_file(name="backup-{now}.csv") @app.task def atomic_and_idempotent_task(filename): with transaction.atomic(): delete_rows() insert_rows() create_file(name=filename) コケたらシステムは変な状態のまま (リトライできない) コケても何度でもリトライできる! 1. タスクを安全にリトライできるように実装する(アトミック・冪等である) 2. 自動再スケジューリングの必須設定 task_acks_late True task_reject_on_worker_lost True タスク終了後にAckする Celeryワーカーが異常終了し たら、タスク再実行してね
5. Spotインスタンスの中断対策 3. 目指すべきタスクの実行時間は …(ブログ記事までお願いします!)
ご清聴ありがとうございます • Hank Ehly(ハンク・イーリー) • Slalom株式会社(スラロム) • Data & Analytics
シニアコンサルタント • https://hankehly.com • https://qiita.com/hankehly • https://github.com/hankehly • https://medium.com/@hankehly • https://www.twitter.com/hankehly • https://www.linkedin.com/in/hankehly 他のTipsはここ