Требуется реализовать распределенную систему для взлома хэша под кодовым именем CrackHash. Непосредственно взлом хэша будем реализовывать через простой перебор словаря сгенерированного на основе алфавита (brute-force).
В общих чертах система должна работать по следующей логике:
В рамках системы существует менеджер, который принимает от пользователя запрос, содержащий MD-5 хэш некоторого слова, а также его максимальную длину. Менеджер обрабатывает запрос: генерирует задачи в соответствии с заданным числом воркеров (вычислительных узлов) на перебор слов составленных из переданного им алфавита. После чего отправляет их на исполнение воркерам. Каждый воркер принимает задачу, перебирает слова в заданном диапазоне и вычисляет их хэш. Находит слова у которых хеш совпадает с заданным, и результат работы возвращает менеджеру через очередь.
-
Обеспечить сохранность данных при отказе работы менеджера:
- Хранение данных об обрабатываемых запросах в базе данных.
- Взаимодействие воркеров с менеджером через темы Kafka.
-
Обеспечить частичную отказоустойчивость базы данных:
- Реализация реплицирования для нереляционной базы данных MongoDB.
- Минимальная рабочая схема: одна primary нода и две secondary ноды.
-
Обеспечить сохранность данных при отказе работы воркера(-ов):
- Организация взаимодействия менеджера с воркерами через темы Kafka.
- Механизм автоматического перераспределения задач при отказе воркера.
- Если воркер недоступен, задача должна быть передана другому воркеру для выполнения.
-
Обеспечить сохранность данных при отказе работы Kafka:
- В случае недоступности тем Kafka, менеджер должен сохранить задачи в базе данных до момента восстановления доступности тем.
- Kotlin 1.9
- Gradle
- Spring Boot
- Mongo DB
- Apache Kafka (Kraft)
- Docker Compose
- Junit 5
- Test Containers
- WebTestClient
cd e2e/src/test/resources
docker-compose up