知识库

关于多数据中心部署的路由表考虑

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

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

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

社区驱动程序也支持多种语言,但在功能集、成熟度和支持方面差异很大。要了解更多关于社区驱动程序的信息,请访问 /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 来进行调节。

© . This site is unofficial and not affiliated with Neo4j, Inc.