Топология

Уровни топологии

Для обеспечения взаимодействия между различными компонентами системы используется трёхуровневая топология:

  • Нода - можем воспринимать как некую (виртуальную) машину с уникальным в рамках системы именем

    • Application - фактически работающее на ноде приложение, находящееся в одном из состояний. Нужно для целей деплоя, во взаимодействии компонентов явно не участвует (не выбирается в Discovery)

  • Роль - тип компонента системы, может быть как одним из стандартных типов - источник данных, фильтр, процесс и т.д., так и определённым для конкретного решения

  • Таргет - идентификатор конкретного компонента системы, например, имя фильтра или имя процесса

Файл .honeynode

Информация обо всех нодах, ролях и таргетах передаётся при запуске приложения в файле с расширением .honeynode. Подробнее о формате файла (привести ссылку)

Файл содержит две нужные для нас части - описание нод со строками подключения к ним и описание всех таргетов со стратегией выполнения и списком нод.

Стратегия выполнения отвечает за то, как будет выполняться взаимодействие при различных состояниях нод. Может быть стандартной или определена для конкретной системы.

Список стандартных стратегий:

  • Default - выполняется на локальной ноде, если возможно, иначе пытается выполнить на всех из списка, по очереди и до первого успешного выполнения

  • Local - выполняется только на локальной ноде

  • Remote - выполняется только на других нодах. Аналогично Default пытается выполниться до первого успешного выполнения на всех нодах по очереди

Для получения ноды (или нод) для взаимодействия с конкретным таргетом используется DiscoveryService.

public interface IDiscoveryService
{
    IStrategy Find(string role, string target);
    
    ITransport Get(string node, string role);
}

Актуализировать интерфейс

Транспорт и сообщения

Взаимодействие между компонентами происходит путём отправки сообщения и получения результата.

Выбор транспорта для отправки сообщения

Алгоритм такой:

  1. Подготовка

Last updated