0

我正在构建一个社交游戏,它需要在服务器上存储有关玩家、游戏和棋盘的状态信息。状态信息可以很容易地编码在字节数组中以提高效率,并且可以由单个 id(例如,用户 id、游戏 id)引用。我预计reads 比 writes 多得多,并且 writes 不必非常有效。

使用Windows Azure,我想找到最有效的方式来存储和公开这些信息,我的意思是有效的方式(按重要性排序):

  • 最快的响应时间,和
  • 最低的运营成本。

我最初的想法是使用 blob 存储来公开这些字节 blob(使用 web 角色在需要时更新它们)。但性能是最好的吗?或者,我可以将状态信息存储在SQL Azure 数据库中并通过Web API公开它(即时构建响应)。

从 iOS 设备访问 blob 信息时是否有任何问题?

4

3 回答 3

1

根据给出的信息,我认为 Blob 存储更有可能满足您的这两个要求,如果您拥有大量分散的受众,则更是如此。由于延迟似乎是个问题,使用 SQL Azure 可能需要部署到多个数据中心以支持“全球受众”,然后您需要在实例之间引入某种数据同步层。

使用 blob 存储,每个字节的存储成本肯定更便宜,并且您可以利用 CDN 获得额外(但仍可管理)的成本,以减少全球受众的延迟。听起来您无论如何都不需要 SQL Azure 的关系功能。

正如我在上面的评论中提到的,密切关注Windows Azure Mobile Services它今天可能无法满足您的需求,但已经宣布了额外的平台支持,并且使用这些服务(目前来自 Windows 8)非常简单。顺便说一句,它确实使用 SQL Azure 作为后端,这是一个成本考虑(尽管服务本身在预览模式下是免费的)。对于它的价值,我确实找到了这个关于在 iOS 中使用 Windows Azure 移动服务的博客——正如你所期望的那样,使用开放标准和接口,一切皆有可能 :)

于 2012-09-18T13:35:45.273 回答
1

您最初使用 blob 存储的方法是一个很好的起点。假设您想在您的应用程序中显示一些高分(假设这是您谈论的半静态)。

Worker Role 可以每 4 小时计算前 100 名用户,并将此列表存储在 blob 中(作为 JSON 字符串)。现在您需要确定 Blob 存储的性能是否足以满足您的应用程序?看看可扩展性目标

  • 单个 blob 高达 60 MBytes/sec
  • 事务:每秒最多 5,000 个实体/消息/blob(每个存储帐户)

如果您有大量用户,交易限制可能是瓶颈。在这种情况下,您可以使用 CDN来提高性能。通过 CDN,您的内容将被复制到24 个国家的 CDN 节点上。这意味着您的最终用户将从被判断为“更接近”/更快的节点下载 blob,而与托管您的应用程序的数据中心无关,并且您不会受限于之前提到的可扩展性目标。

您还需要考虑到可能存在您想要引用此半静态数据的场景(可能是每次用户完成游戏时),而不必实时执行此操作(您不想阻止如果这是一个长时间运行的过程,则用户)。使用Queues、Topics 和 Subscriptions可以轻松解决此类场景。这允许您在用户完成游戏时将消息放入队列(或主题)中,并让一个或多个后台“工作人员”(可能在其他角色/VM/...)处理该消息。

于 2012-09-18T13:50:24.407 回答
0

就我个人而言,我非常喜欢在 Windows Azure 云服务的“本地存储”区域中缓存半静态内容。当请求进来时,如果您已经拥有该文件,您只需将文件流引用返回给请求者即可。此方法可防止您将 Blob 存储帐户直接暴露给消费客户端,还有助于降低任何交易成本。允许您拥有的处理请求的服务将任何业务逻辑引入流中也有潜在的好处,例如 ACS 样式行为。

当然,这确实需要权衡取舍,因为您需要管理缓存,并且云服务可用的带宽现在必须帮助提供请求响应,而不是让 Windows Azure 存储为您完成。

于 2012-09-18T18:09:18.917 回答