Фон
Я пытаюсь найти лучшую структуру для приложения Azure.Каждая из моих рабочих ролей раскручивает несколько длительных заданий.Со временем я могу переносить задания из одного экземпляра в другой, переключая их в режим только для чтения на исходном экземпляре, раскручивая их вверх на целевом экземпляре, а затем вращая оригинал вниз на исходном экземпляре.
Если яу меня слишком много заданий, поэтому я могу сказать Azure ускорить дополнительный экземпляр роли и использовать их для новых заданий.И наоборот, если моя нагрузка падает (например, ночью), тогда я могу объединить невыполненные задания на несколько машин и сказать Azure, чтобы я выделил меньше экземпляров.
Проблема в том, что (насколько я понимаю) Azure не предоставляет механизмачтобы я мог решить, какой экземпляр остановить.Таким образом, я не могу знать, на какие серверы консолидироваться, и некоторые из моих заданий умрут, когда их экземпляр остановится, что приведет к задержкам пользователей, пока я перезапускаю эти задания на оставшихся экземплярах.
Идея 1 :Я решаю, какой экземпляр остановить, и возвращаюсь из его Run ().Затем я говорю Azure уменьшить количество экземпляров на единицу и надеюсь, что он сделает вывод, что сломанный экземпляр - хороший кандидат.Кто-нибудь пробовал что-нибудь подобное?
Идея 2 : я заранее определил целую кучу разных рабочих ролей с одинаковым содержанием.Я могу по отдельности остановиться и запустить их, переключив количество экземпляров с нуля на единицу и обратно.Я думаю, что эта идея сработает, но мне она не нравится, потому что она, кажется, идет вразрез с естественным способом ведения дел в Azure, и потому что она требует от меня большого количества дополнительной бухгалтерии для управления дополнительными рабочими ролями.
Идея 3 : жить с этим.
Есть идеи получше?