Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Celeryの紹介と 本番運用のTips 2023/08/23 (水)
Slide 2
Slide 2 text
よろしくお願いします ● 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
Slide 3
Slide 3 text
アジェンダ 1. Celeryの What・Why・Where・How 2. 本番運用の Tips
Slide 4
Slide 4 text
CeleryのWhat・Why・Where・How
Slide 5
Slide 5 text
● PythonのタスクキューのOSSフレームワーク ● オープンソース(★22k、1,000以上のコントリビュータ、人気) What is Celery Celeryクライアント Celeryブローカー Celeryワーカー(複数可能) 他もある…
Slide 6
Slide 6 text
What is Celery (contd.) 非同期的に行われる
Slide 7
Slide 7 text
Why use Celery 計算・レポート出力
Slide 8
Slide 8 text
Why use Celery 計算・レポート出力
Slide 9
Slide 9 text
Why use Celery 計算・レポート出力
Slide 10
Slide 10 text
Why use Celery (contd.) ウェブサーバーの状況 ウェブサーバー に仕事させる時 Celeryに仕事 を委託する時 レスポンス時間
Slide 11
Slide 11 text
● ウェブサーバーにたくさん仕事さ せると、他のリクエストへの応答 が遅くなり、CPU/メモリー使用 率が高くなる Why use Celery (contd.) ウェブサーバーの状況 ウェブサーバー に仕事させる時 Celeryに仕事 を委託する時 レスポンス時間
Slide 12
Slide 12 text
● ウェブサーバーにたくさん仕事さ せると、他のリクエストへの応答 が遅くなり、CPU/メモリー使用 率が高くなる ● Celeryワーカーに仕事を渡すと、 ウェブサーバーのリソースを節約 できて、応答を早くすることができ る Why use Celery (contd.) ウェブサーバーの状況 ウェブサーバー に仕事させる時 Celeryに仕事 を委託する時 レスポンス時間
Slide 13
Slide 13 text
Where use Celery Eメール送信 MLモデル 予測処理 計算処理 →レポート出力 ポーリング処理 (定期的な状況確認) Celeryが使えるワークロード MLモデル学習 →S3保存
Slide 14
Slide 14 text
Where use Celery Eメール送信 MLモデル 予測処理 計算処理 →レポート出力 ポーリング処理 (定期的な状況確認) Celeryが使えるワークロード MLモデル学習 →S3保存
Slide 15
Slide 15 text
Where use Celery Eメール送信 MLモデル 予測処理 計算処理 →レポート出力 ポーリング処理 (定期的な状況確認) Celeryが使えるワークロード MLモデル学習 →S3保存
Slide 16
Slide 16 text
Where use Celery Eメール送信 MLモデル 予測処理 計算処理 →レポート出力 ポーリング処理 (定期的な状況確認) Celeryが使えるワークロード MLモデル学習 →S3保存
Slide 17
Slide 17 text
Where use Celery Eメール送信 MLモデル 予測処理 計算処理 →レポート出力 ポーリング処理 (定期的な状況確認) Celeryが使えるワークロード MLモデル学習 →S3保存
Slide 18
Slide 18 text
Where use Celery Eメール送信 MLモデル 予測処理 計算処理 →レポート出力 ポーリング処理 (定期的な状況確認) Celeryが使えるワークロード MLモデル学習 →S3保存
Slide 19
Slide 19 text
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ワーカー(複数可能) 例えば…
Slide 20
Slide 20 text
How to use Celery 3. ワーカーを立ち上げる celery -A tasks worker from tasks import add >>> result = add.delay(4, 4) # 呼び出す >>> result.get() # 終わるまで待つ 4. タスクを呼び出す Celeryクライアント Celeryブローカー Celeryワーカー(複数可能) 例えば… ※複数のワーカーを使う場合は環境ごとに実行
Slide 21
Slide 21 text
本番運用のTips
Slide 22
Slide 22 text
1. ヘルスチェックは「ping」コマンドを使おう celery -A myapp inspect ping --destination celery@${HOSTNAME} 設定項目 設定値 interval 30 timeout 15 startPeriod 10 retries 5 ヘルスチェックの実行間隔 (ゆるめな設定がおすすめ)
Slide 23
Slide 23 text
2. 回復可能なエラーが起きたら再実行しよう
Slide 24
Slide 24 text
2. 回復可能なエラーが起きたら再実行しよう
Slide 25
Slide 25 text
3. ブローカーの選定 評価ポイント Redis RabbitMQ SQS リモートコマンド (pingなど) ◯ ◯ X Taskの結果保存ができ る ◯ △ X メッセージを送れなかっ たら、どうなる? △ 再配信されない ◯ 再配信される ◯ 再配信される ヘルスチェックどうする?? データロスが(より) 起きやすい
Slide 26
Slide 26 text
4. モニタリングツールを入れよう flowerはCeleryワーカーの健 康状態を監視するツール Celeryワーカー・実行中のタス クの状況を可視化 デバッグ・パフォーマンスチュー ニングに役立つ コンテナイメージ・バイナリのデ プロイ方法はブログ記事まで …→ (flowerの管理画面)
Slide 27
Slide 27 text
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. タスクを安全にリトライできるように実装する(アトミック・冪等である)
Slide 28
Slide 28 text
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ワーカーが異常終了し たら、タスク再実行してね
Slide 29
Slide 29 text
5. Spotインスタンスの中断対策 3. 目指すべきタスクの実行時間は …(ブログ記事までお願いします!)
Slide 30
Slide 30 text
ご清聴ありがとうございます ● 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はここ