




已阅读5页,还剩72页未读, 继续免费阅读
(计算机应用技术专业论文)基于池化技术的分布式数据缓存模型研究与实现.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于池化技术的分布式数据缓存模型研究与实现中文摘要 中文摘要 分布式技术的普遍应用,使传统的w - e b 系统面临越来越大的挑战。客户端大量 的并发请求导致服务器负载过重,业务逻辑和事务处理都受到影响。其中,并发访问 情况下,响应速度慢和数据利用率低的问题大大制约了w e b 系统性能。 在客户端和服务器之间加入中间层可解决上述问题,本文的中间层包括线程池、 数据库连接池和分布式数据缓存三部分,与客户端和服务器组建成分布式池化数据缓 存模型( d p d c m ) 。本模型的主要功能是用线程池处理客户端请求的业务逻辑,用连 接池来优化数据库连接,用分布式缓存提高数据利用率。 主要改进工作包含下面三部分: 第一,针对用户并发的访问控制,本文采用多线程的并发控制技术设计线程池, 通过对池中线程数量的动态优化调整来提升线程池性能,使其能处理更多并发请求; 第二,针对频繁的数据库连接请求,文中的数据库连接池采取两种不同的复用连接策 略,并建立具有延迟释放功能的应急池,以应对某段时间内的高并发请求连接的情况; 第三,针对大量的相近数据访问,本文采用与传统数据缓存不同的分布式缓存方法, 设计了d p d c m 的缓存对象结构,改进了缓存替换算法和一致性维护策略,采用 l r u m 替换算法和t t l 与服务端失效模式相结合的一致性维护策略管理缓存,并对 相关的技术进行了理论分析。 本文将d p d c m 应用到实际的社区论坛开发中,介绍了池化技术和分布式数据缓 存的具体实现方法,最后对模型及其使用的技术进行了应用场景的设计和测试。实验 表明,改进后的分布式池化数据缓存系统缩短了平均响应时间并提高了数据缓存命中 率,本文解决方案比传统方法更适合如今的w e b 系统。 关键字:多线程;并发;复用;池化;数据缓存;分布式模型 作者:杨开杰 指导老师:徐汀荣 a b s t r a c t t h e a p p l i c a t i o n o fd i s t r i b u t e d t e c h n o l o g y h a sb r o u g h t g r e a tc h a l l e n g e s t o c o n v e n t i o n a lw e bs y s t e m s ag r e a tn u m b e ro fs i m u l t a n e o u sr e q u e s t sf r o mc l i e n t sg i v ea b i gb u r d e nt os e r v e r sa n db r i n gs o m ep r o b l e m so np e r f o r m a n c e i nf a c t ,t h es l o wd o w n o f t h er e a c t i o ns p e e da n dl o we f f i c i e n c yo fd a t au t i l i z a t i o nh a v eb e c o m et h eb o t t l e - n e c ko f s y s t e mp e r f o r m a n c e t h em i d d l et i e ri si m p o r t e db e t w e e nt l l ec l i e n t sa n ds e r v e r sc a ns o l v et h e s ep r o b l e m s , i n c l u d i n gt h r e a dp o o l ,d a t a b a s ec o n n e c t i o np o o la n dd i s t r i b u t e dd a t ac a c h et h r e ep a r t s ,t h e c l i e n t sa n dt h ed a t a b a s e 、加t hi tt o g e t h e re s t a b l i s h e dt h ed i s t r i b u t e dp o o l i n gd a t ac a c h e m o d e l ( d p d c m ) t h em a i nf u n c t i o no ft h i sm o d e li su s et h et h r e a dp o o lt od e a l w i t h r e q u e s t s ,u s ec o n n e c t i o np o o lt oo p t i m i z ed a t a b a s ec o n n e c t i o n , a n du s ed i s t r i b u t e dc a c h et o i m p r o v et h ee f f i c i e n c yo fd a t au t i l i z a t i o n 。 t h em a i ni m p r o v e m e n t so ft h i sp a p e ri n c l u d et h ef o l l o w i n gt h r e ep a r t s f i r s t ,t h i sp a p e ru t i l i z e sm u l t i - t h r e a d e dc o n c u r r e n c yc o n t r o lt e c h n i q u et od e s i g nt h e t h r e a d sp o o lt om a n a g et h en u m b e ro ft h r e a d sd y n a m i c a l l ys e c o n d ,t w ok i n d so fd i f f e r e n t r e u s es t r a t e g i e sa l eu s e di nd a t a b a s ec o n n e c t i o np o o l ,a n de s t a b l i s he m e r g e n c yp o o lw i t h d e l a y e dr e l e a s i n ga l g o r i t h mt od e a lw i t hh i 曲c o n c u r r e n tr e q u e s t t h i r d ,t h i sp a p e rd e s i g n s t h en e ws t r u c t u r eo fc a c h eo b j e c t s ,i m p r o v e sl r u - mc a c h er e p l a c e m e n ta l g o r i t h ma n d c a c h ec o n s i s t e n c ym a n a g e m e n to ft h es e r v e rf a i l u r em o d ea n dt t lc o m b i n a t i o n w ea l s o a n a l y z et h ee f f i c i e n c ya n df e a s i b i l i t yo ft e c h n o l o g i e si nt h e o r y t h i sp a p e ra p p l i e sd p d c mt ot h ed e v e l o p m e n to fc o m m u n i t yf o r u m s ,a n de x p l a i n s t h er e a l i z a t i o nm e t h o d s f i n a l l yu t i l i z e st h ea p p l i c a t i o ns c h e m et ot e s tt h ep e r f o r m a n c eo f t e c h n o l o g i e si nd p d c m t h er e s u l t ss h o wt h a tt h ei m p r o v e dd i s t r i b u t e dc a c h es y s t e m s h o r t e n st h er e a c t i o nt i m ea n di m p r o v e st h er a t eo fc a c h eh i t ,s ot h en e ws y s t e mi sm o r e s u i t a b l ef o rt o d a y sw e bs y s t e m st h a nt h et r i d a t i o n a lm e t h o d s k e y w o r d s :m u l t i t h r e a d ;c o n c u r r e n c y ;r e u s e ;p o o l i n g ;d a t ac a c h e ;d i s t r i b u t e dm o d e l i l w r i t t e nb y :k a i j i ey a n g s u p e r v i s e db y :t i n g r o n gx u 图表目录 图2 1 基于线程的同步并发结构8 图2 2 线程池模型结构一1 0 图2 3 连接池模型结构1 3 图2 4 传统缓存模型结构1 5 图2 5 分布式缓存模型1 6 图2 6 缓存命中率。19 图3 1d p d c m 结构图2 2 图3 2 动态调整算法流程图2 4 图3 3 动态调整优化算法流程图2 5 图3 4 线程数目与并发性能关系图2 6 图3 5 连接池管理策略流程图一2 7 图3 6 连接池优化管理策略图2 9 图3 7 延迟释放策略图一2 9 图3 8 缓存模型结构3 3 图3 - 9 缓存管理流程图。3 4 图3 1 0g e t l i s t 方法查询流程图3 5 图4 1 轻量级j 2 e e 多架构图3 8 图4 2m v c 模式3 9 图4 3s s h 整合架构流程图。4 0 图4 - 4 搜索查询页面4 1 图4 5 用户管理与版面管理4 2 图4 6 用户权限管理页面4 2 图4 7 版区管理页面4 3 图4 8b a s e m a n a g e ru m l 图4 7 图4 - 9 缓存替换算法顺序图5 0 图4 1 0 分布式访问数据对象的处理顺序图5 2 图5 1 负载测试流程图5 5 图5 2 创建负载测试场景5 6 图5 3 监控负载下的场景5 7 图5 4 分析结果的摘要报告:5 7 图5 5 分析结果之平均响应时间图示5 8 图5 - 6 线程池性能测试结果6 0 图5 7 连接池性能测试结果6 1 图5 8 数据缓存平均响应时间测试结果。6 2 图5 - 9 分布式缓存命中率百分比6 3 图5 1 o 缓存大小对平均响应时间和缓存命中率的影响6 4 表3 1 缓存思路示例表。3 2 表3 2b a s e m a n a g e r 类中部分变量属性j 3 2 表4 1b a s e m a n a g e r 类的部分方法及其说明4 8 表5 1 单机测试环境。5 5 表5 2 集群测试环境5 6 苏州大学学位论文独创性声明及使用授权的声明 学位论文独创性声明 本人郑重声明:所提交的学位论文是本人在导师的指导下,独立进 行研究工作所取得的成果。除文中已经注明引用的内容外,本论文不含 其他个人或集体已经发表或撰写过的研究成果,也不含为获得苏州大学 或其它教育机构的学位证书而使用过的材料。对本文的研究作出重要贡 献的个人和集体,均己在文中以明确方式标明。本人承担本声明的法律 责任。 研究生签名: 、 学位论文使用授权声明 苏州大学、中国科学技术信息研究所、国家图书馆、清华大学论文 合作部、中国社科院文献信息情报中心有权保留本人所送交学位论文的 复印件和电子文档,可以采用影印、缩印或其他复制手段保存论文。本 人电子文档的内容和纸质论文的内容相一致。除在保密期内的保密论文 外,允许论文被查阅和借阅,可以公布( 包括刊登) 论文的全部或部分 内容。论文的公布( 包括刊登) 授权苏州大学学位办办理。 研究生签名:幺翠日期: 导师签名: 纽日期:率 基于池化技术的分布式数据缓存模型研究与实现第一章绪论 1 1 论文研究背景 第一章绪论帚一早三;百化 随着w e b 技术的迅猛发展和普遍应用,w e b 系统业务访问量与日俱增,每天都 有众多复杂的请求发送到服务器。特别是分布式技术的应用,大量并发的数据访问, 对应用服务器和数据库服务的管理提出了更高的要求。合理提高数据访问效率且不对 服务器产生过多压力,成为提升系统整体性能的关键【l 】。 传统的应用大部分都是基于d b m s 的客户机服务器模式,即c s 结构。它由用 户界面、表现逻辑、事务逻辑和数据访问四部分组成。客户机端包括用户界面和表现 逻辑,用户界面主要完成应用的前台交互及后台处理,不能直接访问数据库中的数据, 表现逻辑则向应用提供一个统一的数据库访问接口。服务器端包括事务逻辑和数据访 问,事务逻辑主要完成数据的安全性及事务的完整性等管理工作,它可跨越多个服务 器协同操作,数据访问则进行实际数据库访问操作。 随着i n t e m e t 技术的发展,出现了基于h t t p 的浏览器n 务器模式,即b s 结构。 在这种结构中,i e 、n e t s c a p e 等浏览器成为轻型客户端,用户无须专门安装客户机就 能直接访问服务器。某种程度上,b s 结构是对c s 结构的一种改进,在这种结构下, 用户界面完全通过w w w 技术的浏览器实现,一部分事务逻辑在前端实现,但是主 要事务逻辑在服务器端实现。b s 结构,在当今的i n t e m e t 发展中起到了重大的推动 作用,现在很多的应用系统都是基于b s 结构的。 无论是c s 结构还是b s 结构,随着业务需求的发展,特别是分布式技术的应用, 系统面临的工作量越来越大,每天需要处理的数据量可以用海量来形容。面对如此巨 大的数据访问量,系统的设计和采用的技术就变得至关重要。本文采用两种结构的混 合思想,即三层结构设计,在客户端和服务端之间加入专门用来处理业务逻辑和事务 逻辑的中间层,使客户端和服务端变瘦,将原来的业务逻辑从客户端移到中间层统一 处理。客户端仅负责用户界面的交互,不再直接访问数据库服务器,而改为发送访问 请求至中间层,由中间层负责数据库访问并进行相应的业务逻辑处理,将结果返回给 客户端。当数据库服务器发生变化时,只需要更新中间层的业务逻辑即可,这种方法 有效的降低了客户端与服务器之间的耦合度,将业务逻辑集中处理,在扩展性、安全 性、易维护性方面有了极大的提高。 第一章绪论基于池化技术的分布式数据缓存模型研究与实现 实际应用中,中间层结构设计有所体现,比如社区中b b s 、b l o g 的日访问请求 很多,但其中读多写少,平均只有2 0 的操作是写入或更新,而8 0 的操作是读取 内容相同或者相似的一些数据1 2 。中间层需要处理这些业务逻辑,如果一味的让中间 层不停的处理大量相同的任务,势必会降低中间层处理重要业务的能力,随着访问量 加大,肯定会减缓处理速度,影响系统的正常运行。 这其中有几个特点,一是业务访问量大,需要中间层来应对不同的业务需求,比 如浏览的需求,不需要太频繁的访问数据库,而搜索查询的需求,需要访问数据库, 且有可能是复杂的选择查询;二是访问的信息大多都是曾经刚访问不久的相同数据, 比如访问了某版区的一个页面的帖子,极有可能接着访问同一个页面的下一个帖子。 要解决好这两个问题,一是要提升用户并发访问的性能,可以使用池化思想,利用多 线程技术的线程池,一部分线程用来处理业务请求,当需要连接数据库时,再利用一 部分线程去创建数据库连接池。二是要提高数据访问效率,可以利用中间层的数据缓 存技术,为了更方便的管理数据,使用分布式解决方案,以便以后更好的移植和扩展。 1 2 国内外研究现状 以往的研究侧重于数据访问中间层整体架构的设计、多数据源的集成等问题,对 于处理业务的性能关注较少,而在架构思想相对成熟的今天,随着数据量与并发访问 量的激增,系统的处理能力和访问效率成为制约整个系统的瓶颈。其中并发访问的处 理效率、数据访问响应速度和缓存命中率等问题更为突出。 1 2 1 池化技术研究现状 国内外现在对池化技术的研究大多注重在动态性上,较早出现的静态池随着技术 的发展,在使用过程中暴露出了一些问题,主要是不能根据具体应用需求动态调整, 所以,基于反馈、自适应、自优化或代理管理策略的动态线程池和连接池技术成为当 今研究的热点。 在以往的服务器端程序开发中,为了解决在大量短小并发任务情况下系统性能问 题,线程池技术已得到广泛应用。i b mw e b s p h e r e 等大型应用服务器使用了线程池技 术,文献【3 】在其自主研发的应用服务器s t a r c c m 中也使用了线程池技术。近些年来, 线程池的研究向自适应管理方向发展,文献 4 】提出了一种基于反馈技术的自适应管 2 基于池化技术的分布式数据缓存模型研究与实现第一章绪论 理框架f f a t p m ,在运行过程中不断学习和提取新的知识,通过动态在线调整使线程 池规模保持在与应用需求和计算资源相适应的合理水平;文献 5 】研究了基于自适应 的动态线程调用方法用于同时并发的多线程s m t 体系结构;文献【6 提出了动态线程 池模型用来解决多线程服务器受到并发请求的问题。文献【7 】实现了分布式线程池的 设计,专门用来解决分布式事务处理问题。 传统的线程池在有些场合不能得到有效利用,比如在现有社区论坛的开发中,缺 少对并发访问时的有效控制及对系统中线程运行的控制,对超出访问量的用户访问将 等待很长时间甚至失败。本文采用多线程技术,使用线程池设计来减小线程创建和消 亡的系统开销。在大量并发访问的情况下,使用并发访问控制技术,通过阻塞队列对 任务进行排队,利用线程池大小动态调整算法优化线程使用,保障中间层业务处理的 顺利,避免出现负载过大而导致系统性能急剧下降甚至失去响应。 数据库连接池设计是提高数据库访问效率的一个有效技术,在系统启动时就创建 一定数量的数据库连接,方便用户直接请求连接数据库,从而降低了每一个数据访问 的数据库连接开销,对应用服务器和数据库服务器都减轻了负担。目前主流的j 2 e e 服务器大多使用了数据库连接池技术,如w e b l o g i e 、j b o s s 、t o m c a t 等。近些年来, 对数据库连接池技术的研究侧重于连接池结构的设计与实现,文献【8 】【9 】对基于数据 库连接池的自适应管理策略进行了研究,优化了动态调整策略;文献 1 0 提出了基于 “步增量”技术的连接池,当连接池中没有空闲连接时,增加一定数量的连接;文献 1 1 】提出了基于语句分享技术的连接池,实现了基于语句为单位的细粒度连接调度管 理。最近,文献 1 2 】在r f i d 中间件中使用了具有负载平衡功能的连接池。 传统的数据库连接池技术,在功能使用上各有不同,虽然可以较好的实现池化连 接的思想,但并不符合标准的j d b c 规范,且大多是采用各自的设计方案和优化策略, 选择上与应用服务器的耦合度较大。本文在选择适合开发框架的数据库连接池基础 上,优化了并发连接时不同的复用连接策略,提高了连接池的动态并发处理性能。 1 2 2 分布式数据缓存技术研究现状 对于某种具体的数据缓存技术,不仅需要考虑缓存系统的组织模式,即缓存模型, 还需考虑缓存的对象结构、缓存对象的替换算法、缓存区的管理机制、缓存区容量大 小和缓存一致性维护等有关问题【1 3 1 。这些问题的成功解决会极大地提高缓存命中率。 第一章绪论基于池化技术的分布式数据缓存模型研究与实现 当今研究的数据缓存大概可以分为以下几种【1 4 】:( 1 ) 表缓存,如o r a c l e 9 ia s 提供 的数据库表缓存,i b m 的d b c a c h e 也提供了表缓存的功能,将频繁访问的表缓存在 中间层,使得查询处理更快,减轻了后端数据库的负载。( 2 ) 对象缓存,通过将对象 映射到关系数据库的方式进行存储与查询,通常一个缓存对象就对应关系数据库表中 的一行元组。( 3 ) 结果集查询,基于标准s q l 查询语句,将查询语句与查询结果同时 缓存,这种结果集缓存在数据量较小的情况下可以很好的执行。( 4 ) 其它缓存技术, 比如内存数据库技术,在内存中设计小型内存数据库管理系统以提高访问效率,可以 减少同后台数据库的数据传输量。 数据缓存技术在国内外的研究颇多,目前研究的内容偏重于分布式数据缓存技 术,如合作数据缓存技术,虚拟数据缓存系统、网络共享c a c h e 技术、自组织c a c h e 技术等。国内有华南理工大学提出的一种在分布信息访问环境下提高数据利用率和减 少通信流量的分布缓存体系【u 】,也有文献提出基于结点的分布式合作缓存管理f l q ; 国外的c o l o r a d o 大学和d u k e 大学对分布式缓存做过一些项目的研究【1 7 】,分别提出了 一种级联的树形结构和一种基于中心地图的协作缓存方案,亚利桑那州立大学在 m a n e t 中使用分布式数据缓存协议,实现了合作缓存管理u 引。 这些传统的数据缓存技术,对数据库的依赖性很强,同时与数据库耦合性较大, 在可移植性和可扩展性上有待提高。本文设计的数据缓存模型,采用与传统数据缓存 不同的缓存策略,不仅仅缓存数据库对象,同时缓存数据库记录的列表和长度,衍变 经典替换算法,改进缓存一致性维护策略,同步协调分布式数据访问。 1 3 本文的研究意义与主要工作 传统的研究方法对应用系统起到了很好的优化作用,但也存在很多不尽如人意的 地方。首先在池化技术上,大多数研究的线程池和连接池都停留在静态技术上,随应 用环境变化而动态调整的能力较差,且跟应用服务器和数据库服务器耦合性较大。而 数据缓存方面,第一,从编程技巧和d b m s 角度研究的较多,而侧重整体体系结构 研究的较少;第二,在研究数据缓存技术问题时,因涉及到网络性能、服务器性能、 数据库性能等多领域,对一些细节无从下手,导致人们趋向于其它方面的研究;第三, 即使使用了一些数据缓存技术,但由于可操作性不强等原因也不愿继续深入研究。这 就造成了许多应用系统数据利用率不高,数据访问速度有较大延迟。 4 基于池化技术的分布式数据缓存模型研究与实现 第一章绪论 本文将池化技术和数据缓存技术结合起来建立模型,并实现分布式解决方案,应 用在b s 模式的w e b 系统中,如社区的b b s 、博客、新闻系统、网上商店等,也可 以用在基于高速局域网的传统数据检索系统,比如图书书目管理、医院病案管理、设 备台帐管理等方面的管理信息系统。 本文主要完成以下几个方面的工作: 1 研究现有线程池和数据连接池技术,利用j d k 5 0 和j d b c 3 0 规范设计符合 本文模型的线程池和连接池。 2 研究现有数据缓存技术和分布式缓存模式,设计分布式数据缓存模型。 3 结合池化技术和数据缓存技术建立分布式池化数据缓存模型d p d c m ,分析 模型中各项技术的理论可行性,实现并应用到社区论坛开发中。 4 对分布式池化数据缓存模型进行性能测试与分析。 1 4 本文的组织结构 本文共包括六章,各章的主要内容如下: 第一章为绪论。主要介绍论文的研究背景,指明现有线程池、数据库连接池和数 据缓存技术的研究现状,指出传统技术的不足性和局限性,说明分布式池化数据缓存 模型的必要性和研究意义,最后介绍本文的主要工作及组织结构。 第二章对池化技术中多线程技术的线程池和数据库连接池技术等相关概念及技 术进行介绍,接着介绍数据缓存技术,特别是分布式缓存模式的知识。 第三章建立分布式池化数据缓存模型,采用池化设计和数据缓存技术对数据访问 中间层进行设计,详细介绍线程池、数据连接池和数据缓存策略的优化设计过程,对 模型中的技术进行理论分析。 第四章将分布式池化数据缓存模型应用到社区论坛的开发设计中。介绍论坛的主 要模块设计,并介绍具体池化技术和数据缓存在开发中的实现与应用。 第五章主要对系统模型进行性能测试和分析,测试使用池化技术和分布式数据缓 存技术前后的性能,通过性能对比分析得出测试结果,并对优化方案作出评估。 第六章总结与展望。总结本文所做的主要工作,并讨论系统需要进一步完善的地 方及进一步研究工作的方向。 5 第二章池化技术和数据缓存概述基于池化技术的分布式数据缓存模型研究与实现 第二章池化技术和数据缓存概述 2 1 池化资源技术 在大型软件设计中,存在着一些宝贵的资源,如内存、线程、数据库连接、网络 连接等,这些资源的使用在时间或空间上极大地影响着软件的使用效率,使得资源的 可用性与客户端应用程序的性能和用户的满意程度直接相关。 池化资源技术【1 9 】的基本思路是事先建立一定数量的对象并保存在内存中,当调用 者申请对象时从池中取出一个空闲对象,使用后立即归还,供其它调用者重复使用, 这样可以减少频繁创建、销毁对象所造成的开销。因为客户端应用程序不需要重复地 建立和销毁对象,使用池化资源技术会显著提高连接性能。特别是对于占用资源比较 严重的对象,如数据库连接或网络连接,池化资源机制可以有效减少建立对象所需的 时间。除了可以提高连接性能以外,使用池化资源技术还可以更有效地管理资源,池 管理器可以根据需要动态调整池中的对象数量,使系统资源得到充分利用。通过对有 限资源进行进一步的控制和管理,对象池可以使系统更容易扩展,当用户数量增加时 只需要简单地增加池中的可用对象数量。 本文只针对两类资源进行池化设计:线程和数据库连接,这里的池化技术分为线 程池技术和数据库连接池技术。利用多线程和并发控制技术设计线程池,能提高线程 的使用率,同时减轻应用服务器的负载压力。利用已经建立好的数据库连接设计成数 据库连接池,使用连接复用策略,可以节省数据库建立和销毁连接的资源,减轻数据 库服务器的压力。 2 2 线程池技术 2 2 1 线程池机制与模式 现在的分布式应用一般都由多种服务器提供支持,这些服务器通常都会面临来自 远程的数量众多、任务短小的请求。一般用单个线程来处理所有请求或对每一个请求 都生成一个新线程进行处理,但这两种模式都不理想,会降低系统的响应速度和性能。 线程池就是事先创建好一些线程,放入线程池中并采用一定的方法来管理这些线 6 基于池化技术的分布式数据缓存模型研究与实现第二章池化技术和数据缓存概述 程。当有一个客户端的请求到来时,由系统从线程池中取一个空闲的线程来为这个客 户服务,完成任务后该线程不退出,而是进入线程池,准备再次服务。采用线程池后, 在减少创建线程和销毁线程时间开销的同时,还提高了对客户端的响应速度。 最近研究的线程池实现模式有两种:半异步半同步( h a l f - s y n c h a l f - a s y n ) 模式和 领导者跟随者( l e a d e r f o l l o w e r ) 莫式【2 0 1 。 ( 1 ) 半同步半异步模型 在这种模型中,一个侦听线程负责接受请求,并在某个队列中缓冲它们。另外一 组工作者线程负责处理请求,因此接受请求的线程并不是处理请求的线程。 在这种模型中,线程池划分成三个不同的层次:异步层,负责接受异步请求;排 队层,负责对请求进行缓冲;同步层,含有多个阻塞在排队层上的控制线程。 一般的半同步半异步模型会有一个m a n a g e r 线程用于请求消息转发和调度,和 一组w o r k e r 线程构成线程池,并由m a n a g e r 来统一调度。 ( 2 ) 领导者跟随者模型 在这种模型中,有一个线程是领导者,其余线程是线程中的跟随者。当请求到达 时,领导者首先获取请求,并在跟随者中选取一个作为新的领导者,然后继续处理请 求。因此接受请求的线程就是处理请求的线程。 在l f 线程池中,线程可处在3 种线程状态之一:l e a d e r 、f o l l o w e r 或p r o c e s s o r 。 处于l e a d e r 状态的线程负责监听网络端口,当有消息到达时,该线程负责消息分离, 并从处于f o l l o w e r 状态中的线程中按照某种机制如f i f o 或基于优先级等选出一个来 当新的l e a d e r ,然后将自己设置为p r o c e s s o r 状态去分配和处理该事件。处理完毕后线 程将自身的状态设置为f o l l o w e r 状态去等待重新成为l e a d e r 。在整个线程池中同一时 刻只有一个线程可以处于l e a d e r 状态,这保证了同一事件不会被多个线程重复处理。 l f 模式比h h 模式有较大的性能优势,为了更好的与多线程的线程池技术结合, 本文设计的并发控制采用对等( p e e r ) 结构,线程池采用领导者足l i i 随者模式 ( l e a d e r f o l l o w e r ) 来实现p e e r 结构。 2 2 2 多线程与并发控制技术 多线程程序设计是指在单个程序中使用多个线程,这些线程在同一时间并发运 行,执行不同的任务。使用多线程设计模式可以提高程序的实时响应能力、改进程序 设计结构、更有效的发挥处理器的功能、减少对系统资源的频繁调度和切换。 7 第二章池化技术和数据缓存概述基于池化技术的分布式数据缓存模型研究与实现 多线程设计的目的是为了充分利用系统的运算能力,减少进程的等待时间。但是 如果对线程不加控制,那么很多线程的不断创建和销毁也会占据大量的系统性能开 销,线程池可以较好的解决这个问题。线程池中的线程在初始化时被创建,然后被置 于阻塞状态,这时虽不消耗时间但占用一定的内存空间。当有任务到达需要运行时, 则给任务分配一个空闲线程,将任务传入线程中运行。运行结束后,线程返回线程池 中,重新成为空闲线程,并进入阻塞状态。这种方式在大量用户访问时,可以较好的 节省线程创建和销毁的时间开销。 多个线程的执行是并发的,也就是在逻辑上“同时而不管是否是物理上的“同 时 。多个线程访问共享资源时,通过锁定、解锁操作来协调正确的并发操作。o b j e c t 类的w a i t o 、n o t i f y o 、n o t i f y a n o 方法可以实现控制由一个线程到另一个线程的转移, 关键字s y n c h r o n i z e d 机制实施线程的同步【2 1 1 。 多线程的并发在线程执行任务时经常发生,对多线程的并发控制就变得至关重 要,高效的并发控制策略可以提高系统的并行处理能力、改善交互响应时间。目前构 建并发系统的主要技术是基于线程的并发控制技术,包括同步多线程技术和异步多线 程技术。基于线程的并发控制利用多个线程可以并发执行的特点将计算与i o 操作重 叠起来,从而提高系统的并发处理能力。 1 基于同步多线程的并发结构 基于同步多线程的并发结构主要有主从( b o s s w o r k e r ) 、对等( p e e r ) 和流水线 ( p i p e l i n e ) 3 种【2 2 】,如图2 1 所示。 1 1 f r e q u e s t sr e q u e s t sr e q u e s t s b o s s w o r k e rp e e r p i p e l i n e 图2 1 基于线程的同步并发结构 主从结构中线程分成b o s s 线程和w o r k e r 线程两类。b o s s 线程通常只有一个,负 责接收用户请求,然后,将用户请求放入到一个消息队列中,而w o r k e r 线程依次处 理消息队列上的请求。通常采用半异步半同步( h a l f - s y n c h a l f - a s y n c ) 模式来实现。 基于池化技术的分布式数据缓存模型研究与实现第二章池化技术和数据缓存概述 对等结构中所有的线程具有平等的地位,都可以接收用户请求,而且在接收到请 求后并不转发给其它线程而是直接处理。对等结构必须与线程池技术结合使用,但是, 为了保证一个请求不会被多个线程同时处理,必须限定线程池中同一时刻只有一个线 程在监听接收端口,线程间不需要消息队列来传递数据。通常采用领导者跟随者 ( l e a d e r f o l l o w e r ) 模式来实现p e e r 结构。 在主从和对等结构中,一个请求的处理始终都在一个线程中完成。如果请求的处 理需要频繁地等待i o 操作,那么上述结构会造成线程池中线程被耗尽,出现大量请 求被缓存在消息队列中而c p u 等系统资源却被闲置的情况。而用流水线结构就可以 解决此类问题。 流水线结构中一个请求的处理过程被分成几个不同的阶段,前一阶段的输出作为 后一阶段的输入。每一阶段的处理由一个单独的线程或者线程池来执行,相邻阶段间 则使用消息队列来传递数据和缓存消息。与对等结构相比,流水线结构中一个线程所 做的工作更加单一化,进一步增加了系统中缓存的命中率,有利于提高系统性能。 2 基于异步多线程的并发结构 此结构中,有一个或者很少的几个线程在事件队列上等待来自于操作系统或者程 序本身的事件,事件处理器一般使用单独的线程来执行,处理过程中通常采用异步非 阻塞操作来提高系统并发性能。在异步多线程的并发结构中通常采用有限状态自动机 来描述请求的处理过程。每一个请求携带了自身当前的处理状态,不同状态之间的转 换通过事件来触发,事件分配器根据请求当前的状态和触发的事件来决定请求的下一 步处理操作。 2 2 3 其它注意事项 ( 1 ) 线程泄露 线程泄露是线程池应用中一个严重的问题,当任务执行完毕而线程没能返回池中 就会发生线程泄漏现象。在j a v a 中发生线程泄漏的一种常见情况是没能捕获 r u n t i m e e x c e p t i o n 或e r r o r 对象。代码设计中,对r u n t i m e e x c e p t i o n 异常的捕获便是 为了防止线程泄漏而采取的必要措施。 ( 2 ) 线程死锁 , 多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放,这种情 况下,就会发生死锁现象。因此被允许执行的线程首先必须拥有对变量或对象的排它 9 第二章池化技术和数据缓存概述基于池化技术的分布式数据缓存模型研究与实现 性的访问权。当线程访问对象时,线程会给对象加锁,而所加的锁可能导致其它也想 访问同一对象的线程被阻塞,直至第一个线程释放它加在对象上的锁。 为此,利用管理对象中的时间线程( 该线程拥有最高优先级) ,在指定的时间间隔 内查看线程池中线程的“开始使用时间”,计算出该线程的使用时间,如果该线程的 使用时间超过了设定的额定值,就释放该线程掌握的所有资源,并使它退回到起始状 态,从而使其它线程获得运行的机会。 ( 3 ) 任务过载 当工作队列中有大量排队等候执行的任务时,这些任务本身可能会消耗太多的系 统资源而引起系统资源缺乏。服务器根据系统的承载能力,限定客户并发连接的数据, 当客户并发连接的数目超过了限制值,系统的过载保护功能将在保证系统动态负载平 衡的前提下,开启c a p a c i t yc o n s t r a i n t 容量限制,服务器拒绝连接请求。这样保障了 服务端不会被资源过度消耗,达到系统服务可靠的目的。 2 2 4 线程池结构 传统的线程池设计在结构上包括4 部分,线程池管理器、工作线程、任务队列和 任务接口,如图2 2 所示。 图2 - 2 线程池模型结构 ( 1 ) 线程池管理器t h r e a d p o o l m a n a g e r 线程池管理类是线程池结构中的核心类,用于创建并维护线程池,并监控线程泄 漏现象。利用j d k l 5 本身的构造函数t h r e a d p o o l e x e c u t o r o 进行设计。 t h r e a d p o o l e x e c u t o r ( i n te o r e p o o l s i z e ,i n tm a x i m u m p o o l s i z e , l o n gk e e p a l i v e t i m e ,t i m e u n i tu n i t , b l o c k i n g q u e u e w o r k q u e u e , r e j e c t e d e x e c u t i o n h a n d l e rh a n d l e r ) 1 0 基于池化技术的分布式数据缓存模型研究与实现第二章池化技术和数据缓存概述 参数说明如下: c o r e p o o l s i z e :线程池池中所保存的线程数量,包括空闲线程 m a x i m u m p o o l s i z e :线程池维护线程的最大数量 k e e p a l i v e t i m e :线程池维护线程所允许的空闲时间 u n i t :线程池维护线程所允许的空闲时间的单位 w o r k q u e u e :线程池所使用的缓冲队列 h a n d l e r :线程池对拒绝任务的处理策略 正常情况下,如果运行的线程少于c o r e p o o l s i z e ,则e x e c u t o r 始终首选添加新的 线程,而不进行排队。如果运行的线程等于或多于c o r e p o o l s i z e ,则e x e c u t o r 始终首 选将请求加入队列,而不添加新的线程。如果无法将请求加入队列,则创建新的线程, 除非创建此线程超出m a x i m u m p o o l s i z e ,在这种情况下,任务将被拒绝。 ( 2 ) 3 - 作线程w o r k t h r e a d 可以选择实现r u n n a b l e 接口或者从类t h r e a d 中派生。r u n n a b l e 接口为非t h r e a d 子类的类提供了一种激活方式。通过实例化某个t h r e a d 实例并将自身作为运行目标, 就可以运行实现r u n n b a l e 的类而无需创建t h r e a d 的子类。 ( 3 ) 任务队列t a s k q u e u e 执行前用于保持任务的队列。此队列仅保持e x e c u t e 方法提交的r u n n a b l e 任务。 所有任务队列都可用于传输和保持提交的任务。 ( 4 ) 任务接口t a s k 每个工作线程通过该接口执行指定的任务。根据任务性质的不同,创建不同的任 务接口,并放入不同工作线程进行处理。 2 3 连接池技术 2 3 1 连接池机制 应用程序访问数据库的基本步骤是:在主程序中通过建立数据库连接,获得连接 后进行操作,断开数据库连接。而数据库连接是一个比较耗时的操作,如果中间层需 要多次查询数据库,每次数据库访问都需要进行一次数据库连接操作,那消耗在数据 库连接的时间将是不可忽略的影响系统性能的重要因素。 数据库连接池是将一定数量的数据库连接作为对象存储在v e c t o r 、s t a c k 等对象 第二章池化技术和数据缓存概述基于池化技术的分布式数据缓存模型研究与实现 中,形成一个储存数据库连接的容器,也就是连接对象的集合体。连接池对j d b c 中 的原始连接进行了封装,隔离了应用本身的处理逻辑和具体数据库访问逻辑,使应用 本身的复用成为可能。内部提供一套管理机制控制数据库连接的建立、分配、断开等 操作。预先建立的数据库连接采用复用连接策略,在客户请求时反复应用它们。 在引入了连接池以后,绝大部分访问数据库的请求并不需要新建连接,只需到连 接池中取出一个空闲连接就可以了。一般情况下,j a v a 中通过连接池访问数据库需 要以下四个步骤:获得对连接池的唯一实例的引用;从连接池中获得一个连接对 象;使用连接对象访问数据库;将连接对象放回到连接池。由此可知:连接池能 保证数据库连接的有效复用,避免频繁地建
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工业领域绿色能源技术应用
- 工业设计在产品创新中的作用与价值研究
- 工作中的情绪管理与压力缓解
- 工业设计与产品创新的策略研究
- 工作效率提升工具及方法研究
- 工作环境优化对员工满意度的影响
- 工程塑料在汽车领域的应用
- 工厂厂区绿化规划
- 工程机械动载荷下的结构强度分析
- 工程机械的维护与修理技术培训
- 苏科版初中物理知识点总结(含所有公式,绝对全~~~~)
- 《国际私法》教学全套课件
- 基建项目建设综合管理信息系统建设方案
- 一年级下册音乐教案 (简谱) (演唱)同坐小竹排(7) 湘艺版
- 砂石料加工厂劳务外包服务采购项目
- 列车网络控制技术-复习打印版
- 福建高考名著《红楼梦》填空题+答案
- 商标法期末复习
- 材料力学计算试题(库)完整
- 投资控股集团有限公司安全生产责任制暂行办法
- NGW型行星齿轮传动系统的优化设计
评论
0/150
提交评论