我最近开始研究Infinispan作为我们的缓存层.在阅读Infinispan中的操作模式后,如下所述.
>嵌入模式:这是在与应用程序相同的JVM中启动Infinispan的时候.
>客户端 – 服务器模式:这是当您启动远程Infinispan实例并使用各种不同协议连接到它时.
首先,我现在很困惑,最适合我上述两种模式的应用.
我有一个非常简单的用例,我们有一个客户端代码,它将使用服务的主要VIP调用我们的REST服务,然后它将负载平衡到我们部署了我们的服务的各个Service Server然后它将与Cassandra数据库交互以检索用户ID的数据基础.下图将使一切清晰.
例如,假设客户端正在为userId = 123寻找一些数据,那么它将使用主VIP调用我们的REST服务,然后它将对我们的四个服务服务器中的任何一个进行负载平衡,假设它与Service1进行负载平衡,并且然后service1将调用Cassandra数据库以获取userId = 123的记录,然后返回给客户端.
现在我们计划使用Infinispan缓存数据,因为压缩会破坏我们的性能,因此我们的读取性能可以得到一些提升.所以我开始研究Infinispan并发现了两种模式,如下所述.我不确定在我们的案例中使用Infinispan的最佳方式是什么.
其次,从Infinispan缓存来看,我将期待的是假设我使用嵌入式模式,那么它应该看起来像这样.
如果是,那么Infinispan缓存将如何相互影响?有可能在某个时候,我们将寻找那些将在另一个Service Instance Infinispan缓存上的userId的数据?对?那么在那种情况下会发生什么? infinispan会不会照顾这些事情?如果是的话,那么我需要进行哪些配置设置以确保此功能正常.
如果我遗失任何东西,请原谅我的无知.任何明确的信息都会让我对上述两个问题更清楚.
解决方法:
关于你的第二张图片,是的,架构将完全如此.
If yes, then how Infinispan cache will interact with each other?
请看这里:https://docs.jboss.org/author/display/ISPN/Getting+Started+Guide#GettingStartedGuide-UsingInfinispanasanembeddeddatagridinJavaSE
Infinispan将使用JGroups协议管理它并在节点之间发送消息.将形成集群并将节点集群化.之后,您可以体验特定节点上条目复制的预期行为.
在这里,我们转到您的下一个问题:
It might be possible that at some time, we will be looking for data for those userId’s that will be on another Service Instance Infinispan cache? Right? So what will happen in that scenario? Will infinispan take care of those things as well?
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个节点上.
总而言之,您的群集仍将是最新的,这与您要求特定条目的节点无关.如果它不包含它,将从所有者获取条目.
if yes, then what configuration setup I need to have to make sure this thing is working fine.
前面提到的入门指南充满了示例,您可以在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