Cassandra 是如何设计来避免对负载均衡器的需求的?

How is Cassandra designed to avoid the need for load balancers?

我从 official DSE doc 上读到这篇文章,但没有深入了解如何做。有人可以解释或提供任何链接吗?

drivers/connections 内置了负载平衡器。例如,Java 驱动程序 "roundrobin" 行为在此处的文档中进行了解释:

https://docs.datastax.com/en/developer/java-driver-dse/1.6/manual/load_balancing/

这里也有说明:

https://docs.datastax.com/en/developer/java-driver/3.1/manual/load_balancing/

这种信息最好去architecture guide看看。

有多个地方可以被视为某种负载平衡器。首先 - 您可以向集群中的任何节点发送请求,并且该节点将作为 "coordinator" 工作,将请求重新发送到实际拥有数据的节点。因为这不是很理想,驱动程序提供了所谓的令牌感知负载平衡策略,其中驱动程序能够从数据中推断出哪些节点负责处理它们,并将请求发送到根据其他信息选择的节点之一(由其他负载均衡策略贡献)。

在多个数据中心的情况下,如果 "local" 不可用,驱动程序和 Cassandra 本身能够向 "remote" DC 发送请求(远程和本地的概念特定于消费者).但在这种情况下,其他一些因素会发挥作用 - 例如,如果您有 LOCAL_ 一致性级别,那么您的请求将不会发送到 "remote" 数据中心。

谈论应用程序设计 - 您可以在连接到 "local" 数据中心的 Cassandra 集群的应用程序层之前使用负载均衡器,并使用 LOCAL_ 一致性级别来执行它们的操作。如果其中一个 DC 停机,负载均衡器应停止向该 DC 中的应用层发送流量。