Azure如何提供扩展?

时间:2011-02-08 20:47:30

标签: c# .net azure cloud

这是关于Azure和通用云技术的新手问题。

我试图了解Azure平台将如何扩展我的应用程序,我是否需要做任何事情才能使其表现良好。

我有一个处理传入数据的应用程序(C#),它由许多类组成。每次需要进行相关计算时,都会实例化一个新类并将其置于内存中直到完成其工作,然后它停留在那里并通过事件侦听新的计算请求(直到明确处理)。当然,这会消耗资源。应用程序可能会有十分之一和数十万个实例正在侦听和回答计算请求。

问题是,云会在新实例加载时增加我的环境资源,直到什么时候? 是否会有一个我无法启动新实例的时刻,或者当前实例计算是否会使系统过载?我从预算方面不关心它,只关注运营方面: 云能够代表我无缝管理它还是我需要在我的代码中做任何其他事情?

谢谢

5 个答案:

答案 0 :(得分:4)

您必须为云重新设计系统。

在你的情况下,我会按如下方式完成:

  • 通过Web服务接收计算请求的一组Web角色
  • Web角色会将计算请求写入队列
  • 然后是一组工作者角色来轮询队列并进行计算

在您的配置中,您可以将工作人员角色的数量设置为1或100.更改配置后的一分钟(或至少非常短的时间),您拥有所请求的计算机数量。

如果队列增长太长,您还可以执行增加工作者角色数量的事情。

答案 1 :(得分:4)

这是一个很好的问题,通常是对Azure的一个很大的误解。

Azure允许调整通过REST-API调用分配的计算资源量,但不会自动为您调整资源。你在谈论什么,听起来像动态或自动可扩展性。它需要由您自己实现(有很多示例)或者您可以使用可以为您处理大多数扩展方案的第三方服务AzureWatch

为了实现动态扩展,您可能需要或不需要预先考虑它。我的意思是你绝对应该考虑一下,但你可能不需要做太多,取决于你的要求和你与第三方供应商合作的能力。

关于动态可伸缩性的困难部分不是实际的扩展部分,而是知道何时扩展以及何时缩小。

首先,如果在1分钟内未完成调用,Azure将终止对公共负载平衡端点的所有调用。因此,如果计算时间较长,则需要计划异步计算并使用队列。这种方式允许您根据队列大小向上或向下扩展。

如果您的计算很快完成并且您的呼叫过快而且请求计算的传入客户端不是异步的,您可能希望跟踪前X个时间段的平均利用率并根据该比例向上或向下扩展。在你的情况下,我不会采用这种方法,因为它听起来过于严格且不够灵活。

无论哪种方式,AzureWatch都适用于任何一种模式,或两者兼而有之。

答案 2 :(得分:2)

只是为了提供一些背景知识:您可以在其中创建服务模型,您可以在其中指定角色和每个角色的实例数。 Azure会为您部署此功能。您始终可以更改此配置,但Azure不会为您执行此操作。 据我所知,Azure团队正在考虑自动增长功能,但实现起来非常复杂,我看到的所有第三方解决方案都没有正确实现(没有足够的数据,针对尖峰的不良行为)。 也开始新实例不是即时操作。所以你需要提前计划。

答案 3 :(得分:1)

无论您是否设计在Azure上工作,最好使用队列来隔离特定的功能。

Shiraz Bhaiji中回答您在Azure中有两个工作进程,一个托管Web服务的Web工作者,它将消息添加到队列,后台工作者进行计算。

然后,您可以增加其他工作人员的实例数,或者您可以增加实例的大小,从而为您提供更多资源(CPU,Ram,网络),以便在每次处理更多的Web服务调用/队列消息每个工人。

在达到最大队列性能的情况下,您可以创建多个队列。

除非您automate进行此扩展,否则您必须明确监控并调整您希望应用程序通过人工交互执行的方式。

答案 4 :(得分:1)

  

应用程序可能有第十个和   成千上万的人   实例听取和回答   计算要求。

我真的不明白这一部分。如果你使这些类无状态(当然是线程安全的),那么你只需要加载其中一个?

你的申请可以轻轻扩大吗?

相关问题