Azure 提供多种托管站点的方法。
- 虚拟机就是这样,普通的虚拟机。您可以在本地创建它们并上传它们,但一切都取决于您,包括如何处理升级。如果这是您需要做的,那么我不知道您将如何在没有停机的情况下处理升级;不过,您可以将多个虚拟机添加到负载均衡器,然后一次升级一个。
- 听起来您真正想要探索的是云服务。您可以在模拟器中本地运行一个或多个虚拟机,在云中升级一次而无需停机,实现自动缩放(您将不得不使用工具或编写一些代码)。
- 或者,您可能想查看 Azure 网站,但这是一个完全不同的概念,您无法以相同的方式真正在本地测试负载和负载平衡。
根据您实质上想要自动扩展您的应用程序的声明,您希望使用 Auto Scaling 查看云服务。但是,您无法在云模拟器中对此进行完全测试 - 但您可以测试您的逻辑。
背景
Azure 云服务就是为这种事情而设计的;您并没有真正以您可能习惯的方式使用 VM,而是创建一个包,然后 Azure 将其部署到您喜欢的任意数量的服务器上。一旦启动并运行,您可以手动进入管理控制台并通过移动滑块来增加或减少活动服务器的数量。当然,您想自动执行此操作,因此您有几个选择。
您可以使用一个管理 API 来更改服务器的数量。因此,编写一些代码将非常简单,您可以在 WebRole.Start 的另一个线程中启动它,它只是坐在并监视机器上的 CPU,然后调用管理 API 以启动一个新的服务器实例,如果您CPU 超过某个阈值。好的,您只能在本地测试对管理 API 的调用,您实际上不会看到新服务器的出现。但是,如果您获取 Azure 的免费试用版并尝试一下,您会发现您真的不需要测试该部分 - 它就可以工作。
然而,在实践中,自动缩放还有很多东西。以下是您需要考虑的一些事项;
- 即使是相对空闲的 Web 服务器也经常会短暂飙升至 100%,因此仅拥有一个简单的阈值不太可能足够好;在启动另一个服务器实例之前,您需要确定服务器需要超过某个阈值的时间。
- 当您拥有多个服务器时会发生什么?而且,在 Azure 上,您应该始终拥有至少两台服务器以确保您具有弹性。请注意,云服务的想法实际上是拥有许多小型服务器,而不是几台大型服务器。您按核心付费,而不是按服务器数量付费。
- 想象一下,您当前有三台服务器,其中一台由于某种原因真的很忙,而另外两台则处于空闲状态。你想启动第四台服务器吗?
- 想象一下,您当前有两台服务器,它们都很忙。你真的希望他们都启动一个新服务器,这样你最终会运行四台服务器吗?
有几种方法可以应对这些挑战。对于初学者,与其在每台服务器上本地运行监控程序,不如将监控移到外部;Azure 能够以您选择的任何时间间隔将性能指标转储到表存储中。然后,您可以运行一个外部程序,从您当前的所有服务器中检索一段时间内的性能数据,然后在决定启动或关闭其他服务器之前对整体工作负载进行推理。现在,您当然可以在每个 webroles 上的单独线程中托管该外部监控程序,以提供您的监控弹性 - 但关键是监控程序不会监控它运行的服务器,它监控所有服务器. 你当然会,仍然必须处理从所有启动和停止服务器停止多个监控程序实例。一种方法是将停止/启动命令放入 Azure“消息队列”(有几种不同的类型)并使用内置的“de-duper”,它将自动删除放入队列中的相同命令一个特定的时间窗口(我过于简单了,但你明白了)。
实际答案
但实际上,您想查看Auto Scaling 应用程序块,它将为您完成大部分工作。我想这是您问题的真正答案,但我想先提供一些背景信息。同样,我知道您询问如何在本地进行测试 - 但我相信这个问题在 Azure 的上下文中并没有真正意义,我希望上述信息有所帮助。