Spring Cosmos -一些请求响应缓慢,卡在不安全.等几秒钟



我们正在使用azure-spring-data-cosmos库连接cosmos数据库。我们能够在20毫秒内收到响应,但对于5%的请求(1TPS负载),它需要超过5秒。请求卡在Unsafe.park.

container.queryItems(querySpec, options, Store.class)
.stream()
.collect(Collectors.toList());

我们观察到.collect(collections . tolist ());

DirectConnectionConfig directConnectionConfig = DirectConnectionConfig.getDefaultConfig();                  
cosmosClient = new CosmosClientBuilder()
.endpoint(uri)
.key(key)
.contentResponseOnWriteEnabled(true)
.directMode(directConnectionConfig)
.multipleWriteRegionsEnabled(true)
.consistencyLevel(ConsistencyLevel.valueOf(consistencyLevel.trim().toUpperCase()))
.preferredRegions(Arrays.asList(preferredRegion.split("\s*,\s*")))
.buildClient();

为什么请求进入等待状态?如何改进?

我们尝试设置maxRequestsPerConnection= 8或16。idleEndpointTimeout = 24hrs。没有运气。

如果您还没有启用,我建议在您的Configuration.java(或同等的)中启用查询度量和响应诊断。响应诊断将有助于调试客户端资源问题,查询指标将有助于排除高RU费用,因为这是导致响应时间变慢的原因。在此基础上,您可能需要研究其他领域,如数据模型、分区键等。

@Bean
public CosmosConfig cosmosConfig() {
return CosmosConfig.builder()
.responseDiagnosticsProcessor(new ResponseDiagnosticsProcessorImplementation())
.enableQueryMetrics(properties.isQueryMetricsEnabled())
.build();
}
private static class ResponseDiagnosticsProcessorImplementation implements ResponseDiagnosticsProcessor {
@Override
public void processResponseDiagnostics(@Nullable ResponseDiagnostics responseDiagnostics) {
logger.info("Response Diagnostics {}", responseDiagnostics);
}
}

参见此处的快速入门示例。

相关内容

  • 没有找到相关文章

最新更新