はじめに
Asynqは、Go言語向けの非同期タスクフレームワークであり、Redisをメッセージキューとして使用し、拡張性とシンプルさを備えています。
Asynqの非同期タスクソリューション:
- クライアントはタスクをキューに入れます。
- サーバーはキューからタスクを取得し、各タスクに対してワーカースレッド(ゴルーチン)を開始します。
- 複数のワーカーゴルーチンがタスクを並列で処理します。
タスクキューは複数のマシンに作業を分散する仕組みです。システムは複数のワーカーサーバーとエージェントで構成され、高可用性と水平スケーリングを実現します。
特徴
- 少なくとも1回のタスク実行を保証
- タスクスケジューリング
- 失敗したタスクの再試行
- ワーカースレッドがクラッシュした場合の自動タスクリカバリ
- 重み付き優先度キュー
- 厳格な優先度キュー
- Redisの高速な書き込み操作によるタスク追加の低遅延
- ユニークオプションを使用したタスクの重複
- 各タスクにタイムアウトや締め切りを設定可能
- 複数の連続操作をバッチで実行するためのタスクのグループ化を許可
- ミドルウェアのサポートを含む柔軟なハンドラーインタフェース
- キューを一時停止してキューからのタスク処理を停止することを許可
- 定期的なタスク
- Redis Clusterの自動シャーディングと高可用性をサポート
- 高可用性のためのRedis Sentinelをサポート
- キューメトリクスを収集し可視化するためのPrometheusとの統合
- キューやタスクを検査およびリモートで制御するためのWebインターフェース
- キューやタスクを検査およびリモートで制御するためのコマンドラインインターフェース