Windows Azure: 将应用程序迁移到云的技巧
2010-10-10 07:17:38 来源:WEB开发网我们在迁移实验中最常听到的问题和关注点就以这四个方面为中心。 因此,我们将围绕这些主题进行讨论。
我们常遇到一种误解,就是在使用 Windows Azure 迁移到云或在云中创建应用程序时,认为开发人员无需担心常见体系结构模式的一些值得关注的问题,如可用性、可伸缩性、可靠性和安全性。 事实上,构建的应用程序无论是进行内部部署还是 Windows Azure 部署,分布式计算上下文中的体系结构模式都同样有效。
应用程序管理
无论您的应用程序在内部部署还是在云中运行,操作管理团队都需要一些数据来做出有效的决策。 您将需要考虑一些问题,包括服务级别协议、容量计划、客户计费、审核、应用程序监视、流量分析和成本管理(知道何时升高或降低)。 这些问题需要在将应用程序部署到生产环境中之前得到解决,而且往往最好在创建应用程序之前解决。
这些只是需要在 Windows Azure 迁移实验中考虑的一部分问题。 通过利用 Windows Azure SDK 中提供的 Windows Azure 诊断 API (Microsoft.WindowsAzure.Diagnostics),客户可以公开应用程序故障转储、失败的请求跟踪、Windows 事件日志、IIS 日志、Windows Azure 日志以及性能计数器。
这远比您的预期简单得多。 您告诉诊断监视器要收集哪些类型的诊断信息(请参见图 1 中的示例),并将这些信息的数据传输计划设置为传输到中央 Windows Azure 存储位置。
图 1 设置诊断
public class WebRole : RoleEntryPoint {
public override bool OnStart() {
DiagnosticMonitorConfiguration config =
DiagnosticMonitor.GetDefaultInitialConfiguration();
// To see which counters you can capture, type
// "typeperf.exe /q" in a command window.
// Capture CPU utilization.
PerformanceCounterConfiguration procUtilization =
new PerformanceCounterConfiguration();
procUtilization.CounterSpecifier =
@"Processor(*)\% Processor Time";
procUtilization.SampleRate =
System.TimeSpan.FromSeconds(30.0);
config.PerformanceCounters.DataSources.Add(procUtilization);
// Monitor available memory.
PerformanceCounterConfiguration procAvailMemory =
new PerformanceCounterConfiguration();
procAvailMemory.CounterSpecifier = @"\Memory\Avail MBytes";
procAvailMemory.SampleRate =
System.TimeSpan.FromSeconds(30.0);
config.PerformanceCounters.DataSources.Add(procAvailMemory);
// Add event collection from Windows Event Log
// (System and Application event logs).
config.WindowsEventLog.DataSources.Add("System!*");
config.WindowsEventLog.DataSources.Add("Application!*");
// All of the information monitored so far is being stored locally.
// Tell diagnostic monitor what schedule period should be used when
// transfering the events.
config.Directories.ScheduledTransferPeriod =
TimeSpan.FromMinutes(1);
config.Logs.ScheduledTransferPeriod =
TimeSpan.FromMinutes(1);
// Start the diagnostics monitor.
DiagnosticMonitor.Start("DiagnosticsConnectionString", config);
// True gives full crash dumps. False gives small crash dumps.
CrashDumps.EnableCollection(false);
System.Diagnostics.Trace.TraceInformation("OnStart Completed");
RoleEnvironment.Changing += RoleEnvironmentChanging;
return base.OnStart();
}
...
更多精彩
赞助商链接