请注意:如果此问题中提到的缓存系统工作方式完全不同,几乎不可能回答这个问题,那么我会将此问题简化为任何只是符合JCache(JSR107)。
分布式缓存游戏中的主要参与者,至少是Java,EhCache,Hazelcast和Infinispan。
首先,我对分布式缓存的理解是它是一个存在于正在运行的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;一直在变化,无法在静态配置文件中正确配置系统。
所以我问:如果没有静态数量的进程/实例在运行,分布式缓存如何在云上运行?
答案 0 :(得分:1)
处理该问题的一种方法是拥有一个外部(几乎是静态的)缓存集群来保存数据,而您的应用程序(或前端服务器)正在使用客户端连接到集群。您仍然可以根据需要扩展缓存群集,但大多数情况下,您需要的缓存群集中的节点数量少于您需要的前端服务器。