Доступна ли рабочая роль Azure для локального решения через Windows Azure Pack или App Fabric

#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. В этом случае дополнительное развертывание не требуется