Сервис для постановки, выполнения и мониторинга абстрактных задач с возможностью контроля времени жизни процесса (TTL, Time-to-Live).
Сервисы доступны по адресам:
- ApiGateway -http://84.252.135.174/swagger/index.html
- Service Discovery - http://84.252.135.174/sd/swagger/index.html
- Users - http://84.252.135.174/users/swagger/index.html
- Abstract task service -http://84.252.135.174/tasks/swagger/index.html
- Elasticsearch - http://84.252.135.174:9200/
- Kibana - http://84.252.135.174:5601/
Ответственности сервисов можно увидеть на схеме:

Выделили проект Infrastructure, чтобы стандартизировать общие моменты сервисов + упростить заведение новых API и Client проектов.
Сделали свой Service Discovery в качестве интереса.
Сделали авторизацию/регистрацию - сервис Users, но не успели закрыть ею endpoint-ы.
Основа проекта - AbstracttaskService и AbstractTaskWorker.
Захостили сервис в docker-compose на ВМ в сервисе yandex cloud.
Добавлено CD с использованием github.actions
Сервис принемает задачи от внешних систем через API. Задача содержит описание задачи и максимальное время на выполнение (TTL).
Задачи добавляются в очередь брокера сообщений RabbitMQ.
Обработка задач выполняется отдельным сервисом - Worker. Он прослушивает очередь задач, кэширует в Redis выполняемые задачи для отслеживания процесса их выполнения. Если TTL истекает или задача выполняется успешно, задача удаляется из кэша и сохраняется в базу данных. Обработка задач распределена между несколькими экземплярами сервиса для обеспечения отказоустойчивости и высокой доступности.
Сервис предоставляет API для мониторинга состояния задач и возможность повторного выполнения задач по запросу пользователя.
Взаимодействие с внешними системами реализовано через REST API
Сейчас, для наглядности, доступны swagger-ы всех сервисов. В реальности стоило бы открыть только ApiGateway и закрыть его https соединением.
Каждое приложение пишет логи в 3 места:
- Консоль
- Локальный файл - в swagger каждоого сервиса есть Endpoint, где можно посмотреть логи
- В Elasticsearch