вторник, 10 июля 2018 г.

Распределенные системы - схематично

Нашел  статью на tech.willhaben.at,  где хорошо выделили некоторые моменты теории распределенных систем. Приведу здесь эту информацию тезисно.

Две важные задачи для любой распределенной среды - выбор лидера и автоматическая отказоустойчивость.

Распределенная система может создаваться по разным причинам:
  1. балансировка нагрузки
  2. горячее резервирование (hot standby)
  3. у каждого узла может быть своя задача
Сделать архитектуру ведущий-ведомые проще, чем абсолютно распределенную (когда все  узлы равноправны). У нас могут быть пакетные задачи (batch jobs), скажем, чистка БД, которые лучше выделить для одного узла - скорее всего, это будет мастер.

Некоторые вопросы, которые возникают в такой архитектуре:
  •     Как выбирать лидера?
  •     Что делать, если лидер упал? (автоматич отказоустойчивость) 
  •     Что будет, если лидер отключится от других сервисов?
  •     Что случится, если он переподключится? 
  •     Что делать, если лидер не отвечает?
 Все эти вопросы лучше не решать с нуля. В упомянутой статье рекомендуется использовать Apache Zookeeper. Это некий фреймворк, который умеет решать типовые проблемы распределенных систем. Например, именование, конфигурирование и синхронизацию сервисов (service synchronization). Кстати, а в чем состоит проблема именования? Об этом ниже.

Если коротко, Zookeper предлагает концепцию узлов. Каждому физическому узлу соотвествует узел зукипера со своим уникальным идентификатором. Как только физич узел системы отключается (или падает) - соответствующий ему узел зукипера исчезает. Таким образом, выбрать лидера очень просто - берется физич узел, которому соответствует узел зукипера с минимальным идентификатором.

Во время прочтения статьи, задался вопросом- а чем же собственно сложна проблема именования? В лекции Мохаммада Хаммуда об этом говорится довольно подробно. Плоское именование, структурированное, основанное на атрибутах и всё такое прочее..





Комментариев нет: