知识库

多数据中心部署中的路由表考虑因素

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

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

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

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

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

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

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

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

  • 驱动程序对象创建

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

  • 连接失败

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

  • TTL

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