1.2. 客户端 Intelligence
热 Rod 客户端使用智能机制将请求高效地发送到 Data Grid Server 集群。默认情况下,Hot Rod 协议启用了 HASH_DISTRIBUTION_AWARE 智能机制。
BASIC 智能
客户端不会接收 Data Grid 集群的拓扑更改事件,如加入或离开节点,并且仅使用您添加到客户端配置中的数据网格服务器网络位置列表。
当数据网格服务器没有向 Hot Rod 客户端发送内部和隐藏集群拓扑时,启用 BASIC 智能来使用 Hot Rod 客户端。
TOPOLOGY_AWARE 智能
客户端接收和存储 Data Grid 集群的拓扑更改事件,以动态跟踪网络上的 Data Grid 服务器。
要接收集群拓扑,客户端在启动时需要至少一个 Hot Rod 服务器的网络位置(IP 地址或主机名)。客户端连接后,Data Grid 服务器会将拓扑传输到客户端。当 Data Grid Server 节点加入或离开集群时,Data Grid 会将更新的拓扑传输到客户端。
HASH_DISTRIBUTION_AWARE 智能
除了哈希信息外,客户端还会接收和存储 Data Grid 集群的拓扑更改事件,以便客户端识别存储特定密钥的节点。
例如,考虑一个 put (k,v) 操作。客户端计算键的哈希值,以便它可以找到数据所在的确切的 Data Grid Server 节点。然后,客户端可以直接连接到该节点来执行读写操作。
HASH_DISTRIBUTION_AWARE 智能的好处是,数据网格服务器不需要根据密钥哈希查找值,这使用较少的服务器端资源。另一个好处是数据网格服务器可以更快地响应客户端请求,因为它们不需要创建额外的网络往返。
配置
默认情况下,Hot Rod 客户端使用您全局为所有 Data Grid 集群配置智能功能。
ConfigurationBuilder
ConfigurationBuilder builder = new ConfigurationBuilder(); builder.clientIntelligence(ClientIntelligence.BASIC);
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.clientIntelligence(ClientIntelligence.BASIC);
hotrod-client.properties
infinispan.client.hotrod.client_intelligence=BASIC
infinispan.client.hotrod.client_intelligence=BASIC
当您将 Hot Rod 客户端配置为使用多个 Data Grid 集群时,您可以为每个集群使用不同的情报。
ConfigurationBuilder
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.addCluster("NYC").clusterClientIntelligence(ClientIntelligence.BASIC);
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.addCluster("NYC").clusterClientIntelligence(ClientIntelligence.BASIC);
hotrod-client.properties
infinispan.client.hotrod.cluster.intelligence.NYC=BASIC
infinispan.client.hotrod.cluster.intelligence.NYC=BASIC
服务器超时失败
如果服务器没有将拓扑报告为 BASIC,或者客户端因为网络问题而无法连接到服务器,客户端会将服务器标记为失败。客户端不会尝试连接到标记为失败的服务器,直到客户端收到更新的拓扑为止。因为 BASIC 拓扑永远不会发送更新,所以客户端不会重新尝试连接。
为避免这种情况,您可以使用 serverFailureTimeout 设置,该设置在指定的时间段内清除失败的服务器状态。在定义的超时后,Data Grid 将尝试重新连接服务器。如果服务器仍然无法访问,则再次将其标记为失败,并在定义的超时后重新尝试连接。您可以通过将 serverFailureTimeout 值设置为 -1 来禁用重新连接尝试。
ConfigurationBuilder
ConfigurationBuilder builder = new ConfigurationBuilder(); builder.serverFailureTimeout(5000).clusterClientIntelligence(ClientIntelligence.BASIC);
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.serverFailureTimeout(5000).clusterClientIntelligence(ClientIntelligence.BASIC);
hotrod-client.properties
infinispan.client.hotrod.server_failure_timeout=5000 infinispan.client.hotrod.client_intelligence=BASIC
infinispan.client.hotrod.server_failure_timeout=5000
infinispan.client.hotrod.client_intelligence=BASIC