`
webcode
  • 浏览: 5947450 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

一切对象都是资源,请用模式管理(I)

阅读更多

作者:江南白衣,原文地址:http://blog.csdn.net/calvinxiu/archive/2007/05/25/1625454.aspx,版权所有,转载请保留原文链接。

写下标题,就想起冬冬那句"人生像个舞台,请良家妇女离开",什么时候开始,已写不出那样的文字。

在程序世界,内存,文件,网络连接,数据库会话,线程甚至一切的对象,都是资源。《Pattern-Oriented Software Architecture V3 --Patterns for Resource Management 》(POSA第三卷),讲的就是资源管理,外表轻薄(145页)而内里熟悉,很好读。

什么资源需要管理?

  • 数量有限,有引起竞争的资源
  • 获取的代价昂贵的资源

全书把10个模式分成生命期分成三个部分:资源获取,资源生命周期,资源释放。

一、资源获取

资源获取,一是LookUp模式,二是Lazy/Eager/Partial 三种获取模式。

1.Lookup

大家熟悉的Corba的Naming Service,J2EE的JNDI,COM+的注册表,WebService的UDDI,还有最有现实感的DNS,所有这些,都是通过中介实例来发现和访问资源,屏蔽资源的物理位置(还可以进一步屏蔽资源的负载均衡和故障转移)。

几个值得笔记的地方:

  • 获得LookUp服务的实例:在查找资源实例前,先要获得Lookup服务的实例。使用预配置文件或使用广播/多播的自举发现协议。
  • 设计查询语言:支持复杂的查询。
  • 单点故障:如果查找服务崩溃就引起整个系统崩溃,需要群集机制。
  • 悬挂引用:资源已失效,注册的引用变得过时,需要资源注销机制,如leasing模式。
  • Federate Lookup:多个LookUp实例联合提供查询服务,如多级DNS,Half-Object Plus Protocol模式。
  • Replicated Lookup:在Lookup实例处就可以实现负载均衡,如Borland的Corba实现Visibroker。

2.Lazy Acquisition:

Hibernate的Lazy Load已经深入人心,一种朴素的JIT思路。

几个值得笔记的地方:

  • 透明性:使用资源代理使LazyLoad对使用者透明。
  • 支持关闭“Lazy Load机制”的开关。
  • 可能增加额外的时间开销,比如在lazy load时其实多了一次数据库往返。
  • 执行时间的不可预测,这是最要命的,在实时性要求很高的系统里,忽然要去跑一下数据库的话.....

3.Eager Acquisition:

财大气粗,内存多多的服务器,喜欢在启动时就将数据先装进内存里,使得运行时性能(Performance)与可预测(Predictability)兼得,不会忽然来一个时间不可控的数据库查询。

  • 减慢系统启动速度,像我家的旧服务器启动要40分钟,正在改进。
  • 对某类资源可改为运行时检测未来的使用量抢先获得。
    好处是减低了启动时间,更贴切资源的使用量,但多了监控系统的开销。
  • 过度获取资源,且对其他资源使用者不公平。
  • 支持动态配置预获取资源的数量。

4.Partial Acquisition:

中庸从来都是解决实际问题的不错方式,既然上面两种方式互有长短,那我们可以把资源获取分成多个阶段。
比如邮件系统的认证模块,就会eager load这两个月里有登陆邮箱的活动用户,而lazy load其他long time no see的用户。
又如浏览器里渐进的图像加载,或者数据驱动的网路协议中先解包数据包头,再逐步获取数据包体等等。

  • 思考顺序:决定分哪些步骤,每个步骤的策略(lazy,eager),每个步骤获取多少资源(固定尺寸,或以时间等为标准自适应策略)
  • 实现获取触发器,建立负责执行资源获取的每一步的机制,如Reactor[POSA2]之类的模式。

剩下还有6个模式,下篇继续。

分享到:
评论

相关推荐

    二十三种设计模式【PDF版】

    正因为这点不同,导致建筑的管理模式和软件的管理模式就有很多不同, 有些人认识不到这点,就产生了可以大量使用"软件 蓝领"的想法,因为他羡慕建筑中"民工"的低成本. 要知道软件还有一个与建筑截然相反的责任和用途,那...

    数据库课程设计(图书管理系统).doc

    管理信息系统利用计算机的硬件和软件,手工规程、分 析、计划、控制和决策用的模型,以及数据库对信息进行收集、传输、加工、保存和使 用。因此,管理信息系统是一个信息处理系统。 数据库作为存取数据并对数据进行...

    Head.First设计模式_PDF.part1

    书中的例子程序虽然都是用JaVa编写,但是本书所介绍的内容对于任何00语言的用户都适用,包括c++和c+。每一章都有数目不等的测验题。每章最后有一页要点整理,这也是精华所在,我都是利用这一页做复习。  《Head ...

    asp.net知识库

    在Asp.net中如何用SQLDMO来获取SQL Server中的对象信息 使用Relations建立表之间的关系并却使用PagedDataSource类对DataList进行分页 通过作业,定时同步两个数据库 SQLSERVER高级注入技巧 利用反射实现ASP.NET控件和...

    蓝鲸作业平台(Job)是一套运维基础操作管理系统具备海量任务并发处理能力.zip

    云化脚本版本管理模式,贴合现代化开放协同的理念,协作者之间借助平台便捷的共享脚本资源;利用版本管理功能,您可以很好的控制版本的上/下线状态,并能够在出安全漏洞时快速禁用、及时止损! ### 作业编排,一切...

    基于Delphi的仓库管理系统开发论文

    而用计算机来处理企业内部信息间的流通和使用,既可以实现数据信息的共享,控制好数据的冗余度,并使企业有统一的管理,提高信息的利用率;又可以实现整体数据的结构化,表示大量数据相互间的多种联系,这样就可以...

    数据库介绍

    这些工作如果都能在计算机上自动进行,那我们的人事管理就可以达到极高的水平。此外,在财务管理、仓库管理、生产管理中也需要建立众多的这种"数据库",使其可以利用计算机实现财务、仓库、生产的自动化管理。 ...

    AD域配置详解.pdf

    而服务器管理员也好不到哪儿去每个用户账号都重新创建500次如果公司内有1000人呢我们难以想象这么管理网络资源的后果这一切 的根源都是由于工作组的分散管理现在大家明白为什么工作组不适合在大型的 ...

    《农商网》商业计划书

    使用Sybase公司的关系数据库管理系统(DBMS)Sybase SQL Server,它支持并行查询、动态存储、动态行级锁、动态空间管理和索引操作等,具有高性能、高可靠性和高可伸缩性;支持行级和列级规则、触发器、存储过程等,...

    matlab计算资产收益率代码-awesome-everything:有用资源列表

    一切 Python 原作者 - 原始存储库 - 管理面板 管理接口库。 - 您的服务器应得的管理面板。 - Django 管理界面的爵士皮肤。 - 具有改进功能的 Django 管理界面的现代响应式模板。 - 替代的 Django 管理界面(仅供非...

    火炬博客系统5

    可以很好的支持AOP(面向切面编程)的开发模式,Spring能有效地组织中间层对象,通过Bean容器为业务对象、DAO对象和资源对象提供了IOC类型的装配能力,将Struts和Hibernate集成起来,使用Spring构建的应用程序易于...

    火炬博客系统7

    可以很好的支持AOP(面向切面编程)的开发模式,Spring能有效地组织中间层对象,通过Bean容器为业务对象、DAO对象和资源对象提供了IOC类型的装配能力,将Struts和Hibernate集成起来,使用Spring构建的应用程序易于...

    火炬博客系统6

    可以很好的支持AOP(面向切面编程)的开发模式,Spring能有效地组织中间层对象,通过Bean容器为业务对象、DAO对象和资源对象提供了IOC类型的装配能力,将Struts和Hibernate集成起来,使用Spring构建的应用程序易于...

    C#微软培训资料

    <<page 1>> page begin==================== 目 目目 目 录 录录 ... 2000 年 6 月 22 日 不论对 Microsoft 还是对整个 IT 业界都将成为值得纪念的一天 这一天 微软公司正式推出了其下一代...

    sysinternals 工具集合 (20090226版)

    文件和文件夹空间占用情况以及在Windows 操作系统的资源管理器中的Details view 的Relative Size能够使用DiskView's Size On Disk进行观看。  FileMon  Filemon 是一款出色的文件系统监视软件,它可以监视应用...

    「网上书店系统-毕业设计正文」.doc

    在早期,Java比较多的用在浏览器上,插入到网页中(即是Java Applet程序),成为最灵活、最强大的网页多媒体的载体,但由于Java虚拟机相对于个 人电脑而言,有占用资源大,安全性相对较差等缺点,Applet逐渐的被...

    windows 程序设计

    使用者可以使用键盘(或者更直接地使用鼠标等指向设备)直接在屏幕上操纵这些对象,拖动图形对象、按下鼠标按钮以及滚动滚动条。 因此,使用者与程序的交流变得更为亲密。这不再是一种从键盘到程序,再到视讯显示器...

    Borland C++3.1

    10.虚拟Run - time面向对象存储管理功能(VROOMM,Virtual Run-time Object-Oriented Memory Manager)。当程序设计人员选定目的码的覆盖功能后,VRAOOMM会处理一切事情,即使程序超过640K。 11.丰富的类库,本产品提供...

    大工19秋《计算机应用基础》在线测试2答案.doc

    在PowerPoint 2010的大纲视图模式下,可以实现在其他视图中可实现的一切编辑功能(比如插入音频等 )。 参考选择是:错误 24.Internet网络是网络与网络之间所串连成的庞大网络,是计算机和通信两大技术相结 合的产物。 ...

Global site tag (gtag.js) - Google Analytics