Как преднамеренно вызвать аварийное завершение роли Azure? - PullRequest
1 голос
/ 23 мая 2011

Я хочу, чтобы приложение Windows Azure было максимально устойчивым к ошибкам, и мне нужно иметь возможность преднамеренно аварийно завершить работу ролей, чтобы проверить, как целое приложение восстанавливается после таких сбоев.

Полагаю, я мог бы вставитьзакодируйте прямо в роли, которая получит случайное число и решит сбой с некоторой довольно низкой вероятностью.Реальная проблема в том, как

if( isTimeToCrash() ) {
   //what exactly do I do here?
}

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

Как надежно вывести из строя роль Azure намеренно?

Ответы [ 3 ]

3 голосов
/ 23 мая 2011

Вы можете либо включить RDP в машину, либо использовать задачу запуска, чтобы добавить запланированную задачу, которая будет периодически завершать процесс WaAppAgent. Powershell довольно хорош здесь, чтобы найти и убить процесс. Вы должны быть администратором, чтобы сделать это. Это разорвет связь с контроллером фабрики на некоторое время, пока он не восстановится и не перезапустит процесс. IIRC, он также убьет ваш код RoleEntryPoint (работает под WaWebHost или WaWorkerHost). Это будет симулировать довольно большую неудачу.

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

1 голос
/ 23 мая 2011

Для рабочей роли вы можете выбросить исключение из Run () и оставить его необработанным.Тем не менее, я не знаю, соответствует ли это вашей квалификации как «сбой» - роль будет изящно переработана.

мы, роли, как правило, собираем необработанные исключения через IIS, поэтому предложение Даннри, вероятно, приближает вас кASOD (Azure Screen of Death), который вы ищете.

1 голос
/ 23 мая 2011

Я не уверен в сбое роли, но с помощью API управления ролями вы можете перезагрузить роль . Вы можете посмотреть на этот образец

...