向 DynamoDB 服务器发出请求时,路由在哪里实现(请求路由到不同的副本)?

Where is routing implemented (Request routing to the different replicas) when making request to the DynamoDB server?

DynamoDB 有多个节点,所有节点都是平等的:没有单一的领导者。 我假设我们有一个 DynamoDB 实例并且所有数据都可以存储在单个节点上。但是我们有几个副本用于可用性和冗余。

因此写入和读取可以发生在任何副本节点上。我很好奇,DynamoDB 客户端如何决定将请求发送到哪个节点?或者应用程序开发人员必须自己处理此路由,DyanmoDB 客户端只需将这些请求转发到数据库节点。

如果有人可以向我解释此路由发生的位置并指出实现此路由的代码,那会很有帮助吗?

我是 DynamoDB 的新手,正在尝试了解其工作原理。

从根本上说,这是 AWS 处理的实施细节 - 您不会在 Java 代码中找到它。

DynamoDB has multiple nodes and all nodes are equal: there is no single leader.

这是一个误解,table被分割成分区,每个分区由三个存储节点组成。对于每个分区,选择一个存储节点作为写入的主要接触点。

几年前,Jason Sorensen 在 re:invent 上有一次关于 DynamoDB 内部结构的有趣演讲,您可以在 YouTube.

上看到它

总而言之,有一组请求路由器实例知道存储节点以及散列的工作方式。存储路由器选择分区的领导节点并向其写入数据。只要其中两个存储节点确认写入,就认为数据已持久化。