Файл конфигурации для распределенных систем

В настоящем разделе описываются необходимые записи, которые автоматически создаются при создании распределенного проекта (см. также Создание распределенной системы). Записи задаются в конфигурационном файле, находящемся в proj_path/config/.

Для распределенной системы необходимы следующие записи:

ПараметрТипПо умолчаниюДиапазонЗначение
[general]distributedbool00|1Обязательная запись. Определяет распределенную систему. Для распределенной системы необходима запись «distributed = 1» в разделе [general].К тому же, это значение для отдельных менеджеров может быть перезаписано. [ctrl_1]distributed = 0 В данном случае менеджер сценариев под номером 1 не может получить доступ к точкам данных других систем (идентификатор точки данных не передается для этого менеджера).
[dist]distPortint4777>= 0Указывает номера портов, которые использует менеджер распределенной архитектуры для принятия соединений от других систем. Значением по умолчанию является порт = 4777. Обратите внимание, что вам не надо определять номера портов, если ваши проекты работают на разных компьютерах. Если же ваши проекты снова работают на одном и том же компьютере, то вам необходимо определить номера портов.
[dist]distPeerstring«»«host1[:port1][$host2[:port2]]»distPeer =  System numberУказывает хосты и номер системы, с которым будет соединяться менеджер распределенной архитектуры в качестве «клиента» (другая система является «сервером»). Если другая система является резервированной, оба имени хоста разделяются символом «$».Внимание:Последовательность, в которой хосты задаются в конфигурационный файл, должна быть всегда одной и той же. Это значит, что, если, например, хосты заданы в конфигурационный файл data следующим образом:

data = «host1-1,host1-2$host2-1,host2-2»

то хосты в конфигурационном параметре distPeer должны быть заданы в такой же последовательности:

distPeer = «host1[:port1][$host2[:port2]]» номер системы

Другая последовательность (distPeer = «host2[:port1][$host1[:port2]]» номер системы) приводит к ошибкам соединения.
[dist ]requestIdDelayint0>= 0Промежуток времени между получением идентификатора и запросом следующего. С помощью этой настройки можно регулировать распределение идентификатора в менеджере событий, т.е. можно дать событию достаточно времени для распределения одного идентификатора между всеми клиентами до запроса идентификатора следующей системы.

ПРИМЕР 1

Распределенная система, состоящая из 2 систем:

Рисунок: Распределенная система, состоящая из 2 систем

Чтобы создать распределенную систему, содержащую две разных системы, связанных друг с другом (System1 и System2), в двух системах необходимо ввести следующие записи:

System1 (имя хоста Host1):

[general]

distributed = 1

#Для System1 не нужна запись distPeer, так как она является сервером для System2.

System2 (имя хоста Host2):

[general]

distributed = 1

[dist]

distPeer = «Host1» 1 #Connect to Host1 (of System1), system number 1

ПРИМЕР 2

Распределенная система, состоящая из 4 систем, которые соединены друг с другом:

Рисунок: Распределенная система, состоящая из 4 систем

Чтобы создать распределенную систему, содержащую четыре разных системы (System1, System2, System3 и System4), необходимо ввести следующие записи (в данном примере System4 является сервером для всех остальных систем, System3 — клиентом для System4 и сервером для System1 и System2. System2 является клиентом для System3 и System4, и сервером для System1. System1 является клиентом для всех остальных систем):

System1 (имя хоста Host1):

[general]

distributed = 1

[dist]

distPeer = «Host2» 2 #Connect to Host2 (of System2), system number 2

distPeer = «Host3» 3 #Connect to Host3 (of System3), system number 3

distPeer = «Host4» 4 #Connect to Host4 (of System4), system number 4

System2 (имя хоста Host2):

[general]

distributed = 1

[dist]

distPeer = «Host3» 3 #Connect to Host3 (of System3), system number 3

distPeer = «Host4» 4 #Connect to Host4 (of System4), system number 4

System3 (имя хоста Host3):

[general]

distributed = 1

[dist]

distPeer = «Host4» 4 #Connect to Host4 (of System4), system number 4

System4 (имя хоста Host4):

[general]

distributed = 1

ПРИМЕР 3

Распределенная система (содержащая 7 разных систем) с иерархической структурой

(Все системы связаны с System1. System5 связана с System2, а System 6 и System7 — с System3).

В иерархической структуре лучше всего, чтобы система высшего уровня была сервером для всех остальных систем, системы нижнего уровня были клиентами для всех остальных систем, а системы среднего уровня были серверами для всех систем, которые располагаются ниже, и клиентами для всех систем, которые располагаются выше. Это дает два преимущества: нужно меньше конфигурационных записей, и, если вы добавляете системы «нижнего уровня», вам не надо изменять конфигурационный файл систем «верхнего уровня» (следовательно вам не придется перезапускать системы «верхнего уровня»).

Рисунок: Распределенная система, состоящая из 7 систем

System1 (имя хоста Host1):

[general]

distributed = 1

Для системы 1 (System1) не нужна запись distPeer, так как она является сервером.

System2 (имя хоста Host2):

[general]

distributed = 1

[dist]

distPeer = «Host1» 1 #Connect to Host1 (of System1), system number 1

System3 (имя хоста Host3):

[general]

distributed = 1

[dist]

distPeer = «Host1» 1 #Connect to Host1 (of System1), system number 1

System4 (имя хоста Host4):

[general]

distributed = 1

[dist]

distPeer = «Host1» 1 #Connect to Host1 (of System1),  system number 1

System5 (имя хоста Host5):

[general]

distributed = 1

[dist]

distPeer = «Host1» 1 #Connect to Host1 (of System1), system number 1

distPeer = «Host2» 2 #Connect to Host2 (of System2), system number 2

System6 (имя хоста Host6):

[general]

distributed = 1

[dist]

distPeer = «Host1» 1 #Connect to Host1 (of System1), system number 1

distPeer = «Host3» 3 #Connect to Host3 (of System3), system number 3

System7 (имя хоста Host7):

[general]

distributed = 1

[dist]

distPeer = «Host1» 1 #Connect to Host1 (of System1), system number 1

distPeer = «Host3» 3 #Connect to Host3 (of System3), system number 3

ПРИМЕЧАНИЕ

Вы можете изменить номер системы и имя существующего проекта с помощью WCCOAtoolSyncTypes. Обратите внимание, что проект прекращает работу и запускает WCCOAtoolSyncTypes с помощью следующей командной строки:

WCCOAtoolSyncTypes -system 3 newSysName -proj «Demo_3.5»

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

Имя и номер системы можно запросить в CONTROL с помощью функций getSystemName() и getSystemId():

main()

{

int sysId;

string sysNam;

sysNam = getSystemName();

DebugN(«NAME IS:»,sysNam);

sysId=getSystemId(sysId);

DebugN(«ID IS:»,sysId);

}

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *