Топология
Уровни топологии
Для обеспечения взаимодействия между различными компонентами системы используется трёхуровневая топология:
Нода - можем воспринимать как некую (виртуальную) машину с уникальным в рамках системы именем
Application - фактически работающее на ноде приложение, находящееся в одном из состояний. Нужно для целей деплоя, во взаимодействии компонентов явно не участвует (не выбирается в Discovery)
Роль - тип компонента системы, может быть как одним из стандартных типов - источник данных, фильтр, процесс и т.д., так и определённым для конкретного решения
Таргет - идентификатор конкретного компонента системы, например, имя фильтра или имя процесса
Файл .honeynode
Информация обо всех нодах, ролях и таргетах передаётся при запуске приложения в файле с расширением .honeynode. Подробнее о формате файла (привести ссылку)
Файл содержит две нужные для нас части - описание нод со строками подключения к ним и описание всех таргетов со стратегией выполнения и списком нод.
Стратегия выполнения отвечает за то, как будет выполняться взаимодействие при различных состояниях нод. Может быть стандартной или определена для конкретной системы.
Список стандартных стратегий:
Default - выполняется на локальной ноде, если возможно, иначе пытается выполнить на всех из списка, по очереди и до первого успешного выполнения
Local - выполняется только на локальной ноде
Remote - выполняется только на других нодах. Аналогично Default пытается выполниться до первого успешного выполнения на всех нодах по очереди
Для получения ноды (или нод) для взаимодействия с конкретным таргетом используется DiscoveryService.
public interface IDiscoveryService
{
IStrategy Find(string role, string target);
ITransport Get(string node, string role);
}Актуализировать интерфейс
Транспорт и сообщения
Взаимодействие между компонентами происходит путём отправки сообщения и получения результата.
Выбор транспорта для отправки сообщения
Алгоритм такой:
Подготовка
Last updated