我不了解cassandra中的负载平衡算法。
似乎TokenAwarePolicy
可用于将我的请求路由到保存数据的协调器节点。特别地,文档说明(https://docs.datastax.com/en/developer/java-driver/3.6/manual/load_balancing/)在驱动程序能够自动计算路由键时起作用。如果可以,我被路由到保存数据的协调器节点,否则,我被路由到另一个节点。如果我真的想在没有任何额外跃点的情况下访问数据,我仍然可以自己指定路由键。
对我来说没有什么意义
如果驱动程序无法自动计算路由键,那么协调器为什么可以这样做?它具有比客户端驱动程序更多的信息吗?还是协调器节点然后代表我询问集群中的所有其他节点?这样就无法扩展,对吧?
我认为八卦协议用于在所有节点(和客户端驱动程序)之间共享环的拓扑。客户端驱动程序将具有完整的“环”结构,并且应等于任何“跳”节点。
当客户端驱动程序确定包含数据的N个副本,然后对它们进行优先级排序(主机距离等)时,负载平衡对我来说很有意义,但是当我到达一个随机节点时,对我来说这没有意义不太可能拥有我的数据。
答案 0 :(得分:1)
可识别令牌的负载平衡仅针对能够保存路由信息的语句发生。例如,对于准备好的查询,驱动程序从群集接收有关查询中字段的信息,并具有有关分区键的信息,因此它能够计算数据令牌并选择节点。您也可以自己指定路由密钥,驱动程序会将请求发送到相应的节点。
在documentation中有所有解释:
对于简单的语句,可以从不自动计算路由信息
对于构建的语句,如果在构建查询时提供了键空间,则该键空间可用;仅当语句是使用表元数据构建的,并且分区键的所有组件都出现在查询中时,路由键才可用
对于绑定语句,键空间始终可用;仅当分区键的所有组件都绑定为变量时,路由键才可用
对于批处理语句,将检查每个子语句的路由信息;第一个非空密钥空间用作批处理的密钥空间,第一个非空路由密钥用作其路由密钥
当语句没有路由信息时,请求将发送到由嵌套负载平衡策略选择的节点,然后由节点协调器执行该语句的解析,提取必要的信息并计算令牌,并转发请求以更正节点。