繁体   English   中英

为什么使用 python 的 cassandra-driver 连接到 AWS 键空间如此缓慢?

[英]Why is connecting to AWS keyspaces so slow with python's cassandra-driver?

我有一个 API,是一个 flask 应用程序,在 AWS EC2 上部署了 python。 一些端点需要连接 AWS Keyspace 才能进行查询。 但是方法cluster.connect()太慢了,连接需要 5 秒然后运行查询。

我解决这个问题的方法是在应用程序启动时启动连接(当在主分支上完成提交时,我正在使用 CodePipeline),然后连接一直打开。

我在 python cassandra 驱动程序文档中没有找到任何针对此的内容,我发现此解决方案是否有任何潜在问题?

这是一种推荐的方式 - 在开始时打开连接并保持它(并且每个应用程序有一个连接)。 打开与 Cassandra 集群的连接是一项昂贵的操作,因为除了连接本身之外,驱动程序还会发现集群的拓扑、计算令牌范围和许多其他事情。 通常,对于“正常”的 Cassandra,这应该不会很长(但仍然很昂贵),并且 AWS 的仿真可能会在其之上增加额外的延迟。

您能否提供当前的连接配置?

Amazon Keyspaces 默认使用传输层安全 (TLS) 通信。 如果您没有提供连接证书,添加它可以帮助加快速度。 有关完整示例,请查看Keyspaces Python 示例

您还可以尝试禁用以下选项,这些选项应该为初始连接提供更快的时间。

schema_metadata_enabled = False
token_metadata_enabled = False 

Python 驱动程序文档

    from cassandra.cluster import Cluster
    from ssl import SSLContext, PROTOCOL_TLSv1_2 , CERT_REQUIRED
    from cassandra.auth import PlainTextAuthProvider
    import boto3
    from cassandra_sigv4.auth import SigV4AuthProvider
    
    ssl_context = SSLContext(PROTOCOL_TLSv1_2)
    ssl_context.load_verify_locations('path_to_file/sf-class2-root.crt')
    ssl_context.verify_mode = CERT_REQUIRED
    
    boto_session = boto3.Session()
    auth_provider = SigV4AuthProvider(boto_session)
    
    cluster = Cluster(['cassandra.us-east-2.amazonaws.com'], ssl_context=ssl_context, auth_provider=auth_provider,
                      port=9142)

    cluster.schema_metadata_enabled = False
    cluster.token_metadata_enabled = False 
    
    session = cluster.connect()
    r = session.execute('select * from system_schema.keyspaces')
    print(r.current_rows)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM