Golang: архитектура системы обработки задач по интервалам
У нас есть большой список сайтов и команд, которые нужно выполнить на этом сайте через заданный интервал в нашей базе данных.
Таблица: ID, САЙТ, КОМАНДЫ (json: имя_команды => интервал минут)
1, example1.ru, { "имя_команды1": 5, "имя_команды2": 5, "имя_команды3": 60}
Также есть консольное приложение, которое может выполнять различные задачи на сайте. Например:
Проверить статус ответа Проверка сертификатов HTTPS Поиск некоторых данных в содержании и т. д. Нам нужно спроектировать приложение Golang таким образом, чтобы его можно было легко масштабировать (т.е. создавать несколько экземпляров приложения на разных машинах).
Хотелось бы понять, как лучше организовать архитектуру? Таблица в базе данных является примером структуры. Возможно, его нужно организовать иначе, для более эффективного использования.
Помогите, пожалуйста, с оформлением, и опишите, что и как организовать.
Я вижу этот вариант:
Подключаю rabbitmq — он будет выступать в роли очереди задач на выполнение. Голанг будет работать: Потребитель, который слушает очередь задач, берет задачу и передает ее внутренним воркерам (горутинам) для выполнения. После выполнения дата последнего выполнения будет отмечена в базе данных.
Отдельная горутина, которая раз в минуту сканирует базу данных, ищет невыполненные задачи и ставит их в очередь на выполнение. В БД создается отметка о том, что задача снята с исполнения (т.е. задача блокируется).