gocql 客户端如何为任何查询选择正确的 Tablet 服务器?

How does gocql client pick the right Tablet server, for any query?

yugabyte集群有2个区域,3个可用区,6个节点架构。

中部地区4个节点, 东部地区2个节点

Node1 (Master, TServer) US-east
Node2 (Master, TServer) US-central-1
Node3 (TServer) US-central-1
Node4 (TServer) US-east
Node5 (Master, TServer) US-central-2 (Leader)
Node6 (TServer) US-central-2

申请在中部地区运行。

应用程序正在使用当前配置为向 Node2(仅)SQL 发送 SQL 查询的 YCQL 驱动程序(yugabyte gocql client


如前所述here在许多情况下,这种转发纯粹是本地的,因为 CQL 和 Redis 集群客户端都能够将请求发送到正确的服务器并避免额外的网络跃点。

  1. 上面关于CQL客户端的说法是指亿嘉gocql client吗? 这里它提到:“驱动程序可以根据分区键(首选本地 DC)将查询路由到保存数据副本的节点。”

    客户端驱动程序如何知道向哪个平板电脑服务器发送请求?

  2. 如果是,YCQL 驱动程序的连接配置是否与所有 4 个节点(在中心区域)连接,使客户端驱动程序能够知道正确的平板电脑服务器,发送查询?改进查询响应时间

  3. 如果是,Hoes YCQL驱动知道,发送查询请求的tablet server是正确的(INSERT/UPDATE/SELECT)?

How can a client driver know, which tablet server to send the request?

驱动程序定期查询这个table:

ycqlsh:system> select * from system.partitions;

在哪里可以找到 table 的拆分方式,以及 table 的位置。

当您发送查询时,您以驱动程序理解它们并散列它们并知道将它们发送到哪里的方式传递 partition-keys。

if yes, does connection configuration of YCQL driver having connections with all 4 nodes(in central region), makes the client driver capable of knowing the correct tablet server, to send query? improving the query response time

是的。这应该与 DC Aware 查询路由结合使用:https://pkg.go.dev/github.com/gocql/gocql#hdr-Data_center_awareness_and_query_routing

if yes, Hoes YCQL driver know, which is the right tablet server to send query request(INSERT/UPDATE/SELECT)?

使用与上述相同的逻辑。了解所有集群上的 tablet 个位置。