【问题标题】:Infinispan Operational modesInfinispan 操作模式
【发布时间】:2013-08-30 16:29:19
【问题描述】:

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

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

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

我有一个非常简单的用例,我们有一个客户端代码,它将使用服务的主 VIP 调用我们的 REST 服务,然后它将负载平衡到我们已经部署的个人 Service Server服务,然后它将与 Cassandra 数据库交互以根据用户 ID 检索数据。下图会让一切都清楚。

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

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

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

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

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

【问题讨论】:

    标签: java caching infinispan distributed-cache


    【解决方案1】:

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

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

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

    接下来我们来回答你的下一个问题:

    有可能在某个时候,我们会为那些将在另一个服务实例 Infinispan 缓存上的用户 ID 寻找数据?正确的?那么在这种情况下会发生什么? 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 类似地删除/崩溃集群中的节点。会有自动重新平衡过程,例如一些条目 (numOwners=2) 在崩溃后仅在一个节点上存活,将根据分布模式下的 numberOfOwners 属性分别复制到两个节点上。 p>

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

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

    上述入门指南充满了示例,而且您可以在 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

    【讨论】:

    • 非常感谢 tsykora 的帮助。它消除了我所有的疑虑。另一个快速的问题,您在上一段中提到了有关远程集群设置的问题。我想您主要是在谈论与服务服务器相比具有单独的缓存层服务器。正确的?你知道我该怎么做吗?任何示例都会有很大帮助。
    • 完全没有问题,我很高兴我至少帮助了你一点点:) 是的,最常见的用例是为其配备单独的服务器。然后,此服务器充当您的缓存(它可以是更多服务器,整个网格,例如最多 128 个节点)。我在这里找到了一个例子:java.dzone.com/articles/infinispan-remote-cache 我建议专注于 HotRod 协议,除了其他优点外,它还支持智能路由。
    • 我发现了一篇关于与在同一个 JVM 中运行的服务器交互的有趣文章:docs.jboss.org/author/display/ISPN/…(我会说这是也许一些实验性的东西?从来没有玩过因为我不是开发人员)如果您需要一些与实现、架构等相关的更具体的信息。我建议您联系社区开发人员/架构师(邮件、irc),他们可以为您提供帮助。可以在这里找到联系方式:jboss.org/infinispan/community
    • 谢谢 tsykora。我去了这个link 下载了infinispan,我下载了infinispan 的Binaries and demos 部分,下载后我找不到startServer.bat 文件来启动你给我的wiki 中提到的服务器。还有什么我应该下载的吗?
    • 我已经评论了你的新问题。
    【解决方案2】:

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

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

    Interoperability between Embedded and Remote Server Endpoints

    【讨论】:

    • 很遗憾,这不是这个问题的答案。
    猜你喜欢
    • 2020-10-03
    • 2016-10-21
    • 1970-01-01
    • 1970-01-01
    • 2021-05-09
    • 2018-06-25
    • 2013-01-09
    • 1970-01-01
    • 2020-10-01
    相关资源
    最近更新 更多