两个 Ignite 集群之间的通信(可能将两个 Ignite 集群合并为一个)

Communication between two Ignite clusters (maybe merging two Ignite clusters in one)

我们有两个 Ignite 集群。他们彼此完全独立地工作。现在是这样工作的:

IgniteCluster1

String response1 = compute.execute(Task1.class, request1);

IgniteCluster2 的工作方式相同

String response2 = compute.execute(Task2.class, request2);

但是现在来自 IgniteCluster1 的 Task1 应该有 response2 来计算 response1。为此,我们不想在 IgniteCluster1 中使用 Cache2。所以我们必须以某种方式从 IgniteCluster2 获得 response2。此外,由于延迟,我们不希望通过网络向 SpringBootApplication2 发送/请求 - 我们希望直接从 IgniteCluster2 请求数据。

我们现在只看到一个解决方案——都保持不变,但在 SpringBootApplication1 中我们也启动了 IgniteCluster2 的客户端节点。而在Task1中我们首先通过这个client节点得到response2

String response2 = compute.execute(Task2.class, request);

然后我们通过IgniteCluster1的服务器节点得到response1

String response1 = compute.execute(Task1.class, request + response2);

  1. 这是正确的解决方案吗?
  2. 这是唯一的解决方案吗?
  3. 这是最好的解决方案吗?
  4. 实际上对我们来说,如果只有一个 IgniteCluster 具有 2 种不同类型的节点会更好——一些节点由 SpringBootApplication1 (Type1) 启动,一些节点由 SpringBootApplication2 (Type2) 启动。并且不同类型的节点可以以某种方式相互通信(因此 Type1 节点可以直接从 Type2 节点请求数据)。缓存(Cache1 和 Cache2)将仅存储在适当的节点上(因此 Cache1 在 Type1 节点上,Cache2 在 Type2 节点上)。可能吗?怎么样?

1.2.3。这个解决方案肯定会奏效。但是这种方式的质量取决于您的服务 design/architecture.

  1. 是的,这是可能的。您可以将缓存与集群节点的子集放在一起。请参阅此参考 https://www.gridgain.com/docs/latest/developers-guide/configuring-caches/managing-data-distribution

可选地,在配置缓存的节点过滤器后,您可以使用 ClusterGroup 功能在包含必要缓存分区的节点上计算任务。像这样:

Ignite ignite = Ignition.ignite();
IgniteCluster cluster = ignite.cluster();

ClusterGroup cacheGroup1 = cluster.forCacheNodes("myCache1");
ClusterGroup cacheGroup2 = cluster.forCacheNodes("myCache2");

// Request to type1 nodes
String response1 = ignite.compute(cacheGroup1).execute(Task1.class, request1);

// type2
String response2 = ignite.compute(cacheGroup2).execute(Task2.class, request2);

此处有更多详细信息https://www.gridgain.com/docs/latest/developers-guide/distributed-computing/cluster-groups