关于Azure Auto Scale的高级属性配置
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的高级属性配置的更多相关文章
- ExtJs控件属性配置详细
序言: 1.本文摘自网络,看控件命名像是4.0以前的版本,但控件属性配置仍然可以借鉴(不足之处,以后项目用到时再续完善). Ext.form.TimeField: 配置项: ...
- VS项目属性配置实验过程
(原创,转载注明出处:http://www.cnblogs.com/binxindoudou/p/4017975.html ) 一.实验背景 cocos2d-x已经发展的相对完善了,从项目的创建.编译 ...
- SpringCloud的Archaius - 动态管理属性配置
参考链接:http://www.th7.cn/Program/java/201608/919853.shtml 一.Archaius是什么? Archaius用于动态管理属性配置文件. 参考自Gett ...
- Analysis Services 中的服务器属性配置
Analysis Services 中的服务器属性配置: https://docs.microsoft.com/zh-cn/sql/analysis-services/server-propertie ...
- springBoot属性配置和使用
Spring Boot 属性配置和使用 1.添加属性文件 application.properties (名字固定) 2.访问端口生效 3.更多配置参考 # ===================== ...
- Expo大作战(二十三)--expo中expo kit 高级属性(没干货)
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...
- springboot快速入门(二)——项目属性配置(日志详解)
一.概述 application.properties就是springboot的属性配置文件 在使用spring boot过程中,可以发现项目中只需要极少的配置就能完成相应的功能,这归功于spring ...
- ASP.NET MVC深入浅出(被替换) 第一节: 结合EF的本地缓存属性来介绍【EF增删改操作】的几种形式 第三节: EF调用普通SQL语句的两类封装(ExecuteSqlCommand和SqlQuery ) 第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法 第六节: EF高级属性(二) 之延迟加载、立即加载、显示加载(含导航属性) 第十节: EF的三种追踪
ASP.NET MVC深入浅出(被替换) 一. 谈情怀-ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态 ...
- Spring 属性配置
此文已由作者尧飘海授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 随着Spring的不断发展与完善,早期它的功能可能只看做是IOC(反转控制)的容器,或者其最大的亮点为DI( ...
随机推荐
- Spring.net架构示例(含Aop和Ioc)源码
最近写了一个Spring.net的架构. 一.架构主图 架构图的数据流程走向是: UI层=>UILogic>=>Service>Business=>DataAccess ...
- 淘宝开源Web服务器Tengine安装教程
简介Tengine是由淘宝核心系统部基于Nginx开发的Web服务器,它在Nginx的基础上,针对大访问量网站的需求,添加了很多功能和特性.Tengine的性能和稳定性已经在大型的网站如淘宝网,淘宝商 ...
- cognos 10.2.2 搭建网关做负载均衡
最近要设计cognos服务器灾备模式,所以想到了cognos10自带的gateway负载均衡模式,搭建起来还是挺简洁的 设计背景: cognos主服务器:231 cognos灾备服务器:238 gat ...
- Ext.Net学习笔记08:Ext.Net中使用数据
之前的七篇文章都是介绍Ext.Net较为基础的东西,今天的这一篇将介绍数据的一些用法,包括XTemplate绑定数据.Store(Modal.Proxy).ComboBox的用法等. XTemplat ...
- phaser源码解析(一) Phaser.Utils类下shuffle方法
/** * #一个 基于 费雪耶茨排列 洗牌方法 * A standard Fisher-Yates Array shuffle implementation. * @method Phaser.Ut ...
- Python中dict详解
from:http://www.cnblogs.com/yangyongzhi/archive/2012/09/17/2688326.html Python中dict详解 python3.0以上,pr ...
- JDK重要包和Java学习方法论
以下内容摘自:万能的林萧说:一篇文章教会你,如何做到简历中要求的“要有扎实的Java基础” 第一级别:精读源码 该级别包含的包如下: java.io java.lang java.util 第二 ...
- jquery实现可展开收缩的首页大图广告展示方式 泰山压顶代码 V2.0
把代码做成js网站进行统一调用 if (typeof jQuery == 'undefined') { document.writeln('<script type="text/jav ...
- CI源码学习 一步一步重写 CodeIgniter 框架
文章:http://www.cnblogs.com/zhenyu-whu/archive/2013/08.html
- 压缩代码加速ecshop程序页面加载速度
由于页面有很多图片,页面加载速度有点慢,本来打算减小图片的体积,后来想想这个后期还得测试下,所以暂时不打算使用google的图片优化工具,先把ecshop生成的html代码压缩下吧 压缩前:首页体积为 ...