BigTable中实例数的建议

Posted

技术标签:

【中文标题】BigTable中实例数的建议【英文标题】:Recommendation on number of instance in BigTable 【发布时间】:2020-04-27 23:52:41 【问题描述】:

对于 BigTable 中应该有多少个实例,是否有任何最佳实践或建议? 这两种情况有什么好的做法?

a) 有 2 个实例,每个实例有 2 个集群

实例 A 有 2 个集群:集群 A1 和集群 A2;两者都在 us-EAST1 地区 实例 B 有 2 个集群:集群 B1 和集群 B2;两者都在 us-EAST4 地区

b)只有 1 个实例和 2 个集群:

us-EAST1 区域中的集群 C1 和 us-EAST4 区域中的集群 C2

我知道集群是为了可复制性,上述两种情况都会影响复制。

在我看来,情况 b)(1 个实例)更有效,因为它不仅涵盖复制,而且还涵盖两个区域,us-EAST1 和 us-EAST4,并且少了 1 个实例(因此也少了$$$)。

请根据您所知道的和/或您是否也有这方面的任何实践经验就此提供建议。

【问题讨论】:

【参考方案1】:

虽然每个用例都取决于业务需求,但每个复制配置都有自己的优势。我将指出这两种情况之间需要考虑的一些重要主题。

Bigtable 是一种高性能的可扩展 NoSQL 数据库,非常适合大型分析工作负载。关于Replication,根据文档,它使您能够提高可用性和耐用性。此外,它被认为是最终一致的,这意味着当您将更改写入集群时,只要在集群之间复制更改,它就能够从实例中的其他集群读取更改。

复制和吞吐量

读取吞吐量:复制可以提高读取吞吐量,尤其是在您使用多集群路由时。如果集群更靠近客户所在的区域,它还可以减少延迟。你可以阅读更多关于它的信息here。

写入吞吐量:根据documentation,复制不会增加写入吞吐量。写入吞吐量可能会下降,因为对一个集群的写入必须复制到其他集群。因此,每个集群都在花费更多的 CPU 资源来从其他集群中提取更改。例如:

如果集群中的节点数量翻倍,3 节点集群现在有 6 个节点(例如),实例的写入吞吐量翻倍。但是,数据仅在一个区域中可用。

添加第二个节点数相同的集群,一个3个节点的集群,另一个3个节点的集群,总共6个节点。然后,数据在两个不同的区域中可用,但写入吞吐量可能会下降,因为每条数据在复制到其他集群时会被写入两次。

复制延迟:不同区域中的复制集群通常比同一区域内的集群具有更高的延迟。

您还应该在您的业务需求中考虑app profiles and traffic routing。多集群路由可以最大限度地减少延迟,因为它是一种自动选择,可以将请求路由到实例中最近的集群(从应用程序的角度来看),从而导致可能的最低延迟。而单集群路由可用于分离工作负载或在同一集群中具有读写语义。

Google 准备了一些复制用例示例,以阐明每种设置的优势。我鼓励你看看here。

如果您需要更多架构方面的建议,也可以联系 GCP,here。

更新

分析您的 2 个案例:

如果您有 1 个实例和 4 个集群,它将使您的数据保持高可用性。此外,如果集群在同一个区域但不同的可用区,它将增加区域弹性和故障转移能力,而不会产生跨区域复制成本。但是,您只能有一个应用配置文件(多或单集群路由)。这意味着,您将无法将分析工作负载与其他应用程序分开。因此,当您需要运行大型批处理作业时,它可能会减慢应用程序用户的速度。

现在,如果您有 2 个实例,每个实例有 2 个集群。如果集群位于同一区域的同一实例,则您可以获得高可用性甚至区域弹性。但是,如果集群位于不同的区域,则会产生从一个区域到另一个区域的复制成本。此外,表/数据属于实例。因此,您将能够将分析工作负载与其他应用程序分开,这将有助于提高性能(在运行大批量作业时),每个实例都有自己的 App Profile 配置。

【讨论】:

嗨@Alexandre,感谢您的详细回复。真的很感激。我了解集群方面,我没有质疑。在 1 个实例和 4 个集群与 2 个实例和 2 个集群上进行集群是否有好处?我更具体的问题是关于 Instances 的,因此是我的例子。请您重新审核一下好吗? 我们来分析一下,如果你有 1 个实例和 4 个集群,它将保持你的数据高可用。此外,如果集群在同一个区域但不同的可用区,它将增加区域弹性和故障转移能力,而不会产生跨区域复制成本。但是,您只能有一个应用配置文件(多或单集群路由)。这意味着,您将无法将分析工作负载与其他应用程序分开。因此,当您需要运行大型批处理作业时,它可能会减慢应用程序用户的速度。 现在,如果您有 2 个实例,每个实例有 2 个集群。如果集群位于同一区域的同一实例,则您可以获得高可用性甚至区域弹性。但是,如果集群位于不同的区域,则会产生从一个区域到另一个区域的复制成本。此外,表/数据属于实例。因此,您将能够将分析工作负载与其他应用程序分开,这将有助于提高性能(在运行大批量作业时),每个实例都有自己的 App Profile 配置。对你有帮助吗? 谢谢。确实如此!这很有意义,也有助于我从现实生活或应用的角度获得一些观点。 @NikM.,请不要忘记接受并支持答案。

以上是关于BigTable中实例数的建议的主要内容,如果未能解决你的问题,请参考以下文章

将 BigTable 与 Apache Hue 连接起来

无法使用 Google 的规范示例从 Bigtable 读取数据

Google Cloud Bigtable HBase shell 连接挂起

Bigtable python客户端:如何检索大于给定值的最小行键

BigTable 设计 - BigTable 单元格大小的上限

如何将数据从一个 BigTable 表复制到另一个 BigTable 表