java - 当您的应用程序部署到云时,符合 JCache 标准的分布式缓存如何工作?

标签 java amazon-web-services ehcache hazelcast infinispan

请注意:如果这个问题中提到的缓存系统的工作方式彼此完全不同,以至于几乎不可能回答这个问题,那么我会将这个问题简化为仅兼容 JCache (JSR107) 的任何问题。

分布式缓存游戏中的主要参与者(至少对于 Java 而言)是 EhCache , HazelcastInfinispan .

首先,我对分布式缓存的理解是,它是存在于正在运行的 JVM 进程内的缓存,但会不断地在其他地方运行的其他多个 JVM 进程之间同步其内存内容。因此,进程 1 (P1) 在机器 1 (M1) 上运行,P2M2 上运行,P3M3 上运行。同一分布式缓存的一个实例正在所有 3 个进程上运行,但它们以某种方式都相互了解,并且能够保持缓存彼此同步。

相信 EhCache 通过 JGroups 实现了进程间同步。 。不确定其他人在使用什么。

此外,我的理解是这些配置是有限制的,因为对于每个节点/实例/进程,您必须配置它并告诉它系统中的其他节点/实例/进程,以便它们都可以彼此同步缓存。像这样的事情:

<cacheConfig>
    <peers>
        <instance uri="myapp01:12345" />
        <instance uri="myapp02:12345" />
        <instance uri="myapp03:12345" />
    </peers>
</cacheConfig>

首先,如果我所说的任何内容不正确或有误导性,请先纠正我!

假设我或多或少步入正轨,那么我很困惑分布式缓存如何在节点由自动缩放器调节的弹性/云环境中工作。一分钟后,负载达到峰值,有 50 个虚拟机为您的应用程序提供服务。因此,您需要在配置中定义 50 个“对等实例”。然后下一分钟,负载就会减少到爬行,您只需要 2 或 3 个负载平衡节点。由于“对等实例”的数量始终在变化,因此无法在静态配置文件中正确配置系统。

所以我问:如果运行的进程/实例的数量永远不固定,分布式缓存如何在云上工作?

最佳答案

解决该问题的一种方法是使用一个外部(几乎静态)缓存集群来保存数据,并且您的应用程序(或前端服务器)使用客户端连接到该集群。您仍然可以根据需要扩展或缩小缓存集群,但大多数时候,您在缓存集群中需要的节点数量少于您需要的前端服务器数量。

关于java - 当您的应用程序部署到云时,符合 JCache 标准的分布式缓存如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26755494/

相关文章:

java - 在 Spring 中使用 RMI 公开多个对象

javascript - Puppeteer 脚本可以在本地运行,但不能在 EC2 AWS 上运行

amazon-web-services - 如何使用变量中的凭证运行 AWS SDK 版本 2?

java - 如何使 Spring Framework 的 @Cachable 以文件的 lastModified 属性作为键工作?

java - 如何在没有 xml 的情况下配置 Ehcache 3 + spring boot + java config?

java - 如果可以的话,我可以在不使用java中的包装类的情况下对两个字符串值求和吗?

JavaFX GridPane 列/行跨度与索引

java - 在 GWT 中使用字符串变量作为对象

amazon-web-services - Dynamodb 更新表达式 : "REMOVE #items[0]" appends new list element?

java - ehcache与spring 3.0集成