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
Celeryの紹介と本番運用のTips
Search
Hank Ehly
August 24, 2023
Programming
0
830
Celeryの紹介と本番運用のTips
Hank Ehly
August 24, 2023
Tweet
Share
More Decks by Hank Ehly
See All by Hank Ehly
Fivetranでデータ移動を自動化する
hankehly
0
580
ChatGPTを活用した 便利ツールの紹介
hankehly
1
1.3k
Efficient Energy Analytics with Airflow, Spark, and MLFlow
hankehly
0
320
Deferrable Operators入門
hankehly
0
630
【初心者/ハンズオン】Dockerコンテナの基礎知識
hankehly
0
510
Compositeパターン: オブジェクトの階層関係をエレガントに表現する方法
hankehly
0
310
10/29 Airflowの基礎を学ぶハンズオンワークショップ
hankehly
0
250
システム/データ品質保証のための Airflow 活用法
hankehly
0
590
海外の記事からコードレビューのBest Practiceを集めてみました
hankehly
0
970
Other Decks in Programming
See All in Programming
ポスターセッション: 「まっすぐ行って、右!」って言ってラズパイカーを動かしたい 〜生成AI × Raspberry Pi Pico × Gradioの試作メモ〜
komofr
0
930
GitHub Actions × AWS OIDC連携の仕組みと経緯を理解する
ota1022
0
240
iOS 17で追加されたSubscriptionStoreView を利用して5分でサブスク実装チャレンジ
natmark
0
510
iOSDC.pdf
chronos2500
2
650
Django Ninja による API 開発効率化とリプレースの実践
kashewnuts
0
900
iOSアプリの信頼性を向上させる取り組み/ios-app-improve-reliability
shino8rayu9
0
140
CSC305 Lecture 01
javiergs
PRO
1
390
プログラマのための作曲入門
cheebow
0
530
Le côté obscur des IA génératives
pascallemerrer
0
120
麻雀点数計算問題生成タスクから学ぶ Single Agentの限界と Agentic Workflowの底力
po3rin
5
2.1k
Model Pollution
hschwentner
1
180
詳しくない分野でのVibe Codingで困ったことと学び/vibe-coding-in-unfamiliar-area
shibayu36
3
4.1k
Featured
See All Featured
A Tale of Four Properties
chriscoyier
160
23k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.1k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.7k
A designer walks into a library…
pauljervisheath
209
24k
A Modern Web Designer's Workflow
chriscoyier
697
190k
Documentation Writing (for coders)
carmenintech
75
5k
Context Engineering - Making Every Token Count
addyosmani
5
170
Making Projects Easy
brettharned
119
6.4k
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.7k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Bash Introduction
62gerente
615
210k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
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はここ