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. SQLServer2012分离出的数据库存放路径

    分离出的数据库没有保存位置提示,经常会导致分离出的数据库找不到  以下是分离出的数据库默认位置: C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQL ...

  2. Android版本分布——2016年10月更新

    Code Name Version API Level Distribution frogy(冻酸奶) 2.2.x 8 0.1% gingerbread(姜饼) 2.3.3——2.3.7 10 2.0 ...

  3. Jquery CheckBox复选框 全选/取消全选 最佳实现方式 参考案例

    <input id="chkAll" type="checkbox" />全选/取消全选</div> <asp:Repeater ...

  4. swift之元组类型

    一.元组类型是有N个任意类型的数据组成(N>=0),组成元组类型的数据可以称为“元素” 二.元组的定义 如:let position = (x:10.5,y:20)    //两个元素的元组 l ...

  5. myeclipse、eclipse去掉无用的workSpace

    在 eclipse\configuration\.settings\org.eclipse.ui.ide.prefs 文件里面有下面这段,我们可以从 RECENT_WORKSPACES 里面看到它列出 ...

  6. bzoj1004:[HNOI2008]Cards

    思路:由于题目给出了置换,又要求本质不同的方案数,考虑使用Burnside引理,Burnside引理即通过所有置换和原来相同的方案数之和除以方案数总数,而对于某一个置换要使置换后得到的与原来的相同,就 ...

  7. WebRTC 音视频开发之路

    早在2014年就通过WebRTC实现了PC客户端的实时视频语音,那时P2P连接的建立使用的WebRTC自带的libjingle库,使用peerconnection的API实现的.后来在做远程桌面,文件 ...

  8. ASP.NET获取服务器文件的物理路径

    如下: string fullpath = context.Server.MapPath("hello.htm"); //得到hello.htm的全路径 string conten ...

  9. Linux下Docker安装

    1 在 CentOS 6.4 上安装 docker   docker当前官方只支持Ubuntu,所以在 CentOS 安装Docker比较麻烦(Issue #172).   docker官方文档说要求 ...

  10. Check Mysql Database Size

    SELECT ROUND( SUM(data_length + index_length) / 1024 / 1024 ) TOTAL_MB, ROUND(SUM(data_length) / 102 ...