Azure Cosmos DB for Apache Cassandra 驱动程序扩展

适用对象: Cassandra

Azure Cosmos DB 为 DataStax Java 驱动程序 3 和 4 提供驱动程序扩展。 这些驱动程序扩展为开发人员提供了不同的功能,以帮助提高应用程序的性能和可靠性,并优化 Azure Cosmos DB 上的工作负载。

在本文中,将着重介绍 DataStax Java 驱动程序的 Java v4。 创建的扩展可以在不更改代码的情况下实现,只需更新 pom.xmlapplication.conf 文件。 在本文中,我们分享了 Azure Cosmos DB Cassandra 扩展设置的所有配置选项的默认值,以及在什么情况下你可能希望替代这些默认值。

以下设置专门针对 Cassandra 客户端驱动程序 Java 版本 4。

身份验证

默认使用 PlainTextAuthProvider。 这是因为 Azure Cosmos DB for Apache Cassandra 需要身份验证并使用纯文本身份验证。

    auth-provider { 
      class = PlainTextAuthProvider 
    } 

连接

Azure Cosmos DB 对针对大量后端节点的请求进行负载均衡。 本地和远程节点大小的扩展中的默认设置在开发、测试和小批量生产或登台环境中效果出色。 在高容量环境中,你应该考虑将这些值增加到 50 或 100。

    connection { 
      pool { 
        local { 
          size = 10 
        } 
        remote { 
          size = 10 
        } 
      } 
    } 

令牌映射

当启用令牌感知路由时,驱动程序内部使用会话令牌映射向最佳协调器发送请求。 连接到 Apache Cassandra 实例时,这是一种有效的优化。 连接到 Azure Cosmos DB Cassandra 终结点时,这无关紧要,并且会生成虚假的错误消息。 因此,建议在连接到 Azure Cosmos DB for Apache Cassandra 实例时禁用会话令牌映射。

    metadata { 
      token-map { 
        enabled = false 
      } 
    } 

重新连接策略

建议将 ConstantReconnectionPolicy 用于 API for Cassandra,base-delay 为 2 秒。

    reconnection-policy { 
      class = ConstantReconnectionPolicy 
      base-delay = 2 second 
    } 

重试策略

Java 驱动程序中的默认重试策略不处理 OverLoadedException。 我们为 API for Cassandra 创建了一个自定义策略来帮助处理此异常。
重试策略的参数是在 Azure Cosmos DB 扩展的 reference.conf 中定义的。

    retry-policy { 
      class = com.azure.cosmos.cassandra.CosmosRetryPolicy 
      max-retries = 5               
      fixed-backoff-time = 5000     
      growing-backoff-time = 1000   
    } 

均衡策略和首选地区

v4 驱动程序中的默认负载平衡策略限制应用程序级故障转移,并为 CqlSession 指定单个本地数据中心,该策略需要对象。 这为与 Azure Cosmos DB Cassandra 实例进行通信提供了良好的开箱即用体验。 除了设置负载平衡策略外,你还可以使用 preferred-regions 参数在多区域写入部署中配置故障转移到指定区域,如果存在区域中断。

    load-balancing-policy {
        multi-region-writes=false 
        preferred-regions=["China East2","China North2"] 
} 

SSL 连接和超时

默认情况下使用 DefaultsslEngineFactory。 这是因为 Azure Cosmos DB Cassandra API 需要 SSL:

    ssl-engine-factory { 
        class = DefaultSslEngineFactory 
    } 

与默认值 2 秒相比,60 秒的请求超时提供了更好的开箱即用体验。 根据工作负载和 Azure Cosmos DB Cassandra 吞吐量预配向上或向下调整此值。 你提供的吞吐量越多,便可以将此值设置得越低。

    request { 
      timeout = "60 seconds" 
    } 

后续步骤