結論から言うと:圧縮タスク非と期化の標準ソリューションョンは Celery + Redis タスクキュー、コアアーキテクチャである Producer(FastAPI 投递タスク)→ Broker(Redis 暂存)→ Worker(Celery 消費およびびびびびび呼び出し Rust 圧縮エンジン)→ Backend(Redis 存結果)。面に対して 10000 つファイル一括圧縮、に応じて各片 100 つファイル分片、12 つ Worker 並行、約 40 分钟できるすべて完。重要設計点はタスク分片、優先級キュー、指数退避重试・死信キュー兜底。以下ではキューアーキテクチャから説明し、に出 Celery 設定パラメータテーブルと完整実戦ソリューションョン。
もし圧縮サービスの全体デプロイまだ慣れていい場合は、まずDocker デプロイ圧縮サービス完整ガイド。
一、圧縮タスクである何必要非と期キュー
ファイル圧縮は典型の CPU 密集型 + IO 密集型タスク。一つ 100MB の PDF 圧縮できる耗時 5–15 秒、もしを用いてと期インターフェース処理、HTTP 連接長時間掛起、単機並行できる力極差。非と期キューを"提出"・"執行"解耦:クライアント提出タスク後立即拿まで task_id、Worker 以後台ゆっくり圧縮、完後を通じてコールバックまたは輪询戻る結果。
| 処理方法 | 並行できる力 | 響すべき延遅 | 失敗処理 | 適用規模 |
|---|---|---|---|---|
| と期処理 | 差(ブロッキングHTTP連接) | 5–60秒 | い重试、直接报錯 | <10ファイル |
| スレッド池 | 中(受スレッド数制限) | 1–5秒 | 必要手動実現 | 10–100ファイル |
| Celery非と期キュー | 高い(Worker水平拡張) | <200ms | 自動重试+死信キュー | 100–100000ファイル |
| Kubernetes+キュー | 極高い(HPA弹性拡縮) | <100ms | 完整容錯体系 | >100000ファイル |
SmartSlim ネットワーク版採用する FastAPI + Celery + Redis + MinIO アーキテクチャ、単機 12 並行タスク稳定実行、Kubernetes デプロイ時 HPA できるで 3–10 副この間自動拡縮容。この套アーキテクチャすでに支撑多く家企業客戸日均万級ファイル圧縮必要条件。
二、Celery タスクキューアーキテクチャ詳解
Celery タスクキューにより四つコアロールグループ成:Producer(生产者)、Broker(メッセージプロキシ)、Worker(作業プロセス)、Backend(結果ストレージ)。理解この四層の職责、やっとできる正しい設定圧縮タスクキューュー。
| グループ件 | 技術選型 | 職责 | 重要設定 |
|---|---|---|---|
| Producer | FastAPI | 受信HTTPリクエスト、構造タスク、投递までBroker | task.apply_async(queue=...) |
| Broker | Redis 7.x | 暂存待機中タスクメッセージ、サポート優先級キュー | broker_url, visibility_timeout |
| Worker | Celery 5.x | 消費タスク、呼び出しRust 圧縮エンジン執行圧縮 | concurrency, prefork pool |
| Backend | Redis | ストレージタスク状態・戻る結果 | result_backend, result_expires |
| ストレージ層 | MinIO | ストレージ元ファイル・圧縮後ファイル | S3互換协議、分片アップロード |
1. Celery コア設定パラメータテーブル
Celery の設定直接決定キューの吞吐できる力・安定性。下テーブルは圧縮シナリオの推奨設定、すでにでSmartSlim 生产環境検証。
| パラメータ | 推奨値 | 説明 |
|---|---|---|
| broker_url | redis://:password@redis:6379/0 | Redis作であるメッセージプロキシ、独立DB避免沖突 |
| result_backend | redis://:password@redis:6379/1 | 結果ストレージを用いて独立DB、とBroker隔離 |
| task_serializer | json | JSONシリアライズ、跨語言互換 |
| result_serializer | json | 結果同様にを用いてJSON |
| accept_content | ['json'] | のみ接受JSON、セキュリティ加固 |
| timezone | Asia/Shanghai | 時区統一 |
| task_acks_late | True | タスク完後やっとACK、クラッシュ時不丢タスク |
| worker_prefetch_multiplier | 1 | 各つWorkerのみ預取1つタスク、避免長タスク饥饿 |
| task_time_limit | 600 | 単タスク硬超時600秒 |
| task_soft_time_limit | 540 | 柔超時540秒、触発SoftTimeLimitExceeded |
| task_reject_on_worker_lost | True | Worker例外ログアウト時拒絶タスク、再入隊 |
| result_expires | 86400 | 結果保持24小さい時後自動クリーンアップ |
2. 優先級キュー設計
圧縮タスクある軽重の分:ユーザー実時提出の圧縮リクエスト必要高速響すべき、定時アーカイブタスクできるゆっくり跑。を用いて Redis 優先級キュー実現差異化調度、高い優先級タスク優先される Worker 消費。
| キュー名 | 優先級 | 路により規则 | 典型タスク |
|---|---|---|---|
| compression_high | 9(最も高い) | ユーザー実時リクエスト | 単ファイル即時圧縮 |
| compression_normal | 5(デフォルト) | バッチ量タスク | 一括圧縮100–500ファイル |
| compression_low | 1(最も低い) | 定時アーカイブ | 夜間すべて量アーカイブ圧縮 |
| dlq_queue | —(死信) | 重试失敗のタスク | 人工排查または補償処理 |
三、実戦事例:10000 つファイル非と期圧縮
このはある企業データアーカイブシナリオ:10000 部歴史文書(PDF/Word/画像混合、平均単ファイル 8MB、総計約 80GB)必要統一圧縮アーカイブ。する件 1 小さい時内完、圧縮率不低いに 60%。
ソリューションョン設計: に応じて 100 つファイル一片切分である 100 つ子タスク、を用いて Celery group バッチ量投递、12 つ Worker 並行消費。各つ子タスク内シリアル呼び出し Rust 圧縮エンジン圧縮 100 つファイル。
執行パラメータと吞吐テーブル现:
| 指標 | パラメータ | 実測値 | 説明 |
|---|---|---|---|
| ファイル総量 | 10000つ | — | 混合形式、平均8MB/つ |
| 分片粒度 | 100ファイル/片 | 100片子タスク | 平衡調度開销と重试代価 |
| Worker並行 | 12つ | prefork模式 | 単機12核CPU |
| 単ファイル圧縮耗時 | — | 平均3.2秒 | Rust引擎medium檔 |
| 単片耗時 | — | 約5.3分钟 | 100ファイルシリアル |
| 全体耗時 | — | 約44分钟 | 100片/12並行 |
| 圧縮率 | — | 67.3% | 80GB→26.2GB |
| 失敗数 | — | 17つ | ファイル损壊、重试後進死信 |
結果: 44 分钟完 10000 ファイル圧縮、圧縮率 67.3%、17 つ损壊ファイル自動進入死信キューにより人工処理。全体アーキテクチャ稳定、CPU 利用率峰値 89%、メモリ占を用いて峰値 4.2GB、い OOM またはタスク丢失。
3. 重试と死信キュー戦略
圧縮タスク失敗の原因分2クラス:臨時性エラー(IO 超時、メモリ不足、並行過高い)・確定性エラー(ファイル损壊、形式不サポート)。臨時性エラー重试おそらく率できる成功、確定性エラー重试い意義。下のテーブルに示す重试と死信の意思決定戦略。
| エラータイプ | 典型例外 | 処理戦略 | 重试次数 | 最も終行くへ |
|---|---|---|---|---|
| 臨時性-IO | ConnectionError, TimeoutError | 指数退避重试 | 3次 | 成功または進死信 |
| 臨時性-リソース | MemoryError, OOMKilled | 延長退避+降級 | 2次 | 成功または進死信 |
| 確定性-ファイル | FileCorrupted, ParseError | 不重试、直接死信 | 0次 | dlq_queue |
| 確定性-形式 | UnsupportedFormat | 不重试、直接死信 | 0次 | dlq_queue |
| 確定性-権限 | PermissionDenied | 不重试、アラート | 0次 | dlq_queue+アラート |
重试設定使用 Celery の autoretry_for ・ retry_backoff、初始退避 60 秒、最も大きい 600 秒、加随機抖動避免雪崩。死信キューのタスクにより独立の監視タスク定期掃描、触発企業微信/钉钉アラート通知運維処理。
| 監視指標 | 采集方法 | アラート阈値 | 処理動作 |
|---|---|---|---|
| キュー積圧量 | Redis LLEN | >500 | 触発Worker拡容 |
| タスク失敗率 | Celery events | >5% | 排查ログ+一時停止投递 |
| 死信キュー長度 | Redis LLEN dlq | >10 | 企業微信アラート |
| Worker存活数 | Celery inspect | <10 | 自動重啓Worker |
| 平均タスク耗時 | Flower監視 | >30秒 | 確認大きいファイル+降級 |
| CPU利用率 | node_exporter | >95% | レート制限+拡容 |
について圧縮 API の完整呼び出し方法、を参照してください圧縮 API 呼び出しガイド:REST インターフェース設計。
四、異るシナリオのキュー設定推奨
異る業务シナリオに対して吞吐、延遅、できる靠性のする件異る、キュー設定必要差異化。下のテーブルに示す一般のシナリオの推奨設定。
| シナリオ | Worker数 | 分片粒度 | 優先級キュー | 重试戦略 |
|---|---|---|---|---|
| つ人即時圧縮 | 2 | 不分片 | high | 高速重试3次 |
| 企業バッチ量アーカイブ | 12 | 100ファイル/片 | normal/low | 指数退避3次 |
| 政府涉密処理 | 4 | 50ファイル/片 | high | 厳格重试+監査 |
| 電商プラットフォーム画像 | 16 | 200ファイル/片 | normal | 高速重试2次 |
| 夜間定時アーカイブ | 8 | 500ファイル/片 | low | 遅い速退避5次 |
| 実時動画変換碼 | 24 | 単ファイル | high | 不重试、失敗アラート |
一般の原則:実時シナリオを用いて高い優先級キュー+小さい分片+高速重试、バッチ量シナリオを用いて普通キュー+大きい分片+指数退避、涉密シナリオ厳格監査+小さい分片+多く級重试。企業級一括圧縮の完整ソリューションョンを参照してください企業一括圧縮ソリューションョン:万級ファイル処理実戦。
五、よくある質問FAQ
Q1:Celery圧縮タスクの実現非と期処理?
を用いて Celery + Redis 構建非と期タスクキュー:FastAPI 受信リクエスト後をタスク投递まで Redis Broker、Celery Worker から Broker 消費タスクおよびびびびびび呼び出し Rust 圧縮エンジン執行圧縮、結果書き込み Backend ・ MinIO ストレージ。一つ task.apply_async 可能性性性性非と期執行、を通じて task.id 輪询状態。単機 12 つ Worker 並行、10000 つファイル分片 100 バッチできるで 40 分钟内完。
Q2:圧縮タスク失敗の自動重试?
を用いて Celery の autoretry_for パラメータ設定自動重试、設定 max_retries=3、retry_backoff=True(指数退避、初始 60 秒)、retry_backoff_max=600 秒、retry_jitter=True(随機抖動避免雪崩)。重试 3 次仍失敗のタスク自動路によりまで死信キュー dlq_queue、により人工または補償タスク処理。推奨に対して臨時性エラー(IO 超時/メモリ不足)重试、に対して確定性エラー(ファイル损壊/形式不サポート)直接進死信。
Q3:10000つファイル一括圧縮の分片?
に応じて各片 100 つファイル分片、共 100 つ子タスク。を用いて Celery group または chord バッチ量投递、12 つ Worker 並列消費、各つ子タスク内シリアル圧縮 100 つファイル。単ファイル平均圧縮耗時 3 秒、単片約 5 分钟、100 片並列後全体約 40 分钟完。分片粒度太小さい(例えば各片 1 つ)調度開销大きい、大きいきすぎる(例えば各片 1000 つ)失敗重试代価高い、100 は経验最も佳値。
Q4:Celery・RQどつ更適した圧縮タスクキューュー?
圧縮タスク推奨 Celery。Celery サポートタスク分片(group/chord)、優先級キュー、定時タスク、タスク链、死信キュー、機能完整;RQ 更軽量しかし缺少ない分片・優先級。圧縮シナリオ一般のバッチ量分片、優先級調度、失敗重试等必要条件、Celery ネイティブサポート。パフォーマンス上2者すべて基に Redis、吞吐相される。SmartSlim ネットワーク版採用する FastAPI + Celery + Redis + MinIO アーキテクチャ、単機 12 並行稳定実行。
まとめ
圧縮タスク非と期化の標準ソリューションョンは Celery + Redis タスクキュー、コアでに Producer/Broker/Worker/Backend 四層解耦。面に対して万級ファイル一括圧縮、に応じて 100 ファイル分片、12 Worker 並行、約 40 分钟できる完、圧縮率 60%–70%。重试戦略必要区分臨時性エラー(指数退避重试)・確定性エラー(直接進死信)、配合 6 項目監視指標保障キュー稳定。
覚えておくべき3つのポイント:一は task_acks_late=True 確保クラッシュ不丢タスク、二は worker_prefetch_multiplier=1 避免長タスク饥饿、三は死信キュー必ず配監視アラート。選に対してキューアーキテクチャ・分片戦略、圧縮サービスの吞吐・安定性すべてできる上一つ台階。
ファイルを圧縮てみませんか?SmartSlimを試す
独自開発のRust圧縮エンジンに基づき、PDF/画像/動画/Office/OFDど10分野40以上の形式に対応。ローカル圧縮でデータは外部に送信されません。