Ik3(9) 2007
Е.А. Власова
Акторные модели корпоративных информационных систем
Проектирование корпоративных информационных систем требует решения задач, связанных как с предметной областью их целевого применения, так и с программно-аппаратным обеспечением. Ошибки в определении мощностей ресурсов создаваемой системы, а также алгоритмов их использования могут привести к существенному ухудшению пользовательских параметров (особенно — быстродействия). В статье рассмотрены возможные подходы к созданию моделей, позволяющих проводить необходимые оценки в автоматическом или полуавтоматическом режиме.
Под замкнутой моделью корпоративной информационной системы (КИС) будем понимать модель системы, работающей в режиме «запрос — ответ». Это может быть работа с компьютерной сетью в диалоговом режиме, когда пользователь (или группа пользователей) посылает очередной запрос после получения ответа на предыдущий. В такой модели акторы (запрос пользователя), единожды сгенерированные, циркулируют в пределах графа модели, не исчезая в терминаторах. Выйдя из генератора, актор проходит по графу модели и постепенно, в процессе имитации работы КИС, превращается в ответ и возвращается к пользователю, начиная вновь играть роль запроса. Ниже используется идеология системы имитационного моделирования Actor Pilgrim1.
Моделировать следующий запрос пользователя новым сгенерированным актором не представляется возможным, так как нельзя заранее рассчитать время обработки запроса системой (это случайная величина) и, следовательно, нельзя задать частоту генератора. В данном случае модель может быть построена следующим образом:
• пользователи (или группы пользователей, в зависимости от сложности моделируе-
мой системы) представляются одно- или многоканальными узлами типа эе^ (серверы);
• число каналов сервера соответствует числу пользователей, время обработки актора сервером соответствует времени подготовки пользователями запроса;
• приписываемая актору роль запроса или ответа обозначается в одном из его параметров;
• для зарядки акторами серверов пользователей, принадлежащих одной группе, используется единственный генератор, порождающий всего один актор. Далее акторы размножаются с помощью узлов типа сгеа1
Варианты построения схем зарядки модели акторами
В зависимости от сложности исследуемой КИС, схемы зарядки модели акторами могут иметь различную конфигурацию. В простейшем случае все пользователи системы моделируются одним многоканальным сервером. Другой вариант — представление каждого пользователя с помощью отдельного одноканального сервера. В этом случае в результатах работы модели будет видна информация о каждом пользователе, а не о группе в целом, как в первом варианте. И, наконец, вариант третий — когда в системе имеется несколько групп пользователей.
1 Система Actor Pilgrim представлена на с. 73-103 в статье А.А. Емельянова.
104
№>3(9)2007
Рассмотрим варианты построения схем зарядки модели.
Зарядка одного многоканального сервера
Рассмотрим пример схемы зарядки, показанный на рис. 1.
Рис. 1. Модель корпоративной системы с одним многоканальным сервером для имитации поведения клиентов
Описание узлов в данной схеме имеет вид:
actor ("Один актор"f1,nonefnone,1.0,zero,zerof2);
top(2): creat("Размножение"f4fUsersfnonef4f3); place;
top(3): term("Выключение");
cheg(1,nonefnonefModtime,zerofzerof3); place;
top(4): serv("Пользователи",Users,none,expo,
Think_timefzerofzerof<узел_пpиемник>); clcode
t->iu0=QUERY; place;
Генератор (узел 1) в течение единицы модельного времени генерирует один актор, который попадает в узел creat (узел 2) в качестве порождающего. Узел 2 генерирует (порождает) семейство акторов мощности Users (модельная константа — число пользователей) и с номером семейства 4 (номер узла, моделирующего работу пользователей). Порождающий актор погибает в терминаторе (узел 3). В этот же момент происходит перенастройка генератора(оператор cheg) — интервал между генерацией
акторов устанавливается равным времени § моделирования modtime (такое же время | задано в modbeg). После этого генератор ¿3 «выключается», так как за время моделиро- ^ вания больше не успевает выпустить ни одного актора.
Акторы, порожденные узлом creat, попадают в узел serv (узел 4), моделирующий работу пользователей. Число каналов в нем равно числу вошедших в него акторов (константа Users), а среднее время обслуживания актора равно среднему времени обдумывания пользователем запроса (модельная константа Think_time). Далее — перед выходом актора из узла — ему присваивается начальная метка «запрос» (в параметр t->iu0 заносится модельная константа QUERY).
Таким образом, по графу модели начинает циркулировать столько запросов, сколько имеется пользователей. Адрес же возврата запроса можно определить по значению параметра t->ft «номер семейства». В случае с одним сервером пользователей проблема определения адреса возврата не столь актуальна, как в описанных далее случаях.
Зарядка нескольких одноканальных серверов
Рассмотрим схему зарядки, показанную на рис. 2. Описание узлов этой схемы имеет следующий вид:
actor ("Один aKTop",1fnonefnonef1.0fzerofzero,2);
top(2): creat("Размножение" ,none,Usersfnonef4,3); place;
top(3): term("Выключение");
cheg(1,nonefnonefmodtime,zerofzerof3); place;
top(4): t->ft = addr[4]->na+5; t->ru0 = Think_time; t->iu0 = QUERY; queue("Прием",none,t->ft); place;
Отличие этой схемы от предыдущей состоит во введении дополнительного узла
105
Нв3(9) 2007
Рис. 2. Модель корпоративной системы с несколькими одноканальными серверами для имитации поведения клиентов: N = Users + 4
queue (узел 4). Узел 2 creat генерирует Users акторов (по числу пользователей), не присваивая им номер семейства. Далее эти акторы попадают в очередь (узел 4), где каждому из них присваивается свой номер семейства, равный номеру сервера, в который этот актор поступит. Также в параметр актора t->ru0 заносится среднее время задержки в сервере, моделирующем работу пользователя. Этот параметр используется при описании серверов пользователей (узлов c номерами из диапазона [5, Users + 4], где Users — число серверов, равное числу пользователей).
! Зарядка нескольких
| многоканальных серверов
| Этот вариант (рис. 3) отличается от пре-S дыдущего введением второго узла creat (узел 5). Он последовательно получает из
I f
й I I
t 1 К
<и !
очереди (узел 4) порождающие акторы, уже обладающие необходимыми параметрами для каждого сервера, моделирующего работу группы пользователей (описание узла 4 в варианте 2). Эти акторы становятся образцами для порождаемых семейств. Количество акторов, генерируемых дополнительно для каждого сервера, равно числу моделируемых им пользователей минус 1, так как порождающий актор-образец тоже используется в качестве запроса и поступает в тот же сервер, что и порожденные.
В данном случае Users — это число групп пользователей. Число пользователей в каждой группе можно задать в некотором массиве Mas, доступ к которому осуществляется через значение параметра актора «номер семейства» t->ft, совпадающего с номером соответствующего сервера. Значение параметра актора «Номер семейст-
serv 6
serv 7
serv <N>
Рис. 3. Модель корпоративной системы с несколькими многоканальными серверами для имитации поведения клиентов: N = Users + 5
106
№>3(9)2007
ва» t->ft определяется в этом случае также, как в предыдущем варианте схемы зарядки в узле queue 4. Однако в описание узла нужно внести следующие изменения:
• смещение значения параметра t->ft заменить на 6, так как число узлов в схеме зарядки увеличилось на 1;
• в списке параметров очереди заменить t->ft на номер 5, так как из очереди все акторы идут в узел 5 creat.
Таким образом, описание узла queue 4 в данном варианте схемы зарядки замкнутой модели примет вид:
top(4): t->ft = addr[4]->na+6; t->ru0 = Think_time; t->iu0 = QUERY; queue("Прием",noneí5); place;
Описание дополнительного узла creat 5 имеет вид:
top(5): creat("Размножение 2",t->ft,
Mas[t->ft]-1,copy,t->ft,t->ft); place;
Таким образом, с помощью параметра порождающего актора «Номер семейства» t->ft задается несколько параметров управляемого генератора:
• номер семейства порождаемых акторов;
• мощность (количество порождаемых акторов);
• узел-приемник для порождаемых акторов;
• узел-приемник для порождающего актора.
В данном варианте схемы зарядки, как и в предыдущих, узел creat 2 порождает семейство акторов, играющих роли групп пользователей. Количество акторов, выходящих из этого узла, равно модельной константе
Users. Далее все порожденные акторы по- § следовательно попадают в узел queue 4, где | каждому из них присваивается свой номер <5 семейства t->ft, соответствующий порядко- ^ вому номеру входящего в очередь актора плюс смещение (номер первого сервера). Таким образом, номер семейства актора равен номеру сервера, который будет имитировать работу соответствующей группы пользователей. Далее каждый актор-группа попадает во второй управляемый генератор creat 5, где порождает семейство акторов, играющих роль отдельных пользователей. Каждому из этих акторов присваивается тот же номер семейства (т. е. номер группы пользователей), что и у породившего их актора-группы. Таким образом, можно будет определить, в какой сервер направлять актор после того, как он «превратится» из запроса пользователя в ответное сообщение КИС.
Как уже говорилось выше, количество пользователей в каждой группе задается в целочисленном массиве Mas. Таким образом, выражение Mas[t->ft]-1 соответствует уменьшенному на 1 количеству пользователей в группе, имитируемой очередным вошедшим в creat 5 порождающим актором. Заметим, что в данном случае при предварительном заполнении массива Mas необходимо учесть смещение нумерации групп пользоватей на 6 позиций, так как актор-группа с номером семейства 6, соответствует первой группе пользователей, и т. д. Будучи указанным в третьей позиции списка параметров порождающего генератора, выражение Mas[t->ft]-1 играет роль мощности генератора.
Уменьшение количества пользователей в группе компенсируется следующим образом. Напомним что в параметре порождающего актора-группы t->ft содержится номер сервера, в который должны попасть порожденные акторы-пользователи. Эта цель достигается за счет того, что в 5-й позиции списка параметров узла creat 5 указано значение t->ft. А так как это же значение указано и в следующей позиции (номер узла-приемника порождающего актора), то ито-
107
Ik3(9) 2007
говое чило акторов-пользователей в группе увеличивается на 1 и становится равным необходимому.
Вообще, единицу из значения Mas[t->ft] можно не вычитать, тогда массив Mas должен содержать количество пользователей в группах, уменьшенное на 1. Но в этом случае в схему зарядки придется добавить дополнительный терминатор для приема порождающего актора-группы. В обоих случаях модель будет работать одинаково, так что выбор варианта построения схемы зарядки остается за разработчиком модели. Заметим, однако, что терминатор term 3 необходим, так как входящий в него актор активирует функцию cheg, обеспечивающую выключение исходного источника акторов.
Определение времени реакции КИС
Рассмотрим возможности определения времени ответа на запрос в КИС. При моделировании работы корпоративных информационных систем может возникнуть вопрос, сколько времени в среднем тратит система на обработку одного запроса пользователя. Существуют три способа решения этой задачи:
I • добавить в модель дополнительный 5 узел key и с его помощью проводить заме-§ ры времени реакции; g • получить с помощью модели среднее время пребывания каждого актора во всех ji узлах имитационной модели КИС и исполь-
зовать эти данные для расчета времени реакции;
• использовать только среднее время подготовки конкретным пользователем запроса (или задания) для КИС, полученное с помощью модели, и загрузку узла serv, имитирующего этого пользователя.
Рассмотрим эти способы подробнее.
1. Через дополнительный узел key акторы не проходят; он служит только для измерений. Пусть каждый пользователь имитируется одним сервером. Дополнительно каждому пользователю приписывается узел key. На рис. 4 показана работа одного пользователя. Актор — задание для КИС — предварительно проходит через key и запирает его. Далее, после обработки запроса, этот актор возвращается из модели КИС в этот же сервер, но при входе в узел serv он открывает key. В модели автоматически измеряется интервал закрытого состояния узла key и определяются математическое ожидание и среднеквадратичное отклонение.
Достоинство способа — измерения очень точные при большом числе акторов.
Недостаток — необходимо для каждого пользователя ввести в модель и описать дополнительный узел key, что усложняет модель.
2. С помощью модели можно получить среднее время пребывания каждого актора во всех узлах имитационной модели КИС. Далее необходимо определить средние зна-
Рис. 4. Пример измерения среднего времени реакции системы с помощью дополнительного узла key
108
N93(9)2007
чения вероятностей переходов для всех узлов в модели (это несложно). Затем, используя нетрадиционные методы теории стохастических сетей, определим среднее время пребывания актора в графе модели КИС.
Достоинство способа — применяется известная расчетная методика, основанная на предельных теоремах.
Недостатки — приближенность метода, так как вероятности могут меняться во времени; а также довольно сложная расчетная методика.
3. Среднее время подготовки конкретным пользователем запроса (или задания) для КИС и загрузка соответствующего узла эв^, имитирующего этого пользователя, определяются в модели автоматически. Причем эти измерения всегда точны, и в случае моделирования группы типовых пользователей одним многоканальным узлом эе^, и в случае моделирования каждого уникального пользователя отдельным од-ноканальным узлом веп^.
Рассмотрим временную диаграмму работы уникального пользователя с КИС (рис. 5). На достаточно длинном интервале времени моделирования tm происходит п обращений к КИС. Среднее время ^ подготовки пользователем каждого задания КИС автоматически определяется по следующей формуле:
<■ -1 [Ь
п {£1
| | — КИС выполняет задание пользователя
У/\ — пользователь готовит очередное задание для КИС (время ?,)
Рис. 5. Временная диаграмма работы пользователя и системы
Загрузка р узла эе^ актором — это доля всего времени tm, которое тратится пользователем на подготовку каждого нового задания КИС, данный показатель также автоматически определяется по формуле:
IÜ
tu + tr = tc
Ptm
u = t
Lc
—— = tc (1 -p) c
Отсюда получаем время реакции КИС:
1 -p
tu .
109
«о «
о
U
il <3
1
Доля времени моделирования, в течение которого КИС обрабатывала п запросов, равна 1 - р. Поэтому справедливо соотношение:
р^ + (1 -р% - ^ .
Разделим левую и правую части этого равенства на п и получим следующее выражение:
где tu -^-П--среднее время подготовки
запроса пользователем;
, (1 - рК
t' —п^--среднее время реакции
КИС;
tc - —--среднее время одного цикла
«запрос — ответ» после выполнения всех п заданий пользователя.
Нетрудно видеть, что
Достоинства способа заключаются в том, что он имеет такую же высокую точность, как при работе с дополнительным узлом key, и этот способ значительно проще, чем 1 и 2. Действительно, расчет по формуле осуществить значительно легче, чем включить n дополнительных узлов key или решить систему из n нелинейных уравнений методом итераций.
t
m V i =1
Ив3(9) 2007
Недостаток — не определяется среднеквадратичное отклонение.
Программирование условий прохождения актора по графу модели
Модель такой системы, как КИС, в силу сложности исследуемого объекта, обязательно будет содержать ветвления в маршруте акторов, когда актору необходимо выбрать узел-приемник из нескольких возможных. Рассмотрим некоторые варианты построения ветвлений.
Случайный выбор из класса узлов
При построении моделей может сложиться ситуация, когда какой-либо объект имеет несколько подчиненных, объединенных общим именем класса, в который они попадают, и требуется решить, в какой из подчиненных узлов направлять актор. Причем актор тем чаще направляется в узел, чем больший вес он имеет. Под весом будем понимать любую количественную характеристику соответствующего узлу объекта, по которой может производиться сравнение.
На рис. 6 приведен пример фрагмента графа модели.
Пусть — вес узла, Т — сумма весов. Обозначим через N число узлов, тогда
£ Т
Условие выбора узла с номером к выглядит следующим образом:
1 к-1 1 к 1 £ю, <р < 1 ,
Т I=1 Т I=1
где р — случайная величина, равномерно распределенная на отрезке [0;1]. Таким образом, отрезок [0;1] разбивается на интервалы, каждому из которых соответствует определенный номер узла (рис. 7). В табл. 1 показано, как получаются границы этого разбиения. Строки таблицы содержат следующую информацию:
• номера узлов к;
• абсолютные веса узлов 1Жк;
• относительные веса узлов W¡ = №к{Т;
• накапливающаяся сумма относительных
о w¡ весов Бк = £—.
I=1 Т
Значение Бк является правой границей интервала, соответствующего узлу с номером к.
5 Й
I
ig I
I f
I g
I
s
ï <u
Шкала условных весов
30 10 45 55 15 45
queue queue queue queue queue queue
1 2 3 4 5 6
queue
101
и
hold I I reis Рис. 6. Фрагмент схемы модели
110
№>3(9)2007
Таблица 1
Значения для построения графика функции выбора узла
k 1 2 3 4 5 6
Wk 30 10 45 55 15 45
Wk 0,150 0,050 0,225 0,275 0,075 0,225
Sk 0,150 0,200 0,425 0,700 0,775 1,000
На рис. 7 значение случайной величины p* обусловливает выбор узла 4. Данный узел будет выбираться чаще всего, так как он имеет наибольший вес. Узел 2, напротив, будет выбираться в наименьшем числе случаев. Вероятность выбора узлов 3 и 6 одинакова.
Программная функция Number, определяющая номер выбираемого узла, показана ниже. Входными параметрами являются массив весов, число узлов и суммарный вес. Функция возвращает номер элемента массива весов. Сумма длин интервалов p0 будет накапливаться до тех пор, пока переменная i не «доберется» до значения, соответствующего интервалу, в который попадает случайная величина p (на рис. 7 это р*).
к*
6-----------------------------------
int Number(float *weight,int n,float sum) §
о
{ w
{ §
int i,k; 00
чг
float p,p0; Ljj
p0=0.0;
p=rundum(); //Датчик случайных чисел Pilgrim //на отрезке [0,1]
for (i=0;i<n;i++)
{
k=i;
if ((p>=p0)&&(p<=p0+weight[i]/sum)) break;
else
p0+=weight[i]/sum; }
return(k+1);
}
Выбор пути на основании параметра актора
Простейшая схема выбора дальнейшего пути продвижения актора в зависимости от значения его целочисленного параметра имеет типовое описание. В качестве узла ветвления лучше всего применять key. Такой узел может иметь любой номер. Обозначим через P1 параметр актора, исполь-
5
4
3 2 1
0,15 0,2 0,425 р* 0,7 0,775 1
Рис.7. График функции выбора узла для заданной шкалы весов
111
Ik3(9) 2007
зуемыи для проверки условия перехода, через P2 — параметр, задействованный для перехода в следующий узел, через m — количество вариантов значения P1. Типовое описание узла ветвления выглядит следующим образом:
top(<Номер_узла_ветвления>):
switch(<P1>) {
case <Значение_1>: <P2>=<Номер_узла_1>; break; case <Значение_2>: <P2>=<Номер_узла_2>; break;
top(102):
switch(t->ft) {
case 1: t- >iu0= 41; break;
case 2: t- >iu0= 56; break;
case 3: t >iu0 со 6 break;
case 4: t- >iu0= 34; break;
case 5: t >iu0 = 29; break;
case 6: t >iu0 = 11; break;
}
key("Узел_ветвления" place;
t->iu0) ;
case <Значе^е_ш>: <P2>=<Номер_узла_m>; break; }
<Тип_узла_ветвления>(<Параметры_узла>,<P2>); place;
Пример такого узла ветвления показан на рис. 8. Пусть требуется распределять акторы из шести разных семейств по различным очередям, причем каждому семейству соответствует определенная очередь. Тогда параметром P1 является номер семейства актора t->ft, значения которого варьируются от 1 до 6. В качестве P2 выбран параметр t->iu0.
Ниже приведен текст описания узла ветвления key 102.
s
is
I
ig I
I f
I g
i
s
Ï <u
Узел_ветвления: 102
queue
101
7
H
hold ! ! reis
В более сложных случаях критерий выбора пути может представлять собой логическое выражение, включающее один или несколько параметров актора. Тогда для программирования ветвлений в маршруте акторов требуется применение условного оператора if. В этом случае каждому варианту перехода актора ставится в соответствие определенное логическое выражение (условие перехода), при истинности которого выбирается данный узел. Помимо параметров актора, в состав условия перехода могут входить параметры состояния узлов модели, а также системные и пользовательские модельные переменные.
t->iu0=41
queue 41
t->iu0=56
queue 56
t->iu0=68
queue 68
t->iu0=34
queue 34
t->iu0=29
queue 29
t->iu0=11 queue
11
Рис. 8. Схема выбора пути в соответствии с параметром актора
112
N93(9)2007
<0 «
о
U il
Рис. 9. Пример объектно-зависимой нумерации узлов
Моделирование составных объектов класса
Если в модели имеется несколько принадлежащих к одному классу объектов, и все они представлены несколькими узлами, то целесообразно нумеровать узлы, относящиеся к каждому объекту, таким образом, чтобы номера соответствующих узлов разных объектов были функцией от i — номера объекта данного класса. В этом случае типовые блоки обработки акторов в одних и тех же узлах разных объектов можно оформить в виде процедур, вызываемых с параметром «Номер объекта», вместо того чтобы переписывать одни и те же операторы обработки, изменяя лишь номера узлов.
На рис. 9 приведен пример участка графа модели, включающей в себя m однотипных фрагментов. В состав каждого фрагмента входит три узла: два узла типа queue и один — типа key. Введем следующие обозначения для нумерации узлов каждого фрагмента:
q1 — номер очереди, первой по порядку следования акторов;
k — номер ключа;
q3 — номер очереди, второй по порядку следования акторов.
Тогда для определения номера узла, входящего во фрагмент с номером i, можно воспользоваться следующими соотношениями:
q1(/)=/*10+1, k(/)=/*10+2, q2(/)=/*10+3.
Пусть далее n — число узлов в составе объекта, j — порядковый номер узла в составе объекта, х — реальный номер узла в модели. Тогда для общего случая
x(/,j)= /*10+j.
Таким образом, для каждого класса объектов, входящих в модель, могут быть составлены наборы стандартных модулей обработки акторов, что значительно упростит программирование модели. Номер объекта / и номер узла внутри объекта j будут передаваться в модуль в качестве входных параметров.
Операцию вычисления номера узла целесообразно представить в виде отдельной функции (аналогично рассмотренной выше функции Number), которая, в свою очередь, будет использоваться в составе модуля обработки актора.
Приведенные в данной статье подходы позволяют создавать на стадии проектирования довольно сложные имитационные модели корпоративных систем, использующих средства телекоммуникации, с учетом их значительной территориальной распределенности.
Список литературы
1. Емельянов А.А, Власова Е.А., Дума Р. В. Имитационное моделирование экономических процессов. М.: Финансы и статистика, 2006.
2.Теория систем и системный анализ в управлении организациями / Под ред. В.Н. Волковой и А.А. Емельянова. М.: Финансы и статистика, 2006.
113