Pennant的日常
分享工作上的点点滴滴
摘要: 4.2 Evictor模式 Evictor(清除者)模式描述了何时以及如何释放资源以优化资源管理。这个模式让我们可以配置不同的策略来自动决定哪些资源应该释放,以及应该在什么时候释放这些资源。1.问题 高度健壮及可伸缩的系统必须高效地管理资源。随着时间的推移,应用程序会获得很多资源,其中有一些只用过一次。如果应用程序持续地获取资源而不释放它们,那么就会导致性能下降和系统的不稳定。为了避免出现这样的情况,应用程序可以在使用资源之后立刻释放资源。但是,应用程序可能需要重新使用相同的资源,这就要求重新获得那些资源。重新获得资源这个操作本身可能代价高昂,所以应该避免,这可以通过把频繁使用的资源保... 阅读全文
posted @ 2012-10-23 08:34 汝熹 阅读(648) 评论(0) 推荐(0) 编辑
摘要: 4.1 Leasing模式 Leasing(租约)模式通过在获取资源时把资源同基于时间的租约相关联而简化了资源释放。当租约过期并且没有被更新时,那么资源就会被自动释放。1.问题 高度健壮和可伸缩的系统必须高效地管理资源。资源可以有很多种类型,包含本地和分布式服务、数据库会话以及安全令牌。在典型的用例中,资源使用者获取资源提供者的接口,然后向提供者要求一个或者多个资源。假定提供者给予了资源,那么资源使用者就会开始使用资源。但是,过了一段时间之后,资源使用者可能不再需要其中的一些资源。除非资源使用者显式地终止和提供者的关系并释放资源,否则不用的资源依然会被不必要地占用。这会进而导致资源使用... 阅读全文
posted @ 2012-10-21 21:12 汝熹 阅读(321) 评论(0) 推荐(0) 编辑
摘要: 3.4 Resource Lifecycle Manager模式 Resource Lifecycle Manager(资源生命周期管理器)模式引入了一个单独的Resource Lifecycle Manager,从而把资源的生命周期管理同它们的使用解耦合了。1.问题 建立大规模的系统很有挑战性。使大规模系统健壮并且具有伸缩性更具挑战性。使大规模系统健壮并且具有可伸缩性的最重要因素是如何管理资源。系统中的资源可能具有很多种不同的类型,比如网络连接、线程、同步原语、服务等。网络连接代表了客户应用程序和分布式应用服务之间的通信渠道。高效地管理它们需要有能力判断何时建立连接,何时释放连接。线程对大规 阅读全文
posted @ 2012-10-19 09:10 汝熹 阅读(349) 评论(0) 推荐(0) 编辑
摘要: 3.3 Coordinator模式 Coordinator(协调者)模式描述了如何通过协调涉及多个参与者(每个参与者都包含资源、资源使用者和资源提供者)的任务的完成来维护系统的一致性。这个模式提出了一个解决方案,使得在涉及多个参与者的任务中,或者所有参与者的任务都完成,或者一项任务都没有完成。这确保了系统总是处于一致的状态。1.问题 很多系统都会执行涉及不止一个参与者的任务。一个参与者是一个主动实体,既包含资源使用者,也包含资源提供者。此外,在某些情况下,资源(比如服务)可以是主动的,所以会直接参与任务。参与者可能位于同一个进程中,也有可能跨越了多个进程、多个节点,每个参与者都会顺序执... 阅读全文
posted @ 2012-10-17 09:05 汝熹 阅读(506) 评论(0) 推荐(0) 编辑
摘要: 3.2 Pooling模式 Pooling(池)模式描述了如何通过循环使用不再需要的资源来避免昂贵的获取和释放资源的操作。一旦资源被循环利用并置入池中,它们就失去了自己的标识和状态。1.问题 很多系统都要求对资源可以进行快速并且可预测的访问。这样的资源包括网络连接,对象实例,线程以及内存。除了提供快速以及可预测的资源访问外,系统还要求解决方案对于所用资源的数目具有可伸缩性。此外,每一次用户请求应当在访问时间内经历很少的变化。所以,对资源A的获取时间不应当同资源B的获取时间有显著不同(A和B是相同类型的资源)。为了解决上面提到的问题,需要解决以下几点: 1)可伸缩性(Scalabil... 阅读全文
posted @ 2012-10-16 08:45 汝熹 阅读(452) 评论(0) 推荐(0) 编辑
摘要: 3.1 Caching模式 Caching(缓存)模式描述了如何通过用完资源后不立刻释放资源来避免对资源的昂贵的重新获取。资源会维持它们的标识,并保留在某种可以快速访问的存储器中。它们可以被重用,从而避免了重新获取。1.问题 对相同资源的重复的获取、初始化以及释放造成了不必要的开销。在系统的同一个组件或者多个组件访问相同资源的情形下,重复的获取和初始化带来了CPU周期和系统整体性能的开销。应该减少获取、访问和释放频繁使用的资源的开销,以提高性能。为了解决这个问题,需要关注以下几点: 1)性能(Performance)。重复获取、初始化和释放资源的开销必须最小化。 2)复杂性(C... 阅读全文
posted @ 2012-10-14 22:41 汝熹 阅读(343) 评论(0) 推荐(0) 编辑
摘要: 2.4 Partial Acquisition模式 Partial Acquistion(部分获取)模式描述了如何把资源获取分成多个阶段来优化资源管理。每个阶段都获取资源的一部分,这取决于系统的约束,比如内存以及其他资源的可用性。1.问题 具有高健壮性和可伸缩性的系统必须高效地获取资源,包括本地和远程的资源。预先获取资源对于满足资源的可获得性和可访问性限制很重要。但如果这些系统都在一开始就获取全部资源,那么就会带来很大的额外开销,会浪费很多资源。而另一方面,延迟获取所有资源也是不现实的,因为有的资源可能在应用系统启动或恢复的时候就要用到,为了解决这些冲突的资源获取需求,我们需要关注以下... 阅读全文
posted @ 2012-10-13 08:38 汝熹 阅读(355) 评论(0) 推荐(0) 编辑
摘要: SQLite具有诸多的优点,如零配置、移植性、紧凑性、简单性、灵活性、自由授权、可靠性和易用性等。它的各种特点使它非常适合做一些中小型项目的DBMS,或构建Cache,或嵌入式项目的DBMS。 最近在学习SQLite的使用,为了让学习更有效,在实践中学习,所以制定以下任务,一边做一边学: 1) 在SQLite的普通版本上加入加密功能(SQLite预留的加密接口,只是需要另外去完成)。 2) 把加密版本编译一个.Net的版本。 3) 通过NDK的方式把加密版本的SQLite加入到Android。不要浪费时间,现在就做第一个任务,加密 正如上面所说的,SQLite的作者早就... 阅读全文
posted @ 2012-10-11 11:32 汝熹 阅读(7815) 评论(1) 推荐(0) 编辑
摘要: 2.3 Eager Acquisition模式 Eager Acquisition(预先获取)模式描述了如何通过在实际使用资源前预先获取并初始化资源来使运行时资源获取具有可预测性和快速性。1.问题 具有软实时约束的系统需要严格规定何时以及如何获取资源。这类系统的例子有:关键工业系统,高可伸缩性的Web应用程序,甚至桌面应用程序的图形用户界面(GUI)。在每个例子中,这样的系统的用户都会对系统的可预测性、延迟和性能作出一些假定。但是,如果执行任何用户发出的请求都会导致昂贵的资源获取(比如动态获取线程和内存),那么就可能会带来不可预期的时间开销。具有软实时约束的系统如何获取资源且依然可以满... 阅读全文
posted @ 2012-10-11 08:53 汝熹 阅读(338) 评论(0) 推荐(0) 编辑
摘要: 2.2 Lazy Acquisition模式 Lazy Acquisition(延迟获取)模式把资源获取推迟到了系统执行的可能的最后一刻,以便优化资源使用。1.问题 有限的资源可用性是所有的软件系统都面临的约束。此外,如果可用的资源没有正确管理,可能会给系统带来瓶颈,并且对系统的性能和稳定性带来显著影响。为了确保资源在需要时是可用的,大多数系统会在启动时获取资源。但是,早期获得资源会带来很大的获取开销,而且会导致资源浪费(特别是如果资源不是立刻需要的话)。 必须获取和管理昂贵的资源的系统需要一种方式来降低获取资源的初始开销。如果这些系统一开始就获取全部资源,那么会导致很大的开销,会... 阅读全文
posted @ 2012-10-10 08:47 汝熹 阅读(362) 评论(0) 推荐(0) 编辑