我有两个应用服务器(在这种情况下是Tomcat但不一定是这个容器),它们运行相同的应用程序,负载均衡器将工作指向它们。
在这些服务器的后面,我有一个服务器希望通过Hibernate连接的数据库。我想使用EhCache缓存常见的对象请求。在单个服务器设置中,这是对Hibernate使用EhCache提供程序的简单配置更改。
但是,我不希望每个服务器都有自己的缓存,我想我想要一个两个服务器都使用的中央缓存。
最初,我认为这是设置独立EhCache服务器并将hibernate配置指向它们的简单问题。但是,我一直无法确定如何执行此操作(如果有的话)。
我的问题是:这个设置是否存在以及如何设置?
如果这不可能,还有其他方式(或其他缓存提供程序),我在应用程序之间维护一个常见的hibernate缓存吗?
答案 0 :(得分:1)
我不知道可以从多台机器访问的任何EhCache服务器。您可以自己编写并公开,例如REST API,但您还必须为Hibernate实现自己的CacheRegionFactory
以在后台使用远程服务器。由于网络延迟,很多工作和结果很可能不能令人满意。
另一种方法是拥有一个可以由一个JVM中的多个应用程序使用的共享CacheManager
。但由于你有几个JVM,这不是一个选择。此外,它要求EhCache.JAR仅由父类加载器加密一次,因为它使用简单的静态字段来保留单个instance。
最后,您的问题的答案是使用缓存复制还是Terracotta。虽然Terracotta是非常复杂的产品,但EhCache缓存replication非常成熟且稳定。
这个想法很简单:每个服务器都有一个独立的缓存管理器实例,但缓存管理器使用UDP和网络广播自动发现它们。当其中一个缓存发生更改时,会将其传播到其他对等方。它的可扩展性不是很高,但对于两台服务器,它应该可以正常工作。