UGLYPEAR AIが事業をアップグレード:高性能ドキュメント圧縮 × RAGデータエンジニアリング基盤新事業を詳しく見る →

圧縮タスクキューュー設計:Celery+Redis非と期処理

結論から言うと:圧縮タスク非と期化の標準ソリューションョンは 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(結果ストレージ)。理解この四層の職责、やっとできる正しい設定圧縮タスクキューュー。

グループ件技術選型職责重要設定
ProducerFastAPI受信HTTPリクエスト、構造タスク、投递までBrokertask.apply_async(queue=...)
BrokerRedis 7.x暂存待機中タスクメッセージ、サポート優先級キューbroker_url, visibility_timeout
WorkerCelery 5.x消費タスク、呼び出しRust 圧縮エンジン執行圧縮concurrency, prefork pool
BackendRedisストレージタスク状態・戻る結果result_backend, result_expires
ストレージ層MinIOストレージ元ファイル・圧縮後ファイルS3互換协議、分片アップロード

1. Celery コア設定パラメータテーブル

Celery の設定直接決定キューの吞吐できる力・安定性。下テーブルは圧縮シナリオの推奨設定、すでにでSmartSlim 生产環境検証。

パラメータ推奨値説明
broker_urlredis://:password@redis:6379/0Redis作であるメッセージプロキシ、独立DB避免沖突
result_backendredis://:password@redis:6379/1結果ストレージを用いて独立DB、とBroker隔離
task_serializerjsonJSONシリアライズ、跨語言互換
result_serializerjson結果同様にを用いてJSON
accept_content['json']のみ接受JSON、セキュリティ加固
timezoneAsia/Shanghai時区統一
task_acks_lateTrueタスク完後やっとACK、クラッシュ時不丢タスク
worker_prefetch_multiplier1各つWorkerのみ預取1つタスク、避免長タスク饥饿
task_time_limit600単タスク硬超時600秒
task_soft_time_limit540柔超時540秒、触発SoftTimeLimitExceeded
task_reject_on_worker_lostTrueWorker例外ログアウト時拒絶タスク、再入隊
result_expires86400結果保持24小さい時後自動クリーンアップ

2. 優先級キュー設計

圧縮タスクある軽重の分:ユーザー実時提出の圧縮リクエスト必要高速響すべき、定時アーカイブタスクできるゆっくり跑。を用いて Redis 優先級キュー実現差異化調度、高い優先級タスク優先される Worker 消費。

キュー名優先級路により規则典型タスク
compression_high9(最も高い)ユーザー実時リクエスト単ファイル即時圧縮
compression_normal5(デフォルト)バッチ量タスク一括圧縮100–500ファイル
compression_low1(最も低い)定時アーカイブ夜間すべて量アーカイブ圧縮
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 超時、メモリ不足、並行過高い)・確定性エラー(ファイル损壊、形式不サポート)。臨時性エラー重试おそらく率できる成功、確定性エラー重试い意義。下のテーブルに示す重试と死信の意思決定戦略。

エラータイプ典型例外処理戦略重试次数最も終行くへ
臨時性-IOConnectionError, 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次
企業バッチ量アーカイブ12100ファイル/片normal/low指数退避3次
政府涉密処理450ファイル/片high厳格重试+監査
電商プラットフォーム画像16200ファイル/片normal高速重试2次
夜間定時アーカイブ8500ファイル/片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以上の形式に対応。ローカル圧縮でデータは外部に送信されません。