知识库

关于多数据中心部署中路由表的注意事项

使用官方 Neo4j 驱动程序意味着您可以利用驱动程序完整的集群路由功能。这意味着您的请求将自动路由到适当的实例。

  • 如果您的请求是写操作:它将被路由到 Leader 实例。

  • 如果您的请求是读操作:它将被路由到 Follower/Read Replica 实例。

社区驱动程序也存在于许多语言中,但在功能集、成熟度和支持方面差异很大。要了解有关社区驱动程序的更多信息,请访问 https://neo4j.ac.cn/developer/language-guides/

当使用 1.3 或更高版本的驱动程序与 3.2 或更高版本的 Neo4j Causal Cluster 一起使用时,带有路由上下文的路由驱动程序是一个可用的选项。在这种设置中,路由驱动程序可以通过 bolt+routing URI 的查询部分包含首选的路由上下文。在标准的 Neo4j 配置中,路由上下文通过服务器策略在服务器端定义。因此,驱动程序以服务器策略的形式将路由上下文传达给集群。然后,它根据服务器策略从集群获取更精细的路由信息。

在部署多数据中心集群时,我们通常希望利用本地性来降低延迟并提高性能。因此,我们强烈建议配置服务器组,使其能够映射到数据中心、可用区或操作员域中的任何其他重要的拓扑元素。

然而,即使您正确配置了服务器组,您可能会在某些请求中观察到更高的延迟。如果您遇到这种情况,很可能是由于路由表的填充方式。当我们从 Core 服务器获取路由表时,我们是随机获取的,不遵守服务器策略。这种设计背后的原因是,我们希望防止实例重复发送陈旧路由信息的情况。

驱动程序在以下 3 种情况下拉取新的路由信息:

  • 驱动程序对象创建

    • driver driverObj = new driver( "bolt+routing://server:7687?policy=EU" )

  • 连接失败

    • 当连接失败时,驱动程序会将路由表标记为陈旧,并从随机的 Core 拉取新的路由表。

  • TTL

    • TTL 过期时。默认值为 300 秒,但您可以通过在 neo4j.conf 中设置 causal_clustering.cluster_routing_ttl 来调整此值。

© . All rights reserved.