《面向模式的软件体系结构3-资源管理模式》读书笔记(4)--- Partial Acquisition模式...

2.4 Partial Acquisition模式

      Partial Acquistion(部分获取)模式描述了如何把资源获取分成多个阶段来优化资源管理。每个阶段都获取资源的一部分,这取决于系统的约束,比如内存以及其他资源的可用性。

 

1.问题

      具有高健壮性和可伸缩性的系统必须高效地获取资源,包括本地和远程的资源。预先获取资源对于满足资源的可获得性和可访问性限制很重要。但如果这些系统都在一开始就获取全部资源,那么就会带来很大的额外开销,会浪费很多资源。而另一方面,延迟获取所有资源也是不现实的,因为有的资源可能在应用系统启动或恢复的时候就要用到,为了解决这些冲突的资源获取需求,我们需要关注以下几点问题:

      1)可用性(Availability)。资源获取应当受参数(比如可用的系统内存、CPU负载、其他资源的可用性)的影响。

      2)灵活性(Flexibility)。解决方案应当对固定尺寸的资源和未知或者不可预测尺寸的资源工作得同样好。

      3)可伸缩性(Scalability)。解决方案应当对资源的尺寸具有可伸缩性。

      4)性能(Performance)。资源的获取应当对系统性能的影响尽可能小。 

 

2.解决方案

      把资源获取分成两步或者更多步。在每一步中,获取资源的一部分。每步获取资源的数目都应当用一个或多个策略来配置。例如,每步获取的资源的数目可以取决于考虑到可用缓冲区。系统响应时间需求以及所依赖的资源的可用性的策略。当一个资源被部分获取时,资源使用者就可以开始使用它,假定使用之前不需要获得完整的资源。

      可以用Eager Acquisition和Lazy Acquisition之类的模式来决定何时执行部分获取资源的一步或者多步。Partial Acquisition模式则决定了资源应该分多少步获取,还决定了每一步获取的资源的比例。

 

3.结构

      资源使用者获取并使用资源。

      资源是一个实体(比如影音/视频内容),资源被分多步获取。

      资源提供者管理并提供多个资源。

      

 

      

       

4.实现

1)决定步骤的数目。资源应该分多少步获取取决于系统约束,比如可用的内存和CPU,以及其他的因素,比如时间限制和所依赖的资源的可用性。对于未知或者不可预测尺寸的资源,可能无法决定要分几步来获得整个资源,在这种情况下,步骤数没有上限,会一步步执行下去直到完整地获得资源。

2)选择获取策略。决定何时应该执行资源获取的哪一个步骤,可以用Lazy Acquisition和Eager Acquisition之类的模式来控制何时应执行一个或多个资源获取步骤。例如,可以用Eager Acquisition模式来获取资源的起始部分,然后用Lazy Acquisition模式来获取资源的剩余部分,或者在某个系统启动完成之后但用户还没有请求资源的中间时间来获取。

3)决定获取多少。配置策略来决定每一步要部分地获取多少资源。可以配置不同的策略来决定每一步获得多少资源。如果资源的尺寸是确定的,那么可以用简单的策略,平均分配每一步所获得的资源。更复杂的策略会考虑可用的系统资源,例如,当具有足够内存的时候,这样的策略可能会在一步中获得较多部分的资源。稍后,当系统资源不足的时候,这样的策略可能会获取较少部分的资源。

      如果要获取的资源的尺寸未知或者不可预测,那么可以用这样的自适应策略。还可以配置其他的策略来利用其他的参数,比如需要的相应时间。如果没有系统约束,那么另一个策略可以贪心地尽可能多地获取资源。这样的策略可以保证整个资源在可能的最短时间内被获得。为了判断使用何种策略比较合适,有必要良好地理解应用程序的语义。

4)引入缓存(可选项)。决定是否要把部分获取的资源缓存起来。如果资源尺寸未知,或者整个资源使用前需要在某处合并,那么缓存资源是有用的。如果资源需要被缓存,那么需要决定分配多大空间的缓存区,以确保可以装入整个资源。对未知或者不确定大小的资源,分配的缓冲区尺寸应该在系统限制(比如可用内存)之内,但又要足够大,以处理系统中资源尺寸的上限。

5)实现获取触发器,建立一个负责执行资源获取的每一步的机制。这样的机制应当负责用多个步骤来获取资源的不同部分。Reactor(反应器)之类的模式可以用于实现这样的机制。

6)处理错误条件和部分失败。错误条件和部分失败是分布式系统的特性。当使用Partial Acquisition模式时,有可能会在一步或者多步结束之后出错。结果可能是获取了一部分资源,但是试图接着获取资源的剩下部分会失败。取决于应用程序的语义,这样的部分失败可能可以结束,也可能不可以接受。

      处理部分失败的一种方式是使用Coordinator模式。这个模式有助于确保资源获取的所有步骤都成功完成,或者确保一步都没有成功。 

 

5.结论

优点:

1)反应式行为(Reactive behavior)。Partial Acquisition模式使我们可以获取缓慢地变得可用或者局部可用的资源。如果不使用Partial Acquisition模式,资源使用者就不得不等待不定长的时间以等待整个资源变得可用。

2)可伸缩性(Scalability)。Partial Acquisition模式允许要获取的资源的尺寸具有可伸缩性。资源获取的步骤数目可以依据要获取的资源的尺寸来配置。

3)可配置性(Configurability)。Partial Acquisition模式可以用一个或多个决定分多少步获取资源以及一步获取多少资源的策略来配置。

 

缺点:

1)复杂性(Complexity)。用户处理资源的算法需要可以处理只获得了一部分的资源。这可能会给应用程序带来一定程序的复杂性。此外,用Partial Acquisition模式会导致错误处理变得更为复杂。如果某一步失败了,那么错误处理策略必须确保完整的动作被重新执行或者更正。另一方面,错误处理也会变得健壮。如果某一步获取失败,那么可以重新执行同一步而不需要重新进行全部获取操作。

2)额外开销(Overhead)。Partial Acquisition模式要求资源分步获取。这可能会带来额外的调用开销(多次调用以获得相同资源的不同部分)。 

转载于:https://www.cnblogs.com/pennant/archive/2012/10/13/2719315.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GeoPandas是一个开源的Python库,旨在简化地理空间数据的处理和分析。它结合了Pandas和Shapely的能力,为Python用户提供了一个强大而灵活的工具来处理地理空间数据。以下是关于GeoPandas的详细介绍: 一、GeoPandas的基本概念 1. 定义 GeoPandas是建立在Pandas和Shapely之上的一个Python库,用于处理和分析地理空间数据。 它扩展了Pandas的DataFrame和Series数据结构,允许在其中存储和操作地理空间几何图形。 2. 核心数据结构 GeoDataFrame:GeoPandas的核心数据结构,是Pandas DataFrame的扩展。它包含一个或多个列,其中至少一列是几何列(geometry column),用于存储地理空间几何图形(如点、线、多边形等)。 GeoSeries:GeoPandas中的另一个重要数据结构,类似于Pandas的Series,但用于存储几何图形序列。 二、GeoPandas的功能特性 1. 读取和写入多种地理空间数据格式 GeoPandas支持读取和写入多种常见的地理空间数据格式,包括Shapefile、GeoJSON、PostGIS、KML等。这使得用户可以轻松地从各种数据源中加载地理空间数据,并将处理后的数据保存为所需的格式。 2. 地理空间几何图形的创建、编辑和分析 GeoPandas允许用户创建、编辑和分析地理空间几何图形,包括点、线、多边形等。它提供了丰富的空间操作函数,如缓冲区分析、交集、并集、差集等,使得用户可以方便地进行地理空间数据分析。 3. 数据可视化 GeoPandas内置了数据可视化功能,可以绘制地理空间数据的地图。用户可以使用matplotlib等库来进一步定制地图的样式和布局。 4. 空间连接和空间索引 GeoPandas支持空间连接操作,可以将两个GeoDataFrame按照空间关系(如相交、包含等)进行连接。此外,它还支持空间索引,可以提高地理空间数据查询的效率。
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值