Crack Hash


Техническое задание

Функциональные требования

Требуется реализовать распределенную систему для взлома хэша под кодовым именем CrackHash. Непосредственно взлом хэша будем реализовывать через простой перебор словаря сгенерированного на основе алфавита (brute-force).

В общих чертах система должна работать по следующей логике:

В рамках системы существует менеджер, который принимает от пользователя запрос, содержащий MD-5 хэш некоторого слова, а также его максимальную длину. Менеджер обрабатывает запрос: генерирует задачи в соответствии с заданным числом воркеров (вычислительных узлов) на перебор слов составленных из переданного им алфавита. После чего отправляет их на исполнение воркерам. Каждый воркер принимает задачу, перебирает слова в заданном диапазоне и вычисляет их хэш. Находит слова у которых хеш совпадает с заданным, и результат работы возвращает менеджеру через очередь.

Нефункциональные требования

  1. Обеспечить сохранность данных при отказе работы менеджера:

    • Хранение данных об обрабатываемых запросах в базе данных.
    • Взаимодействие воркеров с менеджером через темы Kafka.
  2. Обеспечить частичную отказоустойчивость базы данных:

    • Реализация реплицирования для нереляционной базы данных MongoDB.
    • Минимальная рабочая схема: одна primary нода и две secondary ноды.
  3. Обеспечить сохранность данных при отказе работы воркера(-ов):

    • Организация взаимодействия менеджера с воркерами через темы Kafka.
    • Механизм автоматического перераспределения задач при отказе воркера.
    • Если воркер недоступен, задача должна быть передана другому воркеру для выполнения.
  4. Обеспечить сохранность данных при отказе работы Kafka:

    • В случае недоступности тем Kafka, менеджер должен сохранить задачи в базе данных до момента восстановления доступности тем.

Используемые технологии:

  • Kotlin 1.9
  • Gradle
  • Spring Boot
  • Mongo DB
  • Apache Kafka (Kraft)
  • Docker Compose

Тестовое окружение

  • Junit 5
  • Test Containers
  • WebTestClient

Cхема работы

Запуск

cd e2e/src/test/resources
docker-compose up