在Windows Azure VPS上对高I / O应用程序进行负载平衡

时间:2012-12-12 22:16:14

标签: c# azure load-balancing

我目前正在尝试掌握整个云计算,我已经在Stackoverflow上阅读了很多类似的问题。

我正在尝试构建的东西将类似于高I / O存储服务。它将通过FTP检索A LOT(我们正在谈论50 - 100 Mbit / sec)数据,然后对收到的一些数据进行一些后处理。

该应用程序目前正在使用C#编写,以便在Windows Azure VPS上进行部署。我正在使用自己的简单FTP服务器来实现最高级别的控制和安全性(就像我自己的身份验证过程一样)。这不是问题,因为我已经熟练使用套接字服务器和高性能的.NET应用程序。

但总是作为单个实例运行。它总是在挤压某些VPS服务器上运行的单个Windows服务/控制台应用程序的更多性能。

这次我必须面对事实。无论虚拟机有多大,如果数据增加,数据都会迅速压倒服务器的I / O容量(这是由客户生成的,因此更多的客户=更多的数据!)。

那么你将如何在云中进行负载均衡?我已经阅读了“云服务”与“云工作者”等等,但我认为它只是如此 ** 复杂,当我打算使用时价格看起来很模糊来自一个服务的存储,来自另一个服务的数据库以及来自第三类服务的工作,同时考虑带宽和其他内容。我真的想在我认识的环境中保持简单,并且我有信心与之合作。所以VPS就是。

但是我应该如何进行负载平衡?这是我的第一次,我知道这是一个雄心勃勃的项目,但我真的只是想学习!

总结一下:负载平衡在Windows Azure VPS上运行的C#编写的自定义FTP应用程序。应用程序/服务的每个实例都应该可以访问相同的存储和数据库。不需要实例间通信。

所以扔掉你得到的一切,我会尽力跟上。 :)

2 个答案:

答案 0 :(得分:2)

角色

你似乎对角色的含义感到有些困惑,所以让我快点一下。角色基本上是VM的模板,它定义了代码和配置。它有点像Puppet或Chef脚本。角色有几种类型。

  • VM角色是您可以获得的最“裸机”。您为Azure提供了一个VM映像,他们会为您启动它。您负责其中的所有内容,包括操作系统更新和维护。这与Amazon EC2的作用相差无几。
  • 工作者角色不那么裸机。他们离Windows服务不远。您上传了一个代码和配置包,但不是整个VM映像。 Azure设置了一个库存Windows Server操作系统,将代码复制到它,并调用一个入口点。从那里你可以做你想做的任何事情 - 接受连接,启动新线程或进程等。微软负责操作系统级补丁,他们可能会重新映像你的虚拟机,以便随时执行,所以你不想永久将数据存储在驱动器上。
  • Web角色基本上是工作者角色,但Azure还会安装IIS并配置您请求的任何IIS站点和虚拟应用程序。

负载平衡

在简单的情况下(例如,Web服务),Azure将自动在您的计算机之间平衡传入请求。对于涉及来自互联网的请求的任何服务,它应该也能正常工作。我认为使用FTP PASV模式可能会更复杂,但我不是该主题的专家。有一个open source project for FTP on Azure,还有一个blog post on the topic。也许他们的方法可以应用于您的自定义FTP软件。

根据您的说法,我认为您可以为您的FTP服务器使用辅助角色。在您的WorkerRole.cs文件中,您只需启动FTP代码,然后就可以了。您还可以生成线程或进程以使每个VM作为图像处理器执行双重任务。如果您愿意,您可以在VM角色中执行所有操作,这只是一个涉及更多工作的问题。

存储

这是Blob存储的教科书用例。上传的文件一定要去那里。听起来不同的计费模式让您感到困惑,但Blob存储非常便宜。您可以查看Azure Pricing Calculator

答案 1 :(得分:0)

使用IIS应用程序请求路由(ARR)设置Webrole。