Skip to content

Модель распределенной отказоустойчивой вычислительной системы

Notifications You must be signed in to change notification settings

ded42r/py-distributed-computing-system-model

Repository files navigation

Реализация распределенной вычислительной системы на Python 2.7.

Постановка задачи находится в разделе Задача.

Описание

  • Вычислитель командой, где опция -s для указания файла конфига
    python run_calculator.py -s config.json
  • Клиент запускается с помощью run_client.py
  • Диспетчер запускается с помощью run_dispatcher.py
  • Можно использовать docker-compose, описание сервисов в файле docker-compose.yml.
  • Протокол обмена для всех процессов один и описан в net_protocol. Процессы обмениваются командами в формате json. JSON, а например не бинарный формат выбран для упрощения, т.к. как это модель системы.
  • Описание настроек для клиента, вычислителя, диспетчера находятся в папке docs.
  • В папке config примеры конфигов.
  • Если клиенту отправить сигнал SIGINT, то он мягко завершит работу и выведет статистику
  • Для поддержки аннотаций типов нужно установить модуль typing из requirements-dev.txt. Необязательный шаг.

Задача

Построить модель распределенной отказоустойчивой вычислительной системы.

Три типа процессов:

  • Клиент
  • Диспетчер
  • Вычислитель

Примечания:

  • Протокол взаимодействия между процессами(формат пакетов) - на усмотрение разработчика.
  • Ограничение - в качестве транспорта должен использоваться UDP.
  • Исходный код должен быть совместим с версией Python 2.7.

Клиент

Знает адрес и порт диспетчера, со случайной периодичностью, задаваемой в конфиге клиента, посылает диспетчеру условное задание.

Каждый клиент ведет статистику:

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

Диспетчер

  • Обрабатывает UDP-пакеты от клиентов и вычислителей.
  • Слушает на порту, задаваемом в конфиге диспетчера.
  • Получая запрос от клиента - выбирает доступного вычислителя, посылает ему задание.
  • Получая ответ от вычислителя - возвращает ответ клиенту, инициировавшему конкретный запрос
  • Требуется обеспечить динамическую регистрацию вычислителей диспетчером
  • отслеживание неработоспособности отдельных вычислителей,
  • обеспечить гарантированное выполнение запросов
    • если выбранный для обработки конкретного клиентского запроса вычислитель за заданный промежуток не ответил - диспетчер посылает запрос другому свободному вычислителю, либо держит запрос в очереди, пока не истечет заданный таймаут).

Вычислитель

  • Слушает на порту, задаваемом в конфиге вычислителя.
  • При получении задания эмулирует длительные вычисления, засыпая на период, значение которого определяется случайным образом из интервала, задаваемого в конфиге.
  • По окончании паузы посылает ответ диспетчеру с условным результатом вычислений.
  • Вычислитель может периодически "выходить из строя", переставая принимать запросы и отвечать диспетчеру.
  • Вероятность и длительность периода неработоспособности конфигурируются.
  • Работоспособные вычислители с заданной периодичностью посылают диспетчеру уведомления о своей доступности.
  • Ответ с результатом вычислений также является сигналом диспетчеру о работоспособности конкретного экземпляра вычислителя.
  • Требуется обеспечить динамическую регистрацию вычислителей диспетчером

About

Модель распределенной отказоустойчивой вычислительной системы

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages