Введение

Asynq - это асинхронный фреймворк задач для языка Go, который использует Redis в качестве очереди сообщений и обладает масштабируемостью и простотой.

Решение асинхронных задач Asynq:

  • Клиент помещает задачи в очередь.
  • Сервер извлекает задачи из очереди и запускает рабочий поток (goroutine) для каждой задачи.
  • Несколько рабочих потоков обрабатывают задачи параллельно.

Очередь задач - это механизм распределения работы по нескольким машинам. Система может состоять из нескольких рабочих серверов и агентов для достижения высокой доступности и горизонтального масштабирования.

Диаграмма очереди задач

Особенности

  • Гарантирует выполнение задач минимум один раз
  • Планирование задач
  • Повторная попытка выполнения неудавшихся задач
  • Автоматическое восстановление задач при сбое рабочего потока
  • Взвешенная приоритетная очередь
  • Строгая приоритетная очередь
  • Низкая задержка при добавлении задач из-за быстрых операций записи в Redis
  • Избегает дублирования задач с использованием уникальных опций
  • Позволяет устанавливать время ожидания и крайние сроки для каждой задачи
  • Позволяет агрегировать группу задач для выполнения нескольких последовательных операций пакетами
  • Гибкий интерфейс обработчика с поддержкой промежуточного ПО
  • Позволяет приостанавливать очередь для остановки обработки задач из очереди
  • Периодические задачи
  • Поддержка Redis Cluster для автоматического шардирования и высокой доступности
  • Поддержка Redis Sentinel для повышения доступности
  • Интеграция с Prometheus для сбора и визуализации метрик очереди
  • Веб-интерфейс для проверки и удаленного управления очередями и задачами
  • Командный интерфейс для проверки и удаленного управления очередями и задачами