关于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( ...
随机推荐
- oracle job interval·相关事例
描述 Interval参数值 每天运行一次 'SYSDATE + 1' 每小时运行一次 'SYSDATE + 1/24' 每10分钟运行一次 'SYSDATE + 10/(60*24)' 每30秒运行 ...
- C++学习笔记3—对话框
1.模态对话框 CTipDlg tipDlg; INT_PTR nResponse = tipDlg.DoModal(); if(nResponse == IDCANCEL) { return; } ...
- C++指针学习笔记
本文参考http://www.prglab.com/cms/pages/c-tutorial/advanced-data/pointers.php 1.存储其它变量地址的变量(如下面例子中的addre ...
- java中的JSON对象的使用
申明:没工作之前都没听过JSON,可能是自己太菜了.可能在前台AJAX接触到JSON,这几天要求在纯java的编程中,返回JSON字符串形式. 网上有两种解析JSON对象的jar包:JSON-lib. ...
- gitlab的安装以及汉化
gitlab的安装 首先在网上下载好任意版本gitlab的rpm包 推荐下面的地址: https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gi ...
- find命令使用, -exec xargs
find [path] [expression] 例如:find /home -name \*.o -exec rm '{}' \; find: 实时精确,支持众多查找标准,遍历指定目录中 ...
- 『奇葩问题集锦』Zepto 页面唤醒拨号功能点透
不废话直接上代码: HTML: <a class="js-tel tel" data-tel="1312414"></a> JS: // ...
- CentOS6.4 使用谷歌Chromium浏览器
那么,如果希望在CentOS/RHEL 7出来之前继续使用Chrome怎么办?使用Chrome的开源版本:Chromium. 1.切换到root: su - 或者 sudo -i 2.下载新的软件源定 ...
- MySql 在大数量的统计中具体的使用技巧
一.CASE WHEN THEN ELSE END 使用用法. 在用sql语句统计某字段的某种状态的出现的次数,可以考虑用到 CASE WHEN THEN ELSE END 使用用法.当数据量过于庞大 ...
- ecshop在nginx下实现负载均衡
ecshop在负载方面的功能是十分弱小的.当你的IP每个小时到达了一万IP.如果在带宽和服务器硬件有限的情况下.你的服务器很快就会崩溃的.网站直接挂掉.为了增强ecshop在负载均衡方面的能力.我们可 ...