В некоторых приложениях полезно моделировать ситуации, в которых сервер отказывает. Например, машина выходит из строя и позже восстанавливается, или сетевое соединение прекращает работать, а позже восстанавливается. В этом разделе рассматриваются способы моделирования отказа сервера и состояния сервера.
Серверные блоки не имеют встроенных состояний, поэтому можно проектировать состояния любым способом, подходящим для вашего приложения. Некоторые примеры возможных состояний сервера приведены в этой таблице.
Сервер как канал связи | Сервер как машина | Сервер как человеческий процессор |
---|---|---|
Передающее сообщение | Обрабатывающая часть | Работа |
Подключено, но не работает | Ожидание прибытия новой части | Ожидание работы |
Не связанный | Прочь | Без заполнения |
Holding message (ожидание доступности места назначения) | Удерживающая часть (в ожидании наличия следующего оператора) | Ожидание ресурса |
Установление соединения | Разогрев | Подготовка к началу работы |
Для любого состояния, которое представляет невозможность сервера или отказ от приема поступлений сущностей, хотя сервер не обязательно полон, общая реализация включает блок Entity Gate, предшествующий серверу.
Шлюз препятствует сущности доступу к серверу всякий раз, когда сообщение управления ключом в входе порту в верхней части блока содержит нули или отрицательные значения. Логика, которая создает управляющее сообщение, определяет, находится ли сервер в состоянии отказа. Можно реализовать такую логику с помощью блока Simulink Function, с помощью блока Message Send или с помощью графиков Stateflow ® для перехода среди конечного числа состояний сервера.
В этом примере показан образец, в котором блок Entity Gate предшествует серверу. Пример конкретно не о состоянии отказа, но идея управления доступом к серверу аналогична. Он моделирует стохастически возникающий отказ, который длится некоторое количество времени.
Примечание.Шлюз препятствует поступлению новых сущностей на сервер, но не препятствует завершению обслуживания текущей сущности. Если необходимо извлечь текущую сущность с сервера при вхождении отказа, можно использовать функцию прерывания сервера, чтобы заменить текущую сущность на высокоприоритетную сущность 'placeholder'.