两个 Ignite 集群之间的通信(可能将两个 Ignite 集群合并为一个)
Communication between two Ignite clusters (maybe merging two Ignite clusters in one)
我们有两个 Ignite 集群。他们彼此完全独立地工作。现在是这样工作的:
IgniteCluster1
- SpringBootApplication1启动IgniteCluster1的服务器节点
- /request1 来到SpringBootApplication1
- SpringBootApplication1 有 InstanceOfIgniteCluster1
- 通过 InstanceOfIgniteCluster1 SpringBootApplication1 执行类似
String response1 = compute.execute(Task1.class, request1);
- IgniteCluster1 有 Cache1
- Task1 中的方法 class 从 Cache1 中获取一些数据并进行一些计算
- response1 作为对 /request1 的响应发送
IgniteCluster2 的工作方式相同
- SpringBootApplication2启动其服务器节点
- /request2 来到SpringBootApplication2
- SpringBootApplication2 有 InstanceOfIgniteCluster2
- 通过 InstanceOfIgniteCluster2 SpringBootApplication2 执行类似
String response2 = compute.execute(Task2.class, request2);
- IgniteCluster2 有 Cache2
- Task2 中的方法 class 从 Cache2 中获取一些数据并进行一些计算
- response2 作为对 /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);
- 这是正确的解决方案吗?
- 这是唯一的解决方案吗?
- 这是最好的解决方案吗?
- 实际上对我们来说,如果只有一个 IgniteCluster 具有 2 种不同类型的节点会更好——一些节点由 SpringBootApplication1 (Type1) 启动,一些节点由 SpringBootApplication2 (Type2) 启动。并且不同类型的节点可以以某种方式相互通信(因此 Type1 节点可以直接从 Type2 节点请求数据)。缓存(Cache1 和 Cache2)将仅存储在适当的节点上(因此 Cache1 在 Type1 节点上,Cache2 在 Type2 节点上)。可能吗?怎么样?
1.2.3。这个解决方案肯定会奏效。但是这种方式的质量取决于您的服务 design/architecture.
- 是的,这是可能的。您可以将缓存与集群节点的子集放在一起。请参阅此参考 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
我们有两个 Ignite 集群。他们彼此完全独立地工作。现在是这样工作的:
IgniteCluster1
- SpringBootApplication1启动IgniteCluster1的服务器节点
- /request1 来到SpringBootApplication1
- SpringBootApplication1 有 InstanceOfIgniteCluster1
- 通过 InstanceOfIgniteCluster1 SpringBootApplication1 执行类似
String response1 = compute.execute(Task1.class, request1);
- IgniteCluster1 有 Cache1
- Task1 中的方法 class 从 Cache1 中获取一些数据并进行一些计算
- response1 作为对 /request1 的响应发送
IgniteCluster2 的工作方式相同
- SpringBootApplication2启动其服务器节点
- /request2 来到SpringBootApplication2
- SpringBootApplication2 有 InstanceOfIgniteCluster2
- 通过 InstanceOfIgniteCluster2 SpringBootApplication2 执行类似
String response2 = compute.execute(Task2.class, request2);
- IgniteCluster2 有 Cache2
- Task2 中的方法 class 从 Cache2 中获取一些数据并进行一些计算
- response2 作为对 /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);
- 这是正确的解决方案吗?
- 这是唯一的解决方案吗?
- 这是最好的解决方案吗?
- 实际上对我们来说,如果只有一个 IgniteCluster 具有 2 种不同类型的节点会更好——一些节点由 SpringBootApplication1 (Type1) 启动,一些节点由 SpringBootApplication2 (Type2) 启动。并且不同类型的节点可以以某种方式相互通信(因此 Type1 节点可以直接从 Type2 节点请求数据)。缓存(Cache1 和 Cache2)将仅存储在适当的节点上(因此 Cache1 在 Type1 节点上,Cache2 在 Type2 节点上)。可能吗?怎么样?
1.2.3。这个解决方案肯定会奏效。但是这种方式的质量取决于您的服务 design/architecture.
- 是的,这是可能的。您可以将缓存与集群节点的子集放在一起。请参阅此参考 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