资源获取模式

简介:

    任何应用都需要与资源打交道,这个资源可能是文件、内存、网络、数据库、web服务等。特别是系统的可伸缩性和性能上,一个系统的可伸缩性很大程度上取决于该系统资源管理的可伸缩性。资源的获取是资源生命周期的起点,因此在此阶段的优化和配置对系统性能、可用性、稳定性、可伸缩性的影响是至关重要的。资源的获取要解决 这么两个问题:怎么找到资源,何时获取资源。
    资源的超找可以通过lookup模式,所谓lookup模式就是引入一个查找服务作为中介,让资源使用者可以 找到并使用资源提供者提供的资源。这方面一个显然的例子就是JNDI,我们通过JNDI查找EJB、数据库连接池等,另一个例子就是RMI,客户端通过命名服务查找到远程对象。查找服务提供查询语言,也提供接口让服务注册到它的容器内。
    何时获取资源?根据时机的不同可以分为预先获取模式和延迟获取模式。如果对系统的可用性和运行时性能要求比较高,那么可能你会预先加载或者分配所要用到的资源,通过一个资源提供者的代理对象拦截对资源的请求,返回预先加载或者分配的资源,从而提高系统性能。这方面的例子就是 memcached,memcached启动时预先分配内存来提高性能(相应的带来的是内存的不能有效利用)。线程池、数据库连接池也是预先获取模式的例子,通过预先创建的线程或者数据库连接,来提高系统的整体性能。反之,延迟获取模式就是尽可能到使用资源的最后一刻才去获取资源,一开始返回的只是一个资源的代理对象,真正使用到资源的时候由这个代理对象去加载实际的资源。延迟获取模式的例子也很多,例如 Hibernate的延迟加载,延迟加载的对象其实是一个代理类(通过java动态代理或者cglib增强),只有真正用到的时候才去数据库获取实际的数 据。函数式编程中的延时求值也是延迟获取模式的例子,没有求值前只是个promise,求值到的时候才force执行。Singleton模式下的单例也常常做延迟初始化,这是延迟获取模式的特化。
    如果资源的大小很大、极大或者是未知尺寸,预先获取会导致系统速度的缓慢甚至耗尽系统资源,延迟获取在获取的时候也可能时间过长难以忍受或者耗尽系统资源,两者都不适合,解决办法就是分步获取,这就是所谓部分获取模式。将资源的获取分为两步或者多步,每一步获取一定数目的资源,每一步获取资源也可以采用预先或者延迟的策略。这样的例子如socket读数据到缓冲区,一次可能只读一部分数据到缓冲区,分步才读完。再比如web页面一棵树的展 现,一开始可能只是显示部分节点,在需要查看一些节点的时候才会通过ajax加载和展开它们的子结点乃至深层子结点。

参考:POSA3 第二章

文章转自庄周梦蝶  ,原文发布时间 2008-09-07

目录
相关文章
|
8月前
|
运维
使用资源编排为云资源批量绑定标签
本场景介绍利用资源编排服务ROS(Resource Orchestration Service)在资源栈中创建资源,并同时为资源绑定标签,提升运维效率。
102 0
|
弹性计算 数据可视化 关系型数据库
资源
资源
|
消息中间件 存储 弹性计算
资源总结
资源总结
|
Kubernetes Cloud Native 安全
Koordinator 0.6:企业级容器调度系统解决方案,引入 CPU 精细编排、资源预留与全新的重调度框架
经过社区多位成员的贡献,Koordinator 0.6 版本正式发布。相较于上一个版本 0.5,新版本进一步完善了 CPU 精细化编排能力,更好的兼容原生用法;支持了资源预留的能力(Reservation),补齐了调度原子语意缺失;发布了全新的重调度框架,支持用户灵活的扩展自定义插件。这些特性源自于阿里巴巴内部的生产实践,并结合上游社区规划思考,为用户带来标准、强大、灵活的调度解决方案。
949 0
Koordinator 0.6:企业级容器调度系统解决方案,引入 CPU 精细编排、资源预留与全新的重调度框架
|
前端开发 JavaScript 数据可视化
TailwindCSS 资源推荐
TailwindCSS 发布了 3.0, 功能也越来越好用,那么是否有与之相关的组件库呢 ?本文是我将推荐我个人认为比较好用的资源。
631 0
获取资源那些事
获取资源那些事
113 0
|
安全 程序员 编译器
借来的资源,如何还的潇洒?
本文的内容将专门对付内存管理,培养起有借有还的好习惯,方可消除资源管理的问题。
借来的资源,如何还的潇洒?
|
分布式计算 资源调度 大数据
静态模式和统一模式_2|学习笔记
快速学习 静态模式和统一模式_2
静态模式和统一模式_2|学习笔记
|
缓存 监控 Java
高可用架构(10)-Hystrix隔离策略、Command及资源池大小控制(下)
高可用架构(10)-Hystrix隔离策略、Command及资源池大小控制(下)
95 0
高可用架构(10)-Hystrix隔离策略、Command及资源池大小控制(下)
|
缓存 监控 算法
高可用架构(10)-Hystrix隔离策略、Command及资源池大小控制(上)
高可用架构(10)-Hystrix隔离策略、Command及资源池大小控制(上)
169 0
高可用架构(10)-Hystrix隔离策略、Command及资源池大小控制(上)