繁体   English   中英

群集环境中的单例

[英]Singleton in Cluster environment

将Singleton对象重构为集群环境的最佳策略是什么?

我们使用Singleton从Database中缓存一些自定义信息。 主要是只读的,但在某些特定事件发生时会刷新。

现在我们的应用程序需要部署在集群环境中。 根据定义,每个JVM都有自己的Singleton实例。 因此,当在单个节点上发生刷新事件并刷新其缓存时,缓存可能在JVM之间不同步。

保持缓存同步的最佳方法是什么?

谢谢。

编辑:缓存主要用于向UI提供自动完成列表(性能原因),我们使用Websphere。 所以任何与Websphere相关的技巧都欢迎。

用分布式缓存替换单例缓存。

一个这样的缓存可能是JBoss Infinispan,但我确信存在其他分布式缓存和网格技术,包括此时可能更成熟的商业技术。

对于一般的单身对象,我不确定。 我想我一开始就试着没有单身人士。

最简单的方法是:

  1. 在您的单例缓存中添加一个到期计时器,以便每隔一段时间缓存一次,并且子顺序调用从源(例如数据库)获取更新的数据

  2. 使用类似JMS主题/ tibRV的东西实现缓存的通知机制。 获取每个缓存实例以订阅并响应在此主题上广播的任何更改消息。

您可以使用WAS中内置的DistributedMap

-Rick

或类似memcached的东西

http://www.danga.com/memcached/

什么是memcached? memcached是一种高性能的分布式内存对象缓存系统,本质上是通用的,但旨在通过减轻数据库负载来加速动态Web应用程序。

Danga Interactive开发了memcached以提高LiveJournal.com的速度,LiveJournal.com这个网站每天已经为100万用户提供了2000万+动态页面浏览量,其中有一堆Web服务器和一堆数据库服务器。 memcached将数据库负载几乎全部删除,从而为用户带来更快的页面加载时间,更好的资源利用率以及在memcache miss上更快地访问数据库。

如果可能,请尽可能使用您的应用服务器支持(有些人有,有些人没有)。 例如,我们使用JBoss对“HA Singleton”的支持,这是一种仅在集群主节点上运行的服务。 它并不完美(你必须处理偶尔脑屁的情况),但这已经足够了。

如果做不到这一点,你可以使用JGroups来设计一些东西,它提供集群节点自动发现和协商,但这并不重要。

作为最后的手段,您可以使用数据库锁定来管理集群单例,但这非常脆弱。 不建议。

作为群集单例的替代方法,您可以使用分布式缓存。 我推荐JBossCache (不需要运行JBoss app服务器)或EhCache(现在提供分发机制)。 你必须重新设计缓存以分布式方式工作(它不会神奇地工作),但它可能是一个比集群单例更好的解决方案。

我和韦斯特·汉森先生在一起,尽可能远离单身人士。 在遭遇SAAJ和JAXP的噩梦以及在JBoss上运行的兼容版本之后,我完成了单身人士和工厂。 SOAP消息不需要工厂来实例化它。

好吧,咆哮,memcache或类似的东西怎么样? 您的缓存需要什么样的亲和力? 如果它已经过时了,或者数据可以过时的灵活性是不是很糟糕?

有几种方法可以解决这个问题,具体取决于1)数据的数据输出方式,以及2)每个实例在所有时间内都需要具有相同的值。

如果您只需要合理的数据数据,但每个JVM都不需要具有匹配的数据,您可以让每个jvm在相同的时间表上刷新其数据(例如,每30秒)。

如果刷新需要在大约相同的时间发生,你可以让一个jvm发送一条消息给其他人说“现在要刷新的时间”

如果每个jvm总是需要相同的信息,你需要进行同步,主人说“立即刷新”,所有缓存都阻止任何新的查询,刷新,并告诉主人他们已完成。 当主服务器从群集的每个成员获得回复时,它会发送另一条消息,表示要继续。

我面临类似的情况,但我正在使用Oracle的WebLogicCoherence

我正在使用一个Web应用程序,该应用程序使用带有从数据库读取的缓存数据的hashmap (要在webform的标签上显示的文本)。 为实现此目的,开发人员使用单例实例存储所有这些信息。 这在单一服务器环境中运行良好,但现在我们想进入集群解决方案,我正面临着这个单例实例的这个问题。

从我现在所读到的, 这是实现我想要的最佳解决方案 我希望这也可以帮助你解决问题。

有些产品可以在这种情况下提供分布式内存缓存(例如memcache)。

如果可能的话,一个更好的解决方案可能是让单例不是单一的,但让应用程序容忍具有单独的实例(比如说所有需要刷新时都能识别)但不是它们必须跨JVM同步,这可以将您的缓存变成瓶颈。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM