当您的应用程序部署到云时,JCache兼容的分布式缓存如何工作?

时间:2014-11-05 10:57:41

标签: java amazon-web-services ehcache hazelcast infinispan

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

分布式缓存游戏中的主要参与者,至少是Java,EhCacheHazelcastInfinispan

首先,我对分布式缓存的理解是它是一个存在于正在运行的JVM进程中的缓存,但它不断地在运行的其他多个JVM进程中同步其内存内容别处。因此,流程1(P1)正在计算机1(M1)上运行,P2正在M2上运行,而P3正在M3上运行。所有3个进程都运行相同分布式缓存的实例,但它们彼此都知道彼此并且能够保持其缓存彼此同步。

相信 EhCache通过JGroups完成此进程间同步。不确定其他人在使用什么。

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

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

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

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

所以我问:如果没有静态数量的进程/实例在运行,分布式缓存如何在云上运行?

1 个答案:

答案 0 :(得分:1)

处理该问题的一种方法是拥有一个外部(几乎是静态的)缓存集群来保存数据,而您的应用程序(或前端服务器)正在使用客户端连接到集群。您仍然可以根据需要扩展缓存群集,但大多数情况下,您需要的缓存群集中的节点数量少于您需要的前端服务器。