Каков шаблон для приложения Azure, которое масштабируется без какой-либо третьей стороны? - PullRequest
3 голосов
/ 23 января 2012

Я хочу сделать свою веб-роль Azure масштабируемой автономным способом.

Все решения по масштабированию, которые я видел до сих пор, включают в себя некоторые сторонние - это может быть специальная служба, которая отслеживает роль Azure.и масштабирует его, или это может быть приложение для ручного масштабирования.Мне нужен дополнительный код внутри моей роли, который принимает решение о том, когда масштабировать и инициирует масштабирование.

Я предвижу следующие проблемы.Во-первых, в каждый момент времени должен быть только один экземпляр роли, который решает, когда масштабировать и как масштабировать, чтобы два или более экземпляров не создавали беспорядок масштабирования.Во-вторых, если этот конкретный экземпляр умирает по какой-либо причине, другой экземпляр должен быть выбран в течение некоторого разумного периода времени.И, наконец, все вещи не должны создавать слишком много накладных расходов.

Существуют ли какие-либо шаблоны для реализации такого автономного масштабирования?

Ответы [ 3 ]

4 голосов
/ 23 января 2012

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

Шаблон, который до сих пор работал для нас лучше всего, включает в себя следующие аспекты:

  • Не доверяйте никаким низкоуровневым показателям (например, использование памяти или ЦП) для определения своей метрики масштабирования, создайте простую, но весьма актуальную метрику, которая определяет вашу рабочую нагрузку (и количество необходимых виртуальных машин).
  • Сохраняйте строгую симметрию между всеми виртуальными машинами (без главного или подчиненного): каждая виртуальная машина потенциально ответственна за изменение количества предоставляемых виртуальных машин.
  • У каждой виртуальной машины есть фоновый поток, имеющий дело с автомасштабированием. 99.999% времени эта тема ничего не делает. Каждую минуту поток пытается получить аренды BLOB-объекта , а затем запустить логику обеспечения. Если аренда блоба не может быть получена сразу, откажитесь, на ней уже есть другая виртуальная машина.
  • Создание виртуальных машин через Azure занимает около 5 минут, и вы сразу же платите за 1 час. Я предлагаю быть немного 1018 * ленивым когда дело доходит до деинсталяции и ждать около 30 минут или около того, нет никакой пользы в деинстанцировании после 10 минут.
  • API обеспечения - медленно , убедитесь, что вызывающий поток ничего не блокирует на виртуальной машине в течение этого времени.
  • Сократите минимальное количество виртуальных машин до 2, чтобы улучшить время безотказной работы.
2 голосов
/ 23 января 2012

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

  • В каждом экземплярекод, который пытается получить в аренду известный блоб.
  • Тот, кто получает аренду, запускает код масштаба (предположительно, какой-то тип проверки по расписанию, возможно, с использованием блока приложения автомасштабирования, упомянутого @tjrobinson).
  • Кто получает исключение, спит и периодически повторяет попытку.Если экземпляр, удерживающий аренду, по какой-либо причине умирает, другой экземпляр сможет получить аренду, которая скоро будет потеряна, и начнет выполнять код автоматического масштабирования.
2 голосов
/ 23 января 2012

Наиболее близким к официальному решению Microsoft является Блок приложения для автоматического масштабирования , входящий в состав пакета интеграции Microsoft Enterprise Library 5.0 для Windows Azure

Блок приложения Microsoft Enterprise Library для автоматического масштабирования (WASABi) позволяет добавить режим автоматического масштабирования в Windows Azure. Приложения. Вы можете разместить блок в Windows Azure или в локальное приложение. Блок автоматического масштабирования может быть используется без изменений; он обеспечивает всю необходимую функциональность определять и отслеживать поведение автомасштабирования в Windows Azure применение.

Блок приложения для масштабирования корпоративных библиотек включает следующие функции:

  • Позволяет использовать графический инструмент конфигурации Enterprise Library для управления параметрами конфигурации.
  • Позволяет настроить места хранения и механизмы регистрации, используемые блоком.
  • Позволяет расширить блок, добавив пользовательские правила автомасштабирования и действия.
...