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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Hank Ehly
August 24, 2023
Programming
0
1.3k
Celeryの紹介と本番運用のTips
Hank Ehly
August 24, 2023
Tweet
Share
More Decks by Hank Ehly
See All by Hank Ehly
Fivetranでデータ移動を自動化する
hankehly
0
630
ChatGPTを活用した 便利ツールの紹介
hankehly
1
1.3k
Efficient Energy Analytics with Airflow, Spark, and MLFlow
hankehly
0
370
Deferrable Operators入門
hankehly
0
700
【初心者/ハンズオン】Dockerコンテナの基礎知識
hankehly
0
570
Compositeパターン: オブジェクトの階層関係をエレガントに表現する方法
hankehly
0
330
10/29 Airflowの基礎を学ぶハンズオンワークショップ
hankehly
0
290
システム/データ品質保証のための Airflow 活用法
hankehly
0
650
海外の記事からコードレビューのBest Practiceを集めてみました
hankehly
0
1k
Other Decks in Programming
See All in Programming
モジュラモノリスにおける境界をGoのinternalパッケージで守る
magavel
0
3.5k
あなたはユーザーではない #PdENight
kajitack
4
340
Event Storming
hschwentner
3
1.3k
nuget-server - あなたが必要だったNuGetサーバー
kekyo
PRO
0
200
CSC307 Lecture 13
javiergs
PRO
0
310
2026年は Rust 置き換えが流行る! / 20260220-niigata-5min-tech
girigiribauer
0
220
RubyとGoでゼロから作る証券システム: 高信頼性が求められるシステムのコードの外側にある設計と運用のリアル
free_world21
0
220
PJのドキュメントを全部Git管理にしたら、一番喜んだのはAIだった
nanaism
0
240
手戻りゼロ? Spec Driven Developmentとは@KAG AI week
tmhirai
1
170
ふつうの Rubyist、ちいさなデバイス、大きな一年
bash0c7
0
700
Swift ConcurrencyでよりSwiftyに
yuukiw00w
0
250
Railsの気持ちを考えながらコントローラとビューを整頓する/tidying-rails-controllers-and-views-as-rails-think
moro
4
380
Featured
See All Featured
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
210
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.7k
Building Applications with DynamoDB
mza
96
6.9k
How to Ace a Technical Interview
jacobian
281
24k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
380
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
280
How STYLIGHT went responsive
nonsquared
100
6k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
110
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
0
450
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
199
73k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
200
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.1k
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はここ