Auto Sacle是一种自动化管理云服务负载的功能,系统可以根据预先制定的规则,在满足条件的情况下对计算实例的数量进行增减从而可以用来优化使用Azure的计算资源,可以适用于Cloud
Service、VM、WebSite以及Mobile
Service。

种主要时间类型的配置,固定时间、周期性时间及无时间配置。每个配置需要指定最小、最大和默认实例数。

  • 固定时间配置多用于一些可预知的固定事件,例如春节、世界杯决赛等负载可预知的情况。
  • 周期性时间配置主要用于负载具有比较明显的时间特征,例如一些业务应用在工作时间负载较高,而在非工作时间上负载非常低。
  • 无时间配置主要用于对系统的负载无法通过时间进行预测,需要根据其他的度量值来进行调整。

除了时间配置之外,还需要定制时间配置下的规则。规则是由度量值触发器及扩展操作组成。

度量值触发器主要是用来描述通过如何收集某种度量信息并在满足何种条件下出发扩展操作。在度量值方面VM的CPU,Storage的blob\queue\table,
Service Bus的queue\topics\notification hubs等多种度量信息,关于Auto Scale可以支持具体信息可以参考Azure
Service Management REST API Reference。

扩展操作主要是用来定义当度量值触发器被触发时系统需要执行的操作,需要定义操作是增加还是减少实例,每次增加或减少的实例数量,以及距离上一次扩展操作之间的冷却时间。

分钟,最小值可以为1分钟。TimeWindow的主要是用来指定被收集数据的时间范围,默认值为45分钟,最小值可以为5分钟。另外还有一点需要注意在收集到的数据并不是实时数据,通常会有15分钟的延迟,这个与我们在VM上能够看到的度量信息的延迟是一样的。

最近在一些项目中客户反馈Auto Scale的延迟较大,也就是说高负载出现后系统并没有及时的进行扩展,其中主要的问题是并没有对系统的默认值进行修改,如果需要Auto
Scale在出现系统压力后尽快的进行扩展并可以将TimeGrain和TimeWindow的值修改的更小一些。但是在设置的时候也需要考虑到增加或减少实例也是需要一定的时间,如果时间设置的过短可能并不能很好的应对负载增加的情况,例如突发在20分钟里出现高峰但是当完成一次增加实例后峰值可能已经过去,这样并不能有效的应对并节约成本。所以在调整TimeGrain和TimeWindow时需要对扩展的实例所需的时间以及应对的场景进行评估。

这些高级配置并不能通过Management Portal进行直接设置,需要通过REST
API进行设置或者也可以通过Windows Azure Compute Management Library 进行配置。由于
Windows Azure Compute Management Library目前还是Preview的版本,所以需要通过在Visual Studio中的Nuget
Console中通过命令行添加进行引用

PM> Install-Package Microsoft.WindowsAzure.Management.Compute -Version 0.9.0-preview -Pre

下面的方法可以用来显示在指定云服务中相应角色的Auto Scale配置

privatestatic
void ShowProfile(string subscriptionId,string base64EncodedCertificate,string
cloudServiceName,string roleName)

{

var autoscaleClient =new
AutoscaleClient(GetCredentials(subscriptionId, base64EncodedCertificate),new
Uri(ManagementEndpoint));

string resourceId =AutoscaleResourceIdBuilder.BuildCloudServiceResourceId(cloudServiceName,
roleName,true);

var autoscaleSettingGetResponse = autoscaleClient.Settings.Get(resourceId);

foreach (var profilein
autoscaleSettingGetResponse.Setting.Profiles)

{

Console.WriteLine("Profile:{0}", profile.Name);

Console.WriteLine("Capacity: Default-{0},Max-{1},Min-{2}",
profile.Capacity.Default, profile.Capacity.Maximum, profile.Capacity.Minimum);

if(profile.FixedDate!=null)

Console.WriteLine("Fixed date: start-{0} End-{1} timezone-{2}",
profile.FixedDate.Start, profile.FixedDate.End, profile.FixedDate.TimeZone);

if (profile.Recurrence !=null)

{

Console.WriteLine("Frequency:{0}", profile.Recurrence.Frequency);

if(profile.Recurrence.Schedule!=null)

{

Console.WriteLine("TimeZone:{0}",profile.Recurrence.Schedule.TimeZone);

Console.WriteLine("Days");

foreach (var dayin
profile.Recurrence.Schedule.Days)

{

Console.Write(day+" ");

}

Console.WriteLine();

Console.WriteLine("Hours");

foreach(var hourin
profile.Recurrence.Schedule.Hours)

{

Console.Write(hour +" ");

}

Console.WriteLine();

Console.WriteLine("Minutes");

foreach (var minin
profile.Recurrence.Schedule.Minutes)

{

Console.Write(min +" ");

}

Console.WriteLine();

}

}

if (profile.Rules !=null || profile.Rules.Count > 0)

{

foreach (var rulein
profile.Rules)

{

ConsoleColor c =Console.ForegroundColor;

Console.ForegroundColor =ConsoleColor.Green;

Console.WriteLine("MetricTrigger");

Console.ForegroundColor = c;

Console.WriteLine("MetricName:{0}",rule.MetricTrigger.MetricName);

Console.WriteLine("MetricNamespace:{0}",rule.MetricTrigger.MetricNamespace);

Console.WriteLine("MetricSource:{0}",rule.MetricTrigger.MetricSource);

Console.WriteLine("Operator:{0}",rule.MetricTrigger.Operator);

Console.WriteLine("Statistic:{0}",rule.MetricTrigger.Statistic);

Console.WriteLine("Threshold:{0}", rule.MetricTrigger.Threshold);

Console.WriteLine("TimeAggregation:{0}",rule.MetricTrigger.TimeAggregation);

Console.WriteLine("TimeGrain:{0}",rule.MetricTrigger.TimeGrain);

Console.WriteLine("TimeWindow:{0}",rule.MetricTrigger.TimeWindow);

Console.ForegroundColor =ConsoleColor.Green;

Console.WriteLine("ScaleAction");

Console.ForegroundColor = c;

Console.WriteLine("ScaleActionType:{0}",rule.ScaleAction.Type);

Console.WriteLine("Direction:{0}",rule.ScaleAction.Direction);

Console.WriteLine("Cooldown:{0}",rule.ScaleAction.Cooldown);

Console.WriteLine("Value:{0}",rule.ScaleAction.Value);

}

}

}

}

下面的方法用于更新指定云服务中相应角色的Auto Scale的配置

privatestatic
void UpldateAutoScaleWindow(string subscriptionId,string base64EncodeCertificate,string
cloudServiceName,string roleName,int timeGrain,int timeWindow,int
cooldown)

{

var autoscaleClient =new
AutoscaleClient(GetCredentials(SubscriptionId,Base64EnCodedCertificate),new
Uri(ManagementEndpoint));

string resourceId =AutoscaleResourceIdBuilder.BuildCloudServiceResourceId(cloudServiceName,
roleName,true);

var setting = autoscaleClient.Settings.Get(resourceId).Setting;

foreach (var profilein
setting.Profiles)

{

foreach(var rulein
profile.Rules)

{

rule.MetricTrigger.TimeGrain =TimeSpan.FromMinutes(timeGrain);

rule.MetricTrigger.TimeWindow =TimeSpan.FromMinutes(timeWindow);

rule.ScaleAction.Cooldown =TimeSpan.FromMinutes(cooldown);

}

}

var parameter =new
AutoscaleSettingCreateOrUpdateParameters();

parameter.Setting = setting;

autoscaleClient.Settings.CreateOrUpdate(resourceId, parameter);

}

Auto Scale并不是银弹也会有一定的使用场景和限制,如果对系统的性能有很高要求时,需要通过严格的性能测试来评估系统的容量及性能并合理设置相关的度量数据收集时间间隔以及相关的阀值,另外还需要结合对于系统负载产生的过程建立合理的时间计划,这样才能更好的发挥Auto
Scale的功能。

本文转载自:http://blogs.msdn.com/b/cciccat/archive/2014/07/08/azure-auto-scale.aspx



关于Azure Auto Scale的高级属性配置的更多相关文章

  1. ExtJs控件属性配置详细

    序言:    1.本文摘自网络,看控件命名像是4.0以前的版本,但控件属性配置仍然可以借鉴(不足之处,以后项目用到时再续完善). Ext.form.TimeField: 配置项:            ...

  2. VS项目属性配置实验过程

    (原创,转载注明出处:http://www.cnblogs.com/binxindoudou/p/4017975.html ) 一.实验背景 cocos2d-x已经发展的相对完善了,从项目的创建.编译 ...

  3. SpringCloud的Archaius - 动态管理属性配置

    参考链接:http://www.th7.cn/Program/java/201608/919853.shtml 一.Archaius是什么? Archaius用于动态管理属性配置文件. 参考自Gett ...

  4. Analysis Services 中的服务器属性配置

    Analysis Services 中的服务器属性配置: https://docs.microsoft.com/zh-cn/sql/analysis-services/server-propertie ...

  5. springBoot属性配置和使用

    Spring Boot 属性配置和使用 1.添加属性文件 application.properties (名字固定) 2.访问端口生效 3.更多配置参考 # ===================== ...

  6. Expo大作战(二十三)--expo中expo kit 高级属性(没干货)

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  7. springboot快速入门(二)——项目属性配置(日志详解)

    一.概述 application.properties就是springboot的属性配置文件 在使用spring boot过程中,可以发现项目中只需要极少的配置就能完成相应的功能,这归功于spring ...

  8. ASP.NET MVC深入浅出(被替换) 第一节: 结合EF的本地缓存属性来介绍【EF增删改操作】的几种形式 第三节: EF调用普通SQL语句的两类封装(ExecuteSqlCommand和SqlQuery ) 第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法 第六节: EF高级属性(二) 之延迟加载、立即加载、显示加载(含导航属性) 第十节: EF的三种追踪

    ASP.NET MVC深入浅出(被替换)   一. 谈情怀-ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态 ...

  9. Spring 属性配置

    此文已由作者尧飘海授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 随着Spring的不断发展与完善,早期它的功能可能只看做是IOC(反转控制)的容器,或者其最大的亮点为DI( ...

随机推荐

  1. hadoop_集群安装_1

    这篇文章中主要介绍的是,如何基于VM安装Linux,以及如何在安装好Linux之后,基于操作系统安装VMTools. 在安装之前,应该先规划好 每个node*的IP地址,以及 hostname: no ...

  2. oracle 11g 64位安装sqldeveloper打开不了

    oracle 11g 64位安装sqldeveloper打开不了解决方法: 1.到官网下载对应版本的sqldeveloper. 2.找对应安装路径下的F:\app\Administrator\prod ...

  3. 最近整理的一些行列转换sql(有自己的,有别人的),留作记录

    --case when 经典用法SELECT * FROM        (SELECT 1 NUM,              '奖项金额',              SUM(CASE WHEN ...

  4. 直播类送礼动画<豪华礼物+小礼物>

    直播类送礼动画<豪华礼物+小礼物>:代码会持续更新,现直播的app里内有太多的动画,由于时间关系不能一次共享所有动画聘为,这次先共享几个比较火爆的动画. 支持真机和模拟器上运行,最低支持i ...

  5. excel导入 导出 兼容各个版本服务器不装EXCEL也可以

    给出 demo源码: http://pan.baidu.com/s/1hqGMudY 提取码:pw4n首先要引用 NPOI.dll (可在网上下载!) //导入 public void OnSubmi ...

  6. LM2596扩流

  7. javascript Object的长度

    1.示例 var obj = { a:"hello", b:"world", c:"hehe" } var key = 0; for(var ...

  8. Library vector Type

    vector的定义 vector是C++标准库里最常用的容器,它之所以被称为容器,是因为它可以存放多个对象,所有在用一个容器中的对象都应该具有相同的类型. vector也是一个类模板,这也是它能存放多 ...

  9. skip跳跃表的实现

    skiplist介绍 跳表(skip List)是一种随机化的数据结构,基于并联的链表,实现简单,插入.删除.查找的复杂度均为O(logN).跳表的具体定义, 跳表是由William Pugh发明的, ...

  10. freemaker小练习

    public class TestFreemaker extends HttpServlet{    // 负责管理FreeMarker模板的Configuration实例      private ...