4

我正在创办一家提供 Web SaaS ( https://tuilder.com/ ) 的初创公司。大计划和潜力。

我对 YugaByte 的全局复制很感兴趣。目前我已经在 BadgerDB 上构建了一个抽象,这是一个用 GoLang 编写的键值数据库。我们的抽象维护索引,有点像graphql-ish,而且非常快。是否可以将 YugaByte DB 与全局复制一起用作键值存储?

我的目标是全球分布的 KeyValue 的性能。

据我了解,写入速度会随着每个额外的复制节点而降低。那正确吗?是否可以改用速度并在节点之间建立最终一致的模型?我们正在构建 JAM 堆栈。因此,我们需要在 YugaByte 和客户端之间的服务器上建立一个身份验证层,理想情况下,该层将提供我们目前用 Go 编写的相同抽象。

将请求路由到最近的地理位置的节点之间的负载平衡怎么样?

YugaByte 平台可以实现这一切吗?

4

2 回答 2

3

感谢您对 Yugabyte DB 的关注!这绝对是一个很好的用例。请在线查看答案。

我对 YugaByte 的全局复制很感兴趣。目前我已经在 BadgerDB 上构建了一个抽象,这是一个用 GoLang 编写的键值数据库。我们的抽象维护索引,有点像graphql-ish,而且非常快。是否可以使用具有全局复制的 YugaByte DB 作为键值存储,而不是 GoLang?我的目标是全球分布的 KeyValue 的性能。

是的,您绝对可以使用 Yugabyte DB 实现高性能、全球分布式的键值部署。您可以在此处查看全球分布式部署的示例。

据我了解,写入速度会随着每个额外的复制节点而降低。那正确吗?是否可以改用速度并在节点之间建立最终一致的模型?

作为一般规则,是的,延迟会随着复制因子的增加而增加。复制因子主要是为了提高容错性,但看起来您希望在靠近最终用户的地方提供读取服务。在这种情况下,您有两种选择:

  • 只读副本是集群中主要数据的只读扩展。在这种情况下,集群的主数据部署在一个区域内的多个可用区,或者跨邻近区域。读取副本不会增加写入延迟,因为写入不会将数据同步复制到它们 - 数据被异步复制到读取副本。您可以写入副本,但写入会在内部重定向到真实来源。

  • 多主机部署目前作为我们 2.0 测试版的一部分发布。此功能允许独立集群以最后写入者获胜语义相互复制。这是关于多主部署的详细设计文档

假设您想要全局读取和单个集群,我认为只读副本可能是您正在寻找的。

因此,我们需要在 YugaByte 和客户端之间的服务器上建立一个身份验证层,理想情况下,该层将提供我们目前用 Go 编写的相同抽象。

是的,Yugabyte DB 支持Go 客户端驱动程序中的身份验证和 RBAC 授权

将请求路由到最近的地理位置的节点之间的负载平衡怎么样?

YCQL API 目前支持从最近的地理区域读取,因此您应该已经能够轻松实现这一点。YCQL API 是半关系的,但对于键值应用程序来说,这应该足够了!

希望对您有所帮助,如果您还有其他问题,请告诉我!

于 2019-09-16T04:50:45.113 回答
2

据我了解,写入速度会随着每个额外的复制节点而降低。那正确吗?

前面的答案假设这additional replicated node实际上是一个额外的副本。但是,如果它意味着集群中的新节点,那么答案是新节点不会增加写入延迟. 新节点只是为集群提供更多的写入(和读取)吞吐量,因为它现在可以托管集群中存在的一些领导者和跟随者分片(又名平板电脑)。键值写入操作的延迟由集群的复制因子 (RF) 控制,其中典型的 RF 为 3,用于生产部署。在这样的部署中,每个分片将有 3 个副本,位于集群的 3 个独立节点上。在向应用程序客户端确认操作成功之前,必须在领导者副本和 2 个跟随者副本中的至少 1 个提交写入。总而言之,写入操作的延迟仅在采取以下任一或两个操作时才会增加:

  1. 增加托管 3 个副本的节点之间的地理距离

  2. 将 RF 从 3 增加到 5(这将导致 4 个副本中有 3 个需要在客户端确认之前提交写入)。

是否可以改用速度并在节点之间建立最终一致的模型?

鉴于处理写入请求的节点之间依赖于每个分片的分布式共识(使用 Raft 作为共识协议),在 Yugabyte DB 中最终的一致性是不可能的。您可以在这篇文章How Does How How How How How How How How How How How How How How How Is Consensus-Based Replication Work in Distributed Databases中回顾 Raft 与最终一致性的区别?在“Paxos/Raft 与非共识复制协议”部分下。如上一个答案中所强调的,当跨区域写入延迟是一个问题时,解决方案是使用只读副本集群(用于在远离接受写入请求的区域的区域中支持时间线一致的读取)或 Multi 跨区域使用异步复制- 主集群(用于为多个区域中的写入提供动力,其中冲突的写入请求通过 Last Writer Wins 解决)。

于 2019-09-16T05:31:15.830 回答