我已经设置了Cosmos DB (Cassandra API)实例,我想从Python应用程序管理它的吞吐量。我可以使用Azure中列出的cassandra端点和主密码创建一个azure.cosmos.cosmos_client,但所有尝试与客户端交互的结果都是"azure.cosmos.errors.HTTPFailure: Status code: 404“。
我已经成功地通过Python中的cassandra-driver与这个数据库进行了交互,但我希望访问cosmos-client来通过代码管理吞吐量供应。我希望在数据库使用在高利用率和几乎不活动之间波动时自动调整吞吐量。
创建cosmos_client需要有效的URI和模式(https/http/ftp等...)包括在内。azure上列出的端点未指定模式,该端点已成功用于通过cqlsh以及Python cassandra-driver进行连接。我在所提供的端点的开头添加了"https://“,并且能够用Python语言创建客户端("http://”会导致错误,即使使用“https://"”,也会验证错误的地址也会导致错误)。现在我已经创建了一个客户端对象,我尝试与它进行的任何交互都会产生404个错误。
client = cosmos_client.CosmosClient(f'https://{COSMOS_CASSANDRA_ENDPOINT}', {'masterKey': COSMOS_CASSANDRA_PASSWORD} )
client.ReadEndpoint
#'https://COSMOS_CASSANDRA_ENDPOINT'
client.GetDatabaseAccount(COSMOS_CASSANDRA_ENDPOINT)
#azure.cosmos.errors.HTTPFailure: Status code: 404
client.ReadDatabase(EXISTING_KEYSPACE_NAME)
#azure.cosmos.errors.HTTPFailure: Status code: 404我想知道使用cosmos_client与Cosmos Cassandra实例交互以修改我的Python应用程序的吞吐量是否是正确的方式。如果是,我应该如何正确设置cosmos_client?也许有一种方法可以使用cassandra-driver直接通过修改数据库来实现这一点。
发布于 2019-07-25 04:43:41
我在Python和.NET中通过CosmosClient或DocumentClient访问数据库的尝试失败了一段时间后,我永远不能让它工作。最后,我发现了两个方法,不幸的是,每个方法都有点老生常谈,并提出了一些似乎不必要的挑战。
我最终做的是通过一个子进程调用Azure CLI来更改吞吐量来实现这一点。这是执行的命令:
f'az cosmosdb cassandra table throughput update --account-name {__cosmos_instance_name} --keyspace-name {__cassandra_keyspace} --name {table_name} --resource-group {__cosmos_resource_group} --throughput {new_throughput}'非常不幸的是,我发现这两种方法都有效,当目标数据库由于速率限制而被限制时,这不起作用。这意味着在调用代码执行缩放之前,我们还必须实现一些逻辑来限制我们自己的服务与数据库的交互。
关于我们的解决方案的一些其他注意事项:服务托管在kubernetes中,因此我们将指标评估和扩展执行添加到pod上的生命周期挂钩中。在处理cassandra.cluster.NoHostAvailable异常时,当我们在cassandra交互期间遇到可疑的速率限制时,也会执行自动缩放器。
..。
另一种从代码设置吞吐量的方法是通过cassandra-driver直接执行cql,方法是执行以下操作(在Python中):
from cassandra.cqlengine import connection
connection.setup(<CONNECTION_SETUP_ARGS>)
session = connection.get_session()
session.execute("use <CASSANDRA_NAMESPACE>")
session.execute("alter table <CASSANDRA_TABLE_NAME> with cosmosdb_provisioned_throughput=<DESIRED_THROUGHPUT>")当我有机会时,我会切换到这种方法,因为它不需要Azure CLI安装和子进程调用。
我想我最初是从here得到这个想法的。
https://stackoverflow.com/questions/57066145
复制相似问题