4

我最近开始研究 Infinispan 作为我们的缓存层。在阅读下面提到的 Infinispan 中的操作模式后。

  1. 嵌入式模式:当您在与应用程序相同的 JVM 中启动 Infinispan 时。
  2. 客户端-服务器模式:这是当您启动远程 Infinispan 实例并使用各种不同的协议连接到它时。

首先,我现在很困惑,从上述两种模式中哪个最适合我的应用程序。

我有一个非常简单的用例,我们有一个客户端代码,它将使用服务的主 VIP 调用我们的 REST 服务,然后它将负载平衡到Service Server我们部署服务的个人,然后它将进行交互使用 Cassandra 数据库检索基于用户 ID 的数据。下图会让一切都清楚。 在此处输入图像描述

假设例如,如果客户端正在寻找一些数据,userId = 123那么它将使用主 VIP 调用我们的 REST 服务,然后它将负载平衡到我们的四个服务服务器中的任何一个,假设它得到负载平衡到 Service1,然后 service1 将调用 Cassandra 数据库获取记录userId = 123,然后返回给客户端。

现在我们计划使用 Infinispan 缓存数据,因为压缩正在扼杀我们的性能,以便我们的读取性能可以得到一些提升。所以我开始研究 Infinispan 并偶然发现了两种模式,如下所述。我不确定在我们的案例中使用 Infinispan 的最佳方式是什么。

其次,从 Infinispan 缓存中,我期望的是,如果我使用嵌入式模式,那么它应该看起来像这样。

在此处输入图像描述

如果是,那么 Infinispan 缓存将如何相互交互?有可能在某个时候,我们会为那些将在另一个服务实例 Infinispan 缓存上的用户 ID 寻找数据?正确的?那么在这种情况下会发生什么?infinispan 也会处理这些事情吗?如果是,那么我需要进行哪些配置设置才能确保这件事正常工作。

如果我遗漏了什么,请原谅我的无知。任何明确的信息都会使我对上述两个问题更加清楚。

4

2 回答 2

6

关于你的第二张图片,是的,建筑看起来就像这样。

如果是,那么 Infinispan 缓存将如何相互交互?

请看这里:https: //docs.jboss.org/author/display/ISPN/Getting+Started+Guide#GettingStartedGuide-UsingInfinispanasanembeddeddatagridinJavaSE Infinispan 将使用 JGroups 协议管理它并在节点之间发送消息。集群将形成,节点将被集群。之后,您可以体验跨特定节点的条目复制的预期行为。

在这里,我们转到您的下一个问题:

有可能在某个时候,我们会为那些将在另一个服务实例 Infinispan 缓存上的用户 ID 寻找数据?正确的?那么在这种情况下会发生什么?infinispan 也会处理这些事情吗?

Infinispan 是为这种情况而开发的,因此您根本不需要担心它。例如,如果您有 4 个节点并使用 numberOfOwners=2 设置分发模式,那么您的缓存数据将在每一刻都存在于 2 个节点上。当您在所有者节点上发出 GET 命令时,将从所有者获取条目

您还可以将集群模式设置为复制,其中所有节点都包含所有条目。请在此处阅读有关模式的更多信息:https ://docs.jboss.org/author/display/ISPN/Clustering+modes并选择最适合您的用例。

此外,当您将新节点添加到集群时,将发生 StateTransfer 并跨集群同步/重新平衡条目。NonBlockingStateTransfer 已经实现,因此您的集群在加入阶段仍然能够提供响应。请参阅:https ://community.jboss.org/wiki/Non-BlockingStateTransferV2 同样用于删除/崩溃集群中的节点。将有自动重新平衡过程,例如某些条目 (numOwners=2) 在崩溃后仅在一个节点上存活,将根据分布模式下的 numberOfOwners 属性分别复制到两个节点上。

总而言之,您的集群仍将是最新的,这与您要求特定条目的哪个节点无关。如果它不包含它,则将从所有者那里获取条目。

如果是,那么我需要进行哪些配置设置才能确保这件事正常工作。

上述入门指南充满了示例,您可以在 Infinispan 发行版中找到一些配置文件示例:ispn/etc/config-samples/*

我建议你也看看这个来源:http ://refcardz.dzone.com/refcardz/getting-started-infinispan在那里你可以找到更多基本和非常快速的配置示例。

此来源还为您的第一个问题提供了与决策相关的信息:“我应该使用嵌入式模式还是远程客户端-服务器模式?” 从我的角度来看,使用远程集群是更适合企业的解决方案(参见:http ://howtojboss.com/2012/11/07/data-grid-why/ )。您的缓存层非常容易扩展、高可用性和容错,并且独立于您的数据库层和应用程序层,因为它只是位于它们之间。

您也可能对此功能感兴趣:https ://docs.jboss.org/author/display/ISPN/Cache+Loaders+and+Stores

于 2013-07-16T14:38:26.710 回答
0

我认为在最新的 Infinispan 版本中,支持以特殊的兼容模式为那些有兴趣以多种方式访问​​ Infinispan 的用户工作。

按照下面的链接配置您的缓存环境以支持嵌入式或远程。

嵌入式和远程服务器端点之间的互操作性

于 2013-07-16T11:57:18.223 回答