MongoDB 4.4.1 mirroredRead 与 secondaryPreferred readPerence

MongoDB 4.4.1 mirroredRead vs secondaryPreferred readPerence

在 MongoDB 4.4.1 中有 mirroredRead 配置,允许主副本集转发 read/update 请求到辅助副本集。

secondaryPreferred readPerence采样率设置为1.0时有何不同? mirroredRead 的用例是什么?

参考 - https://docs.mongodb.com/manual/replication/#mirrored-reads-supported-operations

What is the use-case of mirroredRead?

这在您链接的文档中有描述:

MongoDB provides mirrored reads to pre-warm the cache of electable secondary members

如果您不熟悉缓存预热,有很多资源描述它,例如https://www.section.io/blog/what-is-cache-warming/.

二次阅读:

  • 发送到次要,从而减少主要的负载
  • 可以return过时的数据

镜像读取:

  • 发送到主
  • 总是 returns 最新数据

mirroredRead configuration which allows primary to forward read/update requests to secondary replicaset.

这是不正确的:

  • 镜像 read 不适用于更新。
  • 阅读未“转发”。主节点使用其本地数据响应读取。 此外,主节点向一个或多个从节点发送读取请求,但根本没有收到该读取的结果(并且不将从节点读取结果“转发”回应用程序).

假设您始终使用主要阅读首选项,并且您有 2 个成员可选择成为主要成员。

由于您的所有读取都发生在主实例中,因此其缓存已被大量填充,并且由于您的其他可选成员未收到任何读取,因此其缓存可以被视为空的。

使用镜像读取,主节点也会向该辅助节点发送一部分(在您的问题中为 100%)读取请求,以使她熟悉读取查询的模式并填充其缓存。

突然发生灾难,当前主节点宕机。现在,您的新主节点有一个 pre-warmed 缓存,可以像以前的主节点一样快速响应查询,而不会影响系统填充其缓存。

关于采样率的影响,MongoDB 人在介绍此功能时 blog post 表示,提高采样率会增加副本集的负载。我的理解是,您可能已经有读取偏好的查询而不是主要实例,这使得您的辅助实例已经很忙。在这种情况下,这些镜像读取可能会影响辅助实例的性能。因此,您可能不希望在这些辅助节点上再次执行所有主要读取(重复使用辅助和主要术语令人震惊!)。

secondaryPreferred 读取的情况不同,您正在查询辅助数据,除非没有辅助数据。