Слияние, расщепление и синхронизация транзактов 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Слияние, расщепление и синхронизация транзактов



 

Модуль соединения Batch – производит объединение (временное или постоянное) заданного числа транзактов в один транзакт. Модуль имеет очередь, где поступающие траназкты ожидают, до тех пор пока не будет набрано необходимое число транзактов. После этого транзакт-сборка последует по модели далее.

Обозначение:

 

Параметры модуля Batch показаны на рисунке.

 

 

Важнейшими свойствами являются:

- тип (Type). Постоянное соединение (Permanent) не предполагает дальнейшего разделения транзакта-сборки на части. Пример постоянного соединения – сборка агрегата из деталей. Далее по модели следует агрегат. Временное соединение (Temporary) впоследствии может быть разобрано. Пример – пассажиры заполняют вагон, вагон следует до станции, пассажиры покидают вагон (для разборки временного соединения используют модуль Separate);

- размер (Batch Size). Это число объединяемых транзактов;

- результирующий тип транзакта (Representative Entity Type). Это тип транзакта-сборки. Например, детали собираются вместе и результирующим транзактом является собранный агрегат (это будет видно наглядно, поскольку этому типу транзактов можно задать свою картинку). Еще пример – бутылки вина комплектуются по 6 штук и помещаются в ящик, который и является транзактом-сборкой.

- правило объединения (Rule). Если выбрано правило Any Entity модуль будет объединять любые транзакты, даже транзакты разного типа. Если же указать правило «в соответствии со значением атрибута» (by attribute) и задать имя атрибута, то объединяться будут только транзакты, с одинаковым значением этого атрибута. Например, можно выбрать атрибут Entity.Type (тип транзакта) и тогда комплектоваться в группы будут транзакты-детали одного типа.

Еще пример – на заводе с традиционной технологией изготовления вина готовые бутылки поступают в цех упаковки. Не следует собирать в один ящик бутылки разных сортов. Нужно задать правило «по атрибуту» и указать атрибут, соответствующий сорту вина. Теперь будут формироваться отдельно ящики шампанского брют, полусухого шампанского и т.д.

 

 

Транзакты-бутылки будут ожидать в очереди пока не соберется нужное число бутылок какого-то сорта.

Еще один распространенный случай использования правила – указывать в качестве атрибута серийный номер транзакта Entity.SerialNumber. Поскольку при копировании транзактов [20] это номер сохраняется, то появится возможность собирать вместе копии одного транзакта.

- правило сохранение значений (Save Criterion) Позволяет, например, суммировать затраты на обработку всех собираемых транзактов-деталей, чтобы рассчитать себестоимость полученного агрегата.

Модуль разделения (дублирования) Separate. Снимает с транзакта заданное число копий, либо разделяет ранее соединенную модулем Batch транзакт-сборку.

Обозначение:

Параметры модуля показаны на рисунке. Здесь выбран тип «Split Existing Batch» (расщепить ранее собранный транзакт-сборку).

Транзакт-сборка (полученный в модуле Batch с типом временного соединения, Temporary), попав модуль Separate, будет разобран. Пример – пассажиры автобуса покинут его после прибытия на место назначения.

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

 

Другой тип модуля Separate – дублирование транзакта (Duplicate Original). При попадании транзакта модуль создает заданное число его копий. Копии сохраняют серийный номер транзакта-родителя и наследуют все его атрибуты. Накопленная на родительском транзакте стоимость могут быть перенесены (полностью или частично) на новые транзакты.

Обозначение:

Модуль имеет два выхода, один – для исходного транзакта (Original), второй – для транзактов-копий (Duplicate).

Среди параметров модуля основной – число создаваемых копий (# of Duplicates).

 

Часто модули Batch и Separate используются совместно.

Первый вариант: транзакты объединяются во временную сборку (тип Temporary) в модуле Batch, а затем после прохождение какой-то обработки разъединяются в модуле Separate (тип Split Existing Batch). Например, пассажиры занимают места в автобусе, автобус совершает поездку, пассажиры выходят из автобуса:

 

 

Второй вариант: модуль Separate производит копирование (тип Duplicate Original), затем копии вновь собираются в один в модуле Batch, постоянное соединение (тип Permanent):

 

Пример 20. При передаче данных через сегмент компьютерной сети транзакты-пакеты разделяются, поскольку протокол нижнего уровня ограничивает размер пакета, пропускаемого через этот сегмент. На станции назначения пакеты вновь собираются. Разумеется, должны собираться исходные части каждого конкретного пакета, поэтому при сборке в модуле Batch используется атрибут SerialNumber.

 

Граф модели:

 

В модуле Separate происходит фрагментация сетевого пакета, его разделение на 5 частей (исходя из разницы в размерах пакетов для сетевых протоколов). Исходный транзакт передается в модуль Dispose и выводится из модели. Транзакты-копии следуют далее.

 

 

Транзакты-фрагменты по отдельности передаются через сеть. Поскольку процессы передачи пакетов по сетям носят случайный характер, то на конечную станцию будут поступать множество фрагментов из разных исходных пакетов, причем фрагменты каждого пакета могут приходить в произвольном порядке.

Модуль Batch производит объединение пакетов по 5 штук, причем объединяются именно фрагменты одного пакета, а не разных. Это достигается благодаря выбранному правилу By Attribute. В качестве атрибута для сборки используется серийный номер транзакта Entity.SerialNumber.

 

Ранее при дублировании транзакта (при фрагментации в модуле Separate) все копии получили тот же серийный номер, что и у родителя.

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

 

Описанная модель в упрощенном виде иллюстрирует некоторые принципы работы таких протоколов, как IP.

 

Пример 21. Сделаем прошлый пример (Пример 20) немного более реалистичным. Будем учитывать, что пакеты, передаваемые по сети, имеют разный размер, следовательно и число фрагментов может быть различным.

 

Заведем специальный атрибут size для размера исходного передаваемого пакета в байтах (для установки атрибута добавим в модель модуль Assign). Новая структура модели показана на рисунке:

 

 

Параметры модуля Assign, где устанавливается случайным образом длина пакета в байтах показаны на рисунке:

 

 

В переменной MAXSIZE будем хранить максимально возможный размер фрагмента для передачи по сети. Соответственно теперь, пакет разбивается на необходимое число фрагментов. При MAXSIZE=500 пакет размером в 650 байт будет разбит на два фрагмента. Пакет размером 1200 байт будет разбит на 3 фрагмента и т.д.

Расчет необходимого числа фрагментов производится в модуле Separate:

 

Число пакетов равно:

 

AINT(size/maxsize)+ (MOD(size,maxsize) >0)

Первое слагаемое округляет в меньшую сторону результат деления, а второе слагаемое принимает значение 1, если у деления имеется остаток и 0, если остатка нет. В синтаксисе Arena у логических операций результат 0 соответствует значению ЛОЖЬ, результат 1 соответствует значению ПРАВДА.

Аналогичный расчет производится и в модуле Batch.

 

 

Таким образом, разделение и объединение транзактов может опираться на значения их атрибутов.

Модуль Match осуществляет синхронизацию двух или более (до пяти) транзактов. Имеет несколько входов и соответствующее число выходов. Поступивший на вход транзакт ожидает, пока на другой вход (или на все другие входы, если их несколько), поступят транзакты. Как только набор транзактов на всех входах собран – все они одновременно продолжают движение, причем каждый на свой выход.

Модуль имеет две или более очереди (по числу входов). В этих очередях поступающие транзакты ждут синхронизации.

Обозначение:

Пример использования – имеется три различные части одного агрегата, которые вместе должны пройти какую-то операцию. Эти три части должнs поступить на эту операцию одновременно, что достигается с помощью модуля синхронизации Match:

 

 

Параметры модуля:

- число синхронизируемых транзактов (Number to Match). Это число входов, выходов, очередей. В приведенном выше примере должны поступить три различные части какого-то агрегата (например: кузов, двигатель, рама);

- тип объединения (Type).

Тип может принимать одно из двух значений:

«Any Entities» - любые поступившие транзакты будут производиться синхронизации. Так, в предыдущем примере не важно, какой именно кузов поступил, детали являются стандартными.

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

 

Пример 22. Требуется построить модель, имитирующую работу маршрутных такси, изучить работу системы (определить среднее время ожидания пассажиром такси, среднее время пребывания такси на маршруте, среднее время стоянки такси, число обслуживаемых пассажиров) [21]. Параметры модели представлены в таблице.

 

Параметр Закон распределения Параметры закона
Интервал прихода пассажиров экспоненциальный Мат. ожидание = 1 мин
Интервал прихода маршрутного такси экспоненциальный Мат ожидание = 10 минут
Время поездки до конечной остановки экспоненциальный Мат ожидание =20 мин;
Число пассажиров в такси    

 

Иными словами, на остановку раз в 10 минут подъезжают маршрутные такси. Очередное такси подается к месту посадки, когда предыдущее отправляется на маршрут. Также к остановке подходят пассажиры, раз в минуту. Пассажиры занимают место в такси, которое отправляется на маршрут только когда будет заполнено полностью.

Очевидно, что имеются два типа транзактов: такси и пассажиры.

Граф модели показан на рисунке.

 

 

Транзакты обоих типов создаются соответствующими модулями Create. При этом транзакты-такси следуют в модуль Match, а пассажиры должны сначала собраться в группу из десяти человек. Для этой цели установлен модуль Batch с именем Join10.

Параметры модуля Batch показаны на рисунке. Объединение является постоянным (Permanent). Должны подойти 10 пассажиров (Batch size 10). Исходящим транзактом является группа пассажиров, готовая к посадке в такси и поездке.

Модуль имеет очередь – там собираются пассажиры, пока их не станет 10 и не будет сформирована группа.

 

Ключевым для этой модели является модуль Match, обеспечивающий условие для отъезда такси – наличие машины и десяти пассажиров. Одновременно может быть заполнена только одна из его очередей – или пассажиры ждут такси, или такси ожидает, пока появятся 10 пассажиров. Параметры модуля показаны на рисунке. Число синхронизируемых транзактов равно двум – это такси и группа пассажиров.

 

 

Второй модуль Batch с названием TakeSeat символизирует посадку пассажиров в такси. Исходящим транзактом является такси. Размер равен двум, это значит должны объединиться такси и группа пассажиров. Благодаря тому, что модуль Match подаст два этих транзакта одновременно, будет гарантирована правильность объединения.

 

 

После объединения транзактов (пассажиры сели в такси) машина отправляется на маршрут (модуль Process).

Контрольные вопросы

1) Могут ли одновременно все очереди модуля Match содержать транзакты, если установлено правило синхронизации «Any Entity»?

2) К ЗАГСу на автомобилях подъезжают женихи и невесты. Далее осуществляется синхронизация перед началом церемонии бракосочетания. Какое правило синхронизации следует использовать?

3) Сколько выходов может иметь модуль Separate?

4) В чем особенность атрибута Serial Number?

5) Какие два наиболее частых случая совместного использования модулей Separate и Batch?

6) Сколько очередей имеет модуль Match?

7) Зачем нужна очередь в модуле Batch?

8) Сколько очередей имеет модуль Separate?

9) Объединяет ли модуль Match транзакты?

10) Что означает правило объединения (Rule) в модуле Batch?

11) Как сделать так, чтобы результатом объединения нескольких транзактов-узлов был транзакт-автомобиль?

12) Каким модулем можно разделить временно объединенные в группу транзакты?

 



Поделиться:


Последнее изменение этой страницы: 2016-06-29; просмотров: 390; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.191.43.140 (0.037 с.)