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. 如何重写EF DBContext 获取链接字符串的方法

    public partial class byvarDBFirst: DbContext { //使用自定义连接串 private static string GetEFConnctionString ...

  2. [linux] 系统管理常用命令

    1.查看某个软件是否安装: rpm -qa|grep software_name 2.top命令,显示系统的动态视图,q退出 3.ps aux|grep process_name 显示正在运行的进程 ...

  3. Objective-C 成员变量的访问修饰即成员变量可见性解析

    总体来说Objective-C的访问成员变量可见性和C++基本一样,只是多了个@package. 以下是详细说明: 例子: @interface CTPerson : NSObject { @priv ...

  4. @property在内存管理中的参数问题

    // // Created by wanghy on 15/8/14. // // /* retain : release旧值,retain新值(用于OC对象),要配合nonatomic使用. ass ...

  5. OC与Swift的区别二(常量、变量、运算符)

    4.常量与变量声明 oc的变量声明使用  类型 变量名 = 变量值的方式,其中类型为系统内置数据类型或自定义类型,变量名需由英文字母开头且不能包含特殊字符 swift变量声明使用 var 变量名 = ...

  6. javascript Object的长度

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

  7. redis基本数据类型【2】-Hash类型

    一.概述 1.散列是一种典型的字典结构,filed和value的映射,但value只能存储字符串,不支持其他类型 2.一个散列类型最多包含 2^32 -1个字段 3.散列适合存储对象:使用对象和ID构 ...

  8. UVA 11078 Open Credit System(扫描 维护最大值)

    Open Credit System In an open credit system, the students can choose any course they like, but there ...

  9. mysql学习笔记(1)

    参考教材<MySQL入门经典>  王雨竹 高飞      机械工业出版社 软件下载:http://www.mysql.com 安装好后打开命令提示符 (黑窗口) net start mys ...

  10. Xcode 5.1 更新后插件不能用

    打开目录 ~/Library/Application Support/Developer/Shared/Xcode/Plug-ins 右击选择"显示包内容" 找到"Inf ...