はじめに

Asynqは、Go言語向けの非同期タスクフレームワークであり、Redisをメッセージキューとして使用し、拡張性とシンプルさを備えています。

Asynqの非同期タスクソリューション:

  • クライアントはタスクをキューに入れます。
  • サーバーはキューからタスクを取得し、各タスクに対してワーカースレッド(ゴルーチン)を開始します。
  • 複数のワーカーゴルーチンがタスクを並列で処理します。

タスクキューは複数のマシンに作業を分散する仕組みです。システムは複数のワーカーサーバーとエージェントで構成され、高可用性と水平スケーリングを実現します。

タスクキューダイアグラム

特徴

  • 少なくとも1回のタスク実行を保証
  • タスクスケジューリング
  • 失敗したタスクの再試行
  • ワーカースレッドがクラッシュした場合の自動タスクリカバリ
  • 重み付き優先度キュー
  • 厳格な優先度キュー
  • Redisの高速な書き込み操作によるタスク追加の低遅延
  • ユニークオプションを使用したタスクの重複
  • 各タスクにタイムアウトや締め切りを設定可能
  • 複数の連続操作をバッチで実行するためのタスクのグループ化を許可
  • ミドルウェアのサポートを含む柔軟なハンドラーインタフェース
  • キューを一時停止してキューからのタスク処理を停止することを許可
  • 定期的なタスク
  • Redis Clusterの自動シャーディングと高可用性をサポート
  • 高可用性のためのRedis Sentinelをサポート
  • キューメトリクスを収集し可視化するためのPrometheusとの統合
  • キューやタスクを検査およびリモートで制御するためのWebインターフェース
  • キューやタスクを検査およびリモートで制御するためのコマンドラインインターフェース