Введение
Asynq - это асинхронный фреймворк задач для языка Go, который использует Redis в качестве очереди сообщений и обладает масштабируемостью и простотой.
Решение асинхронных задач Asynq:
- Клиент помещает задачи в очередь.
- Сервер извлекает задачи из очереди и запускает рабочий поток (goroutine) для каждой задачи.
- Несколько рабочих потоков обрабатывают задачи параллельно.
Очередь задач - это механизм распределения работы по нескольким машинам. Система может состоять из нескольких рабочих серверов и агентов для достижения высокой доступности и горизонтального масштабирования.
Особенности
- Гарантирует выполнение задач минимум один раз
- Планирование задач
- Повторная попытка выполнения неудавшихся задач
- Автоматическое восстановление задач при сбое рабочего потока
- Взвешенная приоритетная очередь
- Строгая приоритетная очередь
- Низкая задержка при добавлении задач из-за быстрых операций записи в Redis
- Избегает дублирования задач с использованием уникальных опций
- Позволяет устанавливать время ожидания и крайние сроки для каждой задачи
- Позволяет агрегировать группу задач для выполнения нескольких последовательных операций пакетами
- Гибкий интерфейс обработчика с поддержкой промежуточного ПО
- Позволяет приостанавливать очередь для остановки обработки задач из очереди
- Периодические задачи
- Поддержка Redis Cluster для автоматического шардирования и высокой доступности
- Поддержка Redis Sentinel для повышения доступности
- Интеграция с Prometheus для сбора и визуализации метрик очереди
- Веб-интерфейс для проверки и удаленного управления очередями и задачами
- Командный интерфейс для проверки и удаленного управления очередями и задачами