1

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

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

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

但是始终作为单个实例运行。一直以来,它都是为了提高在某些 VPS 服务器上运行的单个 Windows 服务/控制台应用程序的性能。

不过这次我必须面对事实。无论该 VM 将变得多大,如果数据要增加(它由客户生成,因此更多的客户 = 更多的数据!),数据会迅速淹没服务器的 I/O 容量。

那么,您将如何在云中进行负载平衡呢?我已经阅读了有关“云工作者”的“云服务”等内容,但我认为它变得如此复杂,而且当我要使用一项服务的存储时,定价似乎如此模糊,数据库来自另一个和第三种服务的工作,同时考虑带宽和其他东西。我真的很想在我知道并且有信心与之合作的环境中保持简单。所以VPS就是这样。

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

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

所以把你得到的一切都扔给我,我会努力跟上的。:)

4

2 回答 2

2

角色

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

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

负载均衡

在简单的情况下(例如,Web 服务),Azure 将在您的机器之间自动对传入请求进行负载平衡。它应该同样适用于涉及来自互联网的请求的任何服务。我认为使用 FTP PASV 模式可能会更复杂,但我不是该主题的专家。Azure 上有一个用于 FTP 的开源项目,以及有关该主题的博客文章。也许他们的方法可以应用于您的自定义 FTP 软件。

根据您所说,我认为您可以为您的 FTP 服务器使用 Worker Role。在您的 WorkerRole.cs 文件中,您只需启动您的 FTP 代码,然后就可以离开了。您还可以生成线程或进程,让每个 VM 兼作图像处理器。如果您愿意,您可以在 VM 角色中完成所有这些工作,这只是需要您完成更多工作的问题。

贮存

这是 Blob 存储的教科书用例。上传的文件肯定应该去那里。听起来不同的计费模式让您有些困惑,但 Blob 存储非常便宜。您可以查看Azure 定价计算器

于 2012-12-13T15:50:35.790 回答
0

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

于 2012-12-12T22:19:16.350 回答