有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Infinispan操作模式

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

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

首先,我现在很困惑,从以上两种模式中,哪一种最适合我的应用

我有一个非常简单的用例,我们有一个客户端代码,它将使用REST服务的主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缓存将如何相互交互?有可能在某个时候,我们会在另一个服务实例Infinispan缓存中查找这些用户ID的数据?正当那么在这种情况下会发生什么呢?英菲尼斯潘也会处理这些事情吗?如果是的话,那么我需要什么配置设置来确保这个东西正常工作

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


共 (2) 个答案

  1. # 2 楼答案

    关于你的第二个形象,是的,建筑将完全像这样

    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个节点上。当您在所有者节点上发出GET命令时,条目将从所有者中获取

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

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

    总之,您的集群仍然是最新的,这与您请求特定条目的节点无关。如果它不包含它,条目将从所有者处获取

    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