zoukankan      html  css  js  c++  java
  • 集群环境中的单例设计模式

            何时使用(单例模式):
            在创建线程池、缓存等对象时,我们可以使用单例模式来避免资源的浪费。但是如果你想要存储比如产品价格等全局数据的时候,单例模式就成了一种反面模式,要考虑用其他方法替代了。
            注意:单例在这里变成了反面模式,我们可以用以下技术来进行避免:
            1. 注入依赖;
            2. 使用工厂设计模式;
            3. 使用 Enum 类等等();

    // Enum singleton - the preferred approach
    public enum MySingleton {
    	INSTANCE;
    }


            集群环境中的单例设计模式
            在一个多元 JVM 环境中,每个 JVM 拥有自己对于该单例对象的拷贝,这将导致很多问题,尤其是在对于资源的访问需要受限和加锁的集群的环境中。
            为了实现跨 JVM 集群,可以使用很多技术(JMS、DB、自定义 API、第三方工具),但这些技术都将影响到系统业务逻辑。

    •         应用服务器也提供一定程度的 API 来避免此类问题。
    • TerracottaOracle Coherence 是不错的选择。它们能够提供一个跨 JVM 的内存复制的对象,你可以使用其提供的单例视图,或者使用集群缓存的提供者,比如 Swarm Cache 或者 JBoss TreeCache 的缓存就是内置了单例和集群。
    • 此外,也有一个叫做 JGroups 的产品 - 它使用了  mulch-cast 通信(TCP/UDP)。它允许一组应用(基于 JVM)可以相互通信以维持同步。
    • JBoss 具有单例服务(基于 MBeans),这意味着它能够解决这个(集群下的单例)问题。点击 这里 这里
    • Weblogic 也有 单例服务 的概念 - 集群中只有一个实例,其他的服务器作为客户端对此实例进行访问。
    • WebSphere 在 WebSphere XD 版本提供了一个跨集群的单例的概念,使用 ObjectGrid 作为 (单例)分隔工具

    原文链接: http://javaarchitectforum.com/2013/02/19/singleton-design-pattern-with-example/

  • 相关阅读:
    解决web网页访问慢的问题
    Django安装配置(for Mac)
    Django安装(for Mac)
    HTML5中的新事件
    关于http-equiv
    【转】@fant-face
    textarear中的value....还是...innertext
    清除浮动的元素的margin-top触碰不到,浮动元素的边界
    常用排序算法总结(一)
    JS常用特效方法总结
  • 原文地址:https://www.cnblogs.com/pangblog/p/3369562.html
Copyright © 2011-2022 走看看