java Infinispan操作模式
我最近开始研究Infinispan作为我们的缓存层。阅读Infinispan中的操作模式后,如下所述
- 嵌入式模式:当您在与应用程序相同的JVM中启动Infinispan时李>
- 客户机-服务器模式:这是指启动远程Infinispan实例,并使用各种不同的协议连接到它李>
首先,我现在很困惑,从以上两种模式中,哪一种最适合我的应用
我有一个非常简单的用例,我们有一个客户端代码,它将使用REST服务的主VIP调用REST服务,然后它将负载平衡到我们部署服务的单个Service Server
,然后它将与Cassandra数据库交互,以根据用户id检索数据。下图将使一切变得清晰。
例如,假设客户机正在为userId = 123
寻找一些数据,那么它将使用主VIP调用我们的REST服务,然后它将对我们的四个服务服务器中的任何一个进行负载平衡,假设它对Service1进行负载平衡,然后service1将调用Cassandra数据库获取userId = 123
的记录,然后返回到客户端
现在,我们计划使用Infinispan缓存数据,因为压缩正在破坏我们的性能,因此我们的读取性能可以得到一些提升。所以我开始研究Infinispan,并偶然发现了下面提到的两种模式。我不确定在我们的情况下,使用Infinispan的最佳方式是什么
其次,从Infinispan缓存来看,我期望的是假设我使用嵌入式模式,那么它应该是这样的
如果是,那么Infinispan缓存将如何相互交互?有可能在某个时候,我们会在另一个服务实例Infinispan缓存中查找这些用户ID的数据?正当那么在这种情况下会发生什么呢?英菲尼斯潘也会处理这些事情吗?如果是的话,那么我需要什么配置设置来确保这个东西正常工作
如果我遗漏了什么,请原谅我的无知。任何清晰的信息都会让我对上述两个问题更加清楚
# 1 楼答案
我认为在最新的Infinispan版本中,对于那些有兴趣以多种方式访问Infinispan的用户,支持以一种特殊的兼容模式工作
按照下面的链接配置缓存环境以支持嵌入式或远程
Interoperability between Embedded and Remote Server Endpoints
# 2 楼答案
关于你的第二个形象,是的,建筑将完全像这样
请看这里:https://docs.jboss.org/author/display/ISPN/Getting+Started+Guide#GettingStartedGuide-UsingInfinispanasanembeddeddatagridinJavaSE Infinispan将使用JGroups协议管理它,并在节点之间发送消息。将形成集群,并对节点进行集群。之后,您可以体验到在特定节点上复制条目的预期行为
下面我们来回答你的下一个问题:
Infinispan是为这个场景开发的,所以你根本不需要担心它。例如,如果您有4个节点,并将分发模式设置为numberOfOwners=2,那么缓存的数据每时每刻将正好位于2个节点上。当您在非所有者节点上发出GET命令时,条目将从所有者中获取
您还可以将集群模式设置为复制,其中所有节点都包含所有条目。请在这里阅读更多关于模式的信息:https://docs.jboss.org/author/display/ISPN/Clustering+modes并选择最适合您的用例的模式
此外,当您向集群添加新节点时,将发生状态转移,并在集群之间同步/重新平衡条目。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