#azure #process #cloud #azure-worker-roles
#azure #процесс #облако #azure-worker-роли
Вопрос:
Я пишу приложение, которое будет развернуто как в облаке, так и в локальных центрах обработки данных (для тех клиентов, которые, по сути, еще не доверяют облаку свои данные.
Если я выберу MS Azure, я могу использовать новые типы облачных проектов с их веб- и рабочими ролями. Но как я могу запустить рабочие роли для локального варианта?
Должен ли я писать свой собственный хост (скажем, как службу Windows)? Это не идеально, поскольку требует дополнительного кода и развертывания.
Существует ли подход, совместимый с Azure, скажем, в Windows Azure Pack или в материалах App Fabric (все ли еще актуальна App Fabric?) для этого не требуется полная настройка частного облака ?
Ответ №1:
Этого не существует в Azure Pack.
Нет необходимости пытаться создать рабочую роль локально. Все, что вам нужно сделать, это иметь виртуальную машину, на которую вы устанавливаете службу Windows.
Службу Windows легко создать с помощью Topshelf.
Развертывание службы Windows с помощью Topshelf на самом деле намного проще, чем развертывание для рабочих ролей, потому что вы просто запускаете .exe, который вы создаете, с install
помощью, а затем с start
аргументами.
Из-за этого вам на самом деле нужно меньше кода, чем для рабочей роли, поскольку вам не нужен второй проект-оболочка.
Комментарии:
1. Если вы пытаетесь запустить один и тот же код в облаке и локально, вы все равно можете создать консольное приложение службы Windows, а затем развернуть его в веб-роли (аналогично рабочей роли для всех целей и задач), используя что-то вроде AzureWebFarm.OctopusDeploy , или вы можете развернуть свое консольное приложениев качестве веб-задания (которое, вероятно, доступно в AzurePack, а если нет, то файл TopShelf .exe в любом случае запускается как обычный файл .exe без аргументов).
2. Самое приятное, что вам никогда не нужно ссылаться на ServiceRuntime или использовать RoleEnvironment или другие специфические для Azure вещи — код не зависит от того, где он развернут :))
Ответ №2:
Хотя я раньше не использовал Windows Azure Pack, он, похоже, способен обеспечить эту функциональность собственными силами, однако требования и процедуры настройки являются интенсивными и, безусловно, ориентированы на предприятие.
Лучшим вариантом является создание консольного приложения, которое запускает функции OnStart() и Run() для вашей рабочей роли на основе планировщика задач вашей операционной системы.
На мой взгляд, не слишком много работы, и вы можете сохранить свои рабочие роли как есть, а просто добавить консольное приложение для любых локальных решений.
Комментарии:
1. Обычно вы используете RoleEnvironment в методе OnStart и Run, поэтому это не сработает.
2. Вы можете использовать среду RoleEnvironment. Доступно логическое значение для переключения между тем, что вы делаете, в зависимости от того, где вы находитесь (например, в Azure или локально)
3. ДА. Но для этого требуется установить Azure SDK для предварительной установки, которая обычно вам не нужна.
4. Вам просто нужно обратиться к Microsoft. WindowsAzure. ServiceRuntime для переменной RoleEnvironment нет необходимости устанавливать весь SDK.
5. Но ms беспокоится о том, насколько локальный код соответствует версии Azure. В этом случае дополнительное развертывание не требуется