有关 Azure 可扩展性目标和使用多个 Azure 存储帐户的问题?

Posted

技术标签:

【中文标题】有关 Azure 可扩展性目标和使用多个 Azure 存储帐户的问题?【英文标题】:Questions on the Azure scalability targets and the use of multiple Azure storage accounts? 【发布时间】:2011-09-26 03:30:25 【问题描述】:

Windows Azure Storage Abstractions and their Scalability Targets 博文指出单个存储帐户的事务限制为 5,000 个实体/秒,单个表分区的事务限制为 500 个实体/秒。为了满足第一个限制,应该使用多个帐户,对于分区限制,应该仔细设计他们的分区。

我想请教对单个存储帐户的 5000 限制有经验的其他人。现在,我正在设计一个博客/wiki 社区,并说有一天该网站变得流行并吸引了大量流量。我是否应该将用户相关的表拆分到一个存储帐户,将博客相关的表拆分到另一个帐户,而将 wiki 相关的表拆分到另一个,以防止这个限制?或者我应该根据需要添加更多帐户,顺便说一句,有没有办法将 Azure 存储表从一个帐户转移到另一个帐户?文章说,当您达到该限制时,您将收到“503 服务器繁忙”响应,有没有办法知道限制即将接近,所以我可以提前做一些事情而不会导致 503 错误?

【问题讨论】:

仅供参考 - Windows Azure 存储的性能目标已更新,以反映网络性能的一些显着进步。 blogs.msdn.com/b/windowsazure/archive/2012/11/02/… 【参考方案1】:

我总体上没有达到帐户限制,但是通过尝试将从队列中读取的工作角色的数量设置为荒谬的水平,我已经达到了队列上事务数量的限制。

据我所知,没有“你即将达到极限”的警告。当您第一次知道您已达到限制时,您会收到 503 错误。

在将数据从一个帐户转移到另一个帐户时,没有内置功能可以为您完成这项工作。您要么必须推出自己的解决方案来阅读源表中的每一行并将其写入目标表,要么使用类似 Cerebrata Cloud Storage Studio 的东西,它允许您下载和上传表的内容或其 CMDLTS让您做同样的事情,但更便宜/免费。

如果您刚刚开始,并且您有跨存储帐户对数据进行分区的逻辑方法,并且不会使代码过于复杂,那么就去做吧。但在这个阶段我不会太担心它。如果您的网站确实变得流行并且您开始达到交易限制,那么它很可能来自您没有预料到的区域,或者可能来自太多交易而只有一张桌子。正如您所说,这是针对博客社区的,可能获得最多交易的区域是您存储 cmets 的地方。如果您的 cmets 表每秒处理超过 5000 个事务,您可能需要跨多个存储帐户对 cme​​ts 进行分区。当然,如果博客如此受欢迎,那么您可能还会遇到其他问题。

【讨论】:

如果您开始达到该限制,那么您以后可能会负担得起一些重新调整。祝你好运。 非常感谢 knightpfhor 的意见。我认为对我来说最好的方法是将表的分区分布在账户中,而不仅仅是表本身。但是我明白如果我现在就投入工程时间来完成这项工作,虽然可行它会进一步影响上市时间,而且我以后可能还会有意想不到的事情发生。所以我现在可能拥有 1 个帐户中的所有内容。只是想知道即使在工具的帮助下,在稍后阶段将表分区重新分布到多个帐户中会有多痛苦。【参考方案2】:

如果您追求的是可伸缩性,那么您可能会考虑使用 Sql Azure 联合而不是 Azure 表存储。联盟功能已于 2011 年 12 月开始提供。您可以找到一个很好的概述here。

借助 Sql Azure 联合,您可以更好地控制正在使用的资源量。在表存储中,鼓励您创建许多分区,以便底层引擎可以在某个时候将您的数据分布在多台机器上,您将获得更高的吞吐量。但是,分区只是表存储引擎的提示。它不一定会将数据移动到新机器上。根据使用情况和内部算法,它可能会这样做,但你永远无法确定它何时会这样做。使用 Sql Azure 联合,您是控制正在使用的实例数量的人。您将控制少量实例(= 小成本)和大量实例(= 大吞吐量)之间的平衡。

使用联合,您仍然可以享受关系数据库带来的大部分好处。也就是说,您仍然可以拥有事务、连接、索引。事实上,您可以拥有独立 Sql Azure 数据库的所有功能。唯一的限制是您一次只能对一个联合实例执行操作(目前联合中没有内置的跨实例选择支持)。

确实,您可以通过创建多个帐户来增加 Table Storage 的吞吐量,但您需要手动进行管理。您将负责在进行拆分时在帐户之间移动数据,并负责在搜索某些数据时实现将路由到正确帐户的应用程序级逻辑。这是由联邦自动管理的。

可能考虑表存储的唯一原因与其价格/GB 有关,与 Sql Azure 相比要低很多(表存储定价描述为here,Sql Azure 定价描述为here)。因此,如果您正在考虑存储大量数据,那么您可能确实会考虑使用 Table Storage(只要您能忍受它的局限性)。

严格来说,从吞吐量的角度来看,单个 Sql Azure 实例可以通过表存储帐户提供类似的性能。只要您能够获得良好的请求分布,通过联合,您就可以将单个数据库的吞吐量乘以使用的实例总数。

如果您对某些数字感兴趣,几个月前我做了一个基准测试并针对联合数据库运行它。结果在here找到。

【讨论】:

以上是关于有关 Azure 可扩展性目标和使用多个 Azure 存储帐户的问题?的主要内容,如果未能解决你的问题,请参考以下文章

Spring Cloud Azure 参考文档

Azure Monitor概述

使用 Azure 市场的 Terraform

使用 Azure 的 ACS 时如何注销 Facebook?

王炸!Azure云助力.NET6现高光时刻(VS2022实战尝鲜)

用于部署和禁用 Azure 流分析服务的 ARM 模板