企业应用架构模式之标识映射

开发 架构
标识映射也是一种对象-关系行为模式,其定义如下:通过在映射中保存已加载的对象,确保每个对象只加载一次;当要访问他们的时候,通过映射来查找它们。标识映射的主要目的是保持一致性,而不是提高性能。

标识映射也是一种对象-关系行为模式,其定义如下:通过在映射中保存已加载的对象,确保每个对象只加载一次;当要访问他们的时候,通过映射来查找它们。标识映射的主要目的是保持一致性,而不是提高性能。

一般而言,为了达到确保每个对象只加载一次的目的,可以引入对象池来保存已加载的对象。当客户端需要使用对象时,先根据映射键在对象池中查找,如果对象池中没有,就从数据库里加载。

资源池(resource pool)是管理与共享系统资源的一种缓存机制。系统在建立一个资源池时,通常会预先创建一定数量的资源放入池中;当某一客户程序申请资源时,资源池可将这些预先创建的资源分配给客户程序;当资源使用完毕后,资源池再将这些资源回收并可分配给其他客户程序。在面向对象设计的背景下,资源池所管理的各类资源均可抽象为对象,资源池中存放的都是资源对象的实例,故资源池亦称对象池(object pool)。

 

用对象池(也被称为资源池)的话需要考虑以下问题:(1)键的选择,要选择一个对象属性来作为其唯一标识;(2)对象池的大小与策略。

对于问题1,通常可以采用用数据库主键来作为对象标识;而对象池的大小则取决于设备的内存状况,对于内存大的设备不妨将对象池设置大一点,以保证系统的实时响应性。但对于内存较少的设备,只能在一定程度上牺牲响应性。系统的内存与速度永远是矛盾的两个方面,设计者要做的的是根据实际情况作出权衡。

 

资源池的具体策略如下:

1. 资源创建策略

资源创建策略用于定制资源池创建新资源实例的行为。最简单的策略是只允许在建立资源池时创建资源,但这种策略缺乏灵活性,仅适合那些资源数目十分有限的应用。另一种策略是为资源池设置池中资源数目的上限与下限阈值,在资源池建立后池中资源实例的数量可动态地在限定范围之内浮动;当池中无可用资源供客户程序使用时,资源池可在上限阈值限定范围内创建并返回一个新的资源实例。

2. 资源分配策略

当客户程序提出资源申请而资源池中无可用资源时,资源分配策略决定了资源池的不同处理方式。最简单的策略是立即返回一个空值或报告一个异常,通知客户程序无法分配资源。另一种策略是阻塞客户程序并让客户程序进入一个队列中等待,直至资源池回收了新的可用资源;该策略还可配合使用超时限制,等待时间过长则向客户程序报告异常。

3. 负载均衡策略

负载均衡策略用于指示资源池如何将资源使用任务平均分配给池中的资源实例。资源池在分配资源时,对资源实例的选取可采取循环策略(round-robin),即依次分配池中的所有资源实例;也可采取随机策略,即从池中随机地选取一个资源实例;也可采取最少使用策略,即将池中使用次数最少的资源实例分配给客户程序;也可采取最近使用策略,即将池中刚回收的资源实例分配给客户程序。

4. 资源恢复策略

正在使用的资源实例可能因网络连接、磁盘耗尽等原因导致资源不再可用,倘若这些资源不加处理即回收到资源池中,还会影响下一客户程序对资源的使用,从而降低系统的可靠性。资源恢复策略用于指示资源池如何发现资源实例的错误,并设法将这些资源修复到正常状态。

发现资源错误时可采取两种不同的策略:一种策略是由客户程序发现资源异常后主动通知资源池,另一种策略是由资源池主动对回收的资源实例进行正确性校验。资源池执行的校验以及修复工作适宜由一个后台监控线程定期执行,而不是在资源出现故障时立即执行修复工作,以避免降低资源池处理资源请求的响应性能。

5. 资源回收策略

在正常情况下,客户程序使用资源完毕后会显式地将资源归还资源池。但有时可能出现客户程序对资源的不合理使用(例如长期占用资源而导致其他客户程序无法使用),也可能因网络连接中断导致客户程序无法显式地归还资源,这会给有限的系统资源造成严重浪费。资源回收策略用于指示资源池在收回分配给客户程序使用的资源时采取的行为。一种改进的策略是由资源池控制资源实例的生存期,而不是由客户程序直接操纵资源实例的对象引用。该策略的实现通常采用代理设计模式为资源对象引入包装对象,客户程序只对包装对象进行操作。倘若客户程序在规定时间内未操作资源对象或出现其他超时条件,则可将资源对象从包装对象中剥离出来,归还资源池以供其他客户程序使用;原客户程序再次通过包装对象访问资源对象时,须由代理对象重新向资源池申请资源。有状态资源对象的剥离比较复杂,必须保存这些资源的状态以备包装对象重新申请时恢复状态。资源池实施这些策略时,控制过程对客户程序而言是透明的。

 

6. 资源清除策略

资源清除策略用于定制资源池撤销资源实例的行为。当资源池中出现较多空闲的资源实例时,有必要清除一些资源以腾出更多内存空间供资源池以外的其他应用程序使用。最简单的策略是在出现客户程序申请或释放资源等系统事件时删除多余资源,但这可能导致资源池的响应性能下降。一种常见策略是为每一资源关联一个时间戳,记录该资源创建或最近使用的时间,从而可根据最近最少使用策略、最旧策略、超时策略等不同策略决定哪些资源将被清除。另一种策略是使用后台监控线程定期检查资源池中的资源总数、空闲资源数量、空闲资源未被使用的时间等,以决定是否删除部分资源实例。

原文链接:http://blog.csdn.net/luoxinwu123/article/details/8045692

责任编辑:林师授 来源: luoxinwu123的博客
相关推荐

2012-01-13 10:45:56

企业应用架构

2012-10-08 11:18:38

企业应用架构工作单元模式

2015-05-04 14:07:54

2021-07-02 06:54:45

软件架构模式

2022-04-02 23:32:42

数据网格架构

2022-07-27 20:37:45

主流企业架构

2011-12-23 10:01:29

2023-06-16 13:34:00

软件架构模式

2024-02-05 08:11:30

架构模式单体

2024-03-26 13:35:19

模型架构框架

2023-07-27 06:51:46

Android架构模式

2020-12-29 19:15:04

架构模式代码分布式

2022-06-14 11:01:37

架构模式开发

2010-04-08 09:27:04

PHP设计模式结构模式

2020-02-24 21:23:41

跨平台想法尝试

2018-05-24 11:38:17

2023-09-11 11:18:44

软件开发架构

2021-07-09 06:48:30

架构映射应用

2022-09-21 10:05:09

架构模式

2010-04-06 12:59:18

MVC
点赞
收藏

51CTO技术栈公众号