【问题标题】:Difference between coordinator node and the contact point of C++ driver in Cassandra?Cassandra中协调节点和C++驱动程序的联系点有什么区别?
【发布时间】:2023-04-01 05:49:01
【问题描述】:

当使用 C++ 驱动程序创建与 Cassandra 交互的 API 时,必须为 C++ 程序提供一个逗号分隔的列表,其中包含驱动程序可以用作与数据库的联系点 (cass_cluster_set_contact_points) 的节点的 IP 地址.我想了解这个接触点的角色,以及它是否扮演与协调节点不同的角色,即接触点和协调节点是一回事。

此外,当我们执行多线程程序时,用于执行多个查询,是为每个查询选择协调节点/联系点,还是只是在开始时选择,然后将该节点固定为整个程序执行过程中的协调节点。

【问题讨论】:

    标签: c++ cassandra cassandra-3.0


    【解决方案1】:

    联系端点只是作为驱动程序发现集群的一种方式。你真的只需要提供两个或三个,驱动程序会通过 gossip 找出剩余的端点。

    连接时,最好使用TokenAwareLoadBalancingPolicy。这将导致对分区键的任何查询过滤绕过对协调节点的需求,并直接路由到负责所需数据的节点。

    如果查询未对分区键进行过滤,或者是多键查询,则无法确定确切的节点。此时,您的备份负载平衡策略(TokenAwareLoadBalancingPolicy 将备份策略作为参数)将用于确定协调节点。如果我没记错的话,DCAwareRoundRobinLoadBalancingPolicy 是默认值。

    总之,连接端点仅用于集群发现。协调节点是在查询时根据负载平衡策略中使用的算法选择的。

    【讨论】:

    • 在 c++ 驱动程序中,默认情况下,令牌感知和 dc 感知策略均已启用。既然您解释了,在令牌感知策略中,协调器节点被绕过,我想了解(当还启用 dc 感知时)为任何查询选择本地 dc?
    • @VishalSharma DCAwareRoundRobin(或您选择与 TokenAware 一起使用的任何备份策略)在无法确定令牌时使用。因此,如果您使用二级索引查询或未绑定查询(都是反模式),则将使用 DCAwareRoundRobin。
    【解决方案2】:

    程序中提到的接触点由集群连接设置使用。 gossip 将根据这些 IP 地址获取整个集群连接设置。 gossip 会维护节点的 ip 地址和其他属性,它会一直查看设置是否有变化,如果配置发生变化,它会每次更新。

    如果在 ip1 上发生写入或读取请求,集群连接到主机作为 ip1、ip2 和 ip3,则 ip1 是此特定操作的协调者。它充当处理操作的代理,并根据不同的属性、集群的设置方式以及 TokenAwareLoadBalancingPolicy 等策略,将操作重定向到相应的节点,例如集群中但不在联系人列表中的 ip4。你可以通过datastax看看这篇文章:https://docs.datastax.com/en/archived/cassandra/1.2/cassandra/architecture/architectureClientRequestsAbout_c.html

    【讨论】:

      猜你喜欢
      • 2016-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-13
      相关资源
      最近更新 更多