Infinispan运营模式

时间:2013-07-15 22:37:33

标签: java caching infinispan distributed-cache

我最近开始将Infinispan作为我们的缓存层。在阅读Infinispan中的操作模式后,如下所述。

  1. 嵌入模式:这是在与应用程序相同的JVM中启动Infinispan的时候。
  2. 客户端 - 服务器模式:这是当您启动远程Infinispan实例并使用各种不同协议连接到它时。
  3. 首先,我现在很困惑,最适合我上述两种模式的应用。

    我有一个非常简单的用例,我们有一个客户端代码,它将使用服务的主要VIP调用我们的REST服务,然后它将负载平衡到我们所拥有的个人Service Server部署我们的服务然后它将与Cassandra数据库交互以检索用户ID的数据基础。下图将使一切清晰。 enter image description here

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

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

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

    enter image description here

    如果是,那么Infinispan缓存将如何相互影响?有可能在某个时候,我们将寻找那些将在另一个Service Instance Infinispan缓存上的userId的数据?对?那么在那种情况下会发生什么? infinispan会不会照顾这些事情?如果是,那么我需要进行哪些配置设置以确保此功能正常。

    如果我错过任何东西,请原谅我的无知。任何明确的信息都会使我对上述两个问题更清楚。

2 个答案:

答案 0 :(得分:6)

关于你的第二张图片,是的,架构将完全像这样。

  

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

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

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

  

有时候,我们可能会在另一个Service Instance Infinispan缓存中寻找那些userId的数据吗?对?那么在那种情况下会发生什么? infinispan会不会照顾这些事情?

Infinispan是针对此方案开发的,因此您根本不需要担心。如果您有4个节点并使用numberOfOwners = 2设置分发模式,则您的缓存数据将在每个时刻正好位于2个节点上。在 NON 所有者节点上发出GET命令时,将从所有者获取条目。

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

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

总结一下,您的群集仍然是最新的,这与您要求特定条目的节点无关。如果它不包含它,将从所有者提取条目。

  

如果是,那么我需要进行哪些配置设置以确保此功能正常。

上述入门指南中有很多示例,您可以在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

答案 1 :(得分:0)

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

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

Interoperability between Embedded and Remote Server Endpoints