Блок приложения Enterprise Autoscale (WASABi) <масштабирование> на переменную величину
Я просматривал документацию WASABi, и меня смущает конкретный аспект этой библиотеки.
Мне нужно создать собственное правило реагирования. Скажем, это правило запускается каждую минуту, и действие "scale" этого правила должно состоять в увеличении на величину "x". Кажется, что я могу установить действие "масштабировать" для определенного числа (скажем, 1 или 2), но не передать переменную, вычисляемую, скажем, моим пользовательским операндом.
Я понимаю, что могу создать собственный операнд для проверки своего состояния, но я хочу, чтобы пользовательский операнд вычислял, насколько действие "scale" должно масштабировать целевую рабочую роль, а затем передает это значение в действие "scale".
Есть ли способ определить эти правила вне XML для достижения этой цели?
Любая помощь будет принята с благодарностью!
1 ответ
Действия могут увеличивать или уменьшать счет на число или пропорцию. Поэтому, если вы хотите динамическое увеличение или уменьшение, я думаю, вам нужно будет создать настраиваемое действие. Я думаю, что вы могли бы извлечь нужную информацию из IRuleEvaluationContext.
Чтобы изменить количество экземпляров, вам необходимо изменить конфигурацию развертывания. См. https://social.msdn.microsoft.com/forums/azure/en-US/dbbf14d1-fd40-4aa3-8c65-a2424702816b/few-question-regarding-changing-instance-count-programmatically?forum=windowsazuredevelopment&prof=required для некоторого обсуждения.
Вы должны быть в состоянии сделать это, используя библиотеки управления Azure для.NET и ComputeManagementClient. Что-то вроде:
using (ComputeManagementClient client = new ComputeManagementClient(credentials))
{
var response = await client.Deployments.GetBySlotAsync(serviceName, slot);
XDocument config = XDocument.Parse(response.Configuration);
// Change the config
StringBuilder builder = new StringBuilder();
using (TextWriter writer = new StringWriter(builder))
{
config.Save(writer);
}
string newConfig = builder.ToString();
await client.Deployments.BeginChangingConfigurationBySlotAsync(serviceName, slot, new DeploymentChangeConfigurationParameters(newConfig));
}