第 1 章 热 Rod Java 客户端


通过 Hot Rod Java 客户端 API 远程访问数据网格。

1.1. 热 Rod 协议

hot Rod 是一个二进制 TCP 协议,Data Grid 提供高性能客户端-服务器与以下功能的交互:

  • 负载平衡。热 Rod 客户端可以使用不同的策略在 Data Grid 集群中发送请求。
  • 故障切换.热 Rod 客户端可以监控数据网格集群拓扑更改,并自动切换到可用节点。
  • 有效的数据位置.热 Rod 客户端可以找到密钥所有者,并直接向这些节点发出请求,从而缩短延迟。

1.1.1. 客户端 Intelligence

热 Rod 客户端使用智能机制将请求高效地发送到 Data Grid Server 集群。

BASIC 智能

客户端不会接收 Data Grid 集群的拓扑更改事件,如加入或离开节点,并且仅使用您添加到客户端配置中的数据网格服务器网络位置列表。

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 智能的好处是,数据网格服务器不需要根据密钥哈希查找值,这使用较少的服务器端资源。另一个好处是数据网格服务器可以更快地响应客户端请求,因为它们不需要创建额外的网络往返。

配置

ConfigurationBuilder

ConfigurationBuilder builder = new ConfigurationBuilder();
builder.clientIntelligence(ClientIntelligence.BASIC);

hotrod-client.properties

infinispan.client.hotrod.client_intelligence=BASIC

1.1.2. 请求负载平衡

热 Rod Java 客户端平衡对数据平面集群的请求,以便读取和写入操作分散到节点上。

使用 BASICTOPOLOGY_AWARE 智能的客户端为所有请求使用请求平衡。使用 HASH_DISTRIBUTION_AWARE 智能的客户端将请求直接发送到存储所需密钥的节点。如果节点没有响应,客户端会返回请求均衡。

默认平衡策略是循环的,因此 Hot Rod 客户端执行请求平衡,如下例所示,s1s 2、s3 是 Data Grid 集群中的节点:

// Connect to the Data Grid cluster
RemoteCacheManager cacheManager = new RemoteCacheManager(builder.build());
// Obtain the remote cache
RemoteCache<String, String> cache = cacheManager.getCache("test");

//Hot Rod client sends a request to the "s1" node
cache.put("key1", "aValue");
//Hot Rod client sends a request to the "s2" node
cache.put("key2", "aValue");
//Hot Rod client sends a request to the "s3" node
String value = cache.get("key1");
//Hot Rod client sends the next request to the "s1" node again
cache.remove("key2");

自定义平衡策略

如果在 Hot Rod 客户端配置中添加类,您可以使用自定义 FailoverRequestBalancingStrategy 实现。

ConfigurationBuilder

ConfigurationBuilder builder = new ConfigurationBuilder();
builder.addServer()
         .host("127.0.0.1")
         .port(11222)
         .balancingStrategy(new MyCustomBalancingStrategy());

hotrod-client.properties

infinispan.client.hotrod.request_balancing_strategy=my.package.MyCustomBalancingStrategy

1.1.3. 客户端故障切换

当 Data Grid 集群拓扑更改时,热 Rod 客户端可以自动进行故障转移。例如,具有拓扑感知的 Hot Rod 客户端可以检测一个或多个数据网格服务器何时失败。

除了集群数据网格服务器之间故障转移外,Hot Rod 客户端还可在 Data Grid 集群之间进行故障转移。

例如,您有一个 Data Grid 集群在 New York (NYC)中运行,另一个集群在伦敦(LON)中运行。向 NYC 发送请求的客户端检测到没有可用的节点,以便它们在 LON 中切换到集群。然后,客户端会维护到 LON 的连接,直到您手动切换集群或故障转移再次发生。

带有故障切换的事务缓存

条件操作(如 putIfAbsent (), replace (), remove () )具有严格的方法返回保证。同样,一些操作可能需要返回前面的值。

虽然 Hot Rod 客户端可以故障转移,但您应该使用事务缓存来确保操作不会部分完成,并在不同的节点上保留冲突的条目。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.