完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
基于Java的分布式缓存优化在网络管理系统中的应用 讨论建立在JMX管理框架上的网络性能管理系统的优化方案,利用JMX体系结构的可扩展特性,在系统的服务器端嵌入了分布式缓存系统对服务器端的缓存进行高效分布式的管理,提高了原系统的稳定性与运行效率。 关键词: 分布式缓存系统 Java高速缓存系统 磁盘索引辅助 随着计算机技术的不断发展,产生了一种新的计算结构——分布式计算模式。基于网络的各种应用及互联网用户数量的迅猛增加,海量数据通过网络进行传递,其对带宽需求的增加速度远远超过网络基础设施建设的速度,从而导致服务器严重过载,骨干链路拥塞。要解决此问题,除了要提升服务器的硬件档次、提高网络带宽外,对网管服务器端的缓存进行高效的使用和管理也是非常重要的。本文讨论了一种采用Java实现的分布式缓存系统来优化网管系统的设计方案。该分布式缓存系统能有效缩减网管系统服务器端程序所使用的缓存空间,合理调配服务器间的缓存与主存,以平衡负载,提高设备的利用率并改善网络性能。 1 基于Java的分布式缓存机制 1.1 分布式缓存机制 目前,许多系统均采用基于网络的C/S或B/S结构。无论是哪种结构,数据处理的大部分或全部工作都在服务器端进行,这对服务器进行高速数据处理的能力和系统的整体运行性能都提出了更高的要求。单个节点的内存是有限的,与集中式的存储系统相比,分布式存储系统在可扩展性和性价比上有很大的优势,将其应用于系统的服务器端能有效地优化系统整体性能。所有网管服务器的存储管理采用一致的分发策略和管理机制,服务器之间相互协作,构成了一个大的分布式缓存系统。分布式缓存系统将单个节点的内存分为若干区域,某些区域仅保存本地缓存移出的数据,这些区域有固定的大小,由本地服务器来设定。另一些区域则用作保存远程节点的数据,这些区域是该节点总内存除去本地数据内存后剩余的部分。当某内存域已写满数据而新的数据又要求写入时,分布式缓存系统将按照最近最少使用(Least Recently Used,LRU)策略把旧的数据移出内存域,然后写入新的数据。移出内存域的数据可以保存在本地磁盘文件中,也可以保存在远程节点内存域中。因此数据将分布在各个节点的内存或磁盘中,并在每个节点都有一张数据与存储位置的映射表以便查找数据。下面以Java高速缓存系统(Java Caching System,JCS)作为分布式缓存系统的一个具体实现来详细介绍分布式缓存系统的工作原理。 1.2 Java高速缓存系统工作原理 JCS实现了对缓存移出数据的3种处理方法:内存域保存、磁盘索引保存和远程保存。每种处理方法都需要系统设计人员在配置文件中进行配置,必须为特定的内存域命名,设定区域大小,选择本地文件保存的路径,设定远程缓存的远程地址等。因为缓存的容量有限,所以缓存中的大部分数据必须进行内存域保存,数据只有保存在内存中,才能最快地读入缓存进行处理。当数据超过了缓存能保存的数据量时,将根据缓存系统提供的内存域入口保存到指定内存域中。随着内存域中的数据元素累积并超过了内存域的设定值时,将依据先进先出的原则把超出的数据保存到本地磁盘索引文件或远程内存中,为了减轻系统内存的负担,内存域不宜设置太大。 磁盘索引辅助缓存是JCS的一个缓存辅助的功能。它把从内存移出的数据保存在文件中,提供了内存以外的第二种保存数据的方式,从而减轻了缓存施加于内存的负担。系统启动后,自动在服务器的指定目录中生成2个文件:data类型文件,用于保存数据项;key类型文件,用于保存数据项索引。JCS将移出了内存的数据项放入data类型文件中,同时,key类型文件记录下每个数据项在data类型文件中的位置。data类型文件的开始部分标识着文件的大小,key类型文件的开始部分标识着保存在文件中的所有数据项位置的索引。这2个文件的开始部分信息将保存在内存中,使得检索某个数据项就像查询地图一样方便快捷。虽然2个文件的开始部分都将占用内存,但根据其大小可知,50000个磁盘文件的开始部分总共只需1MB的内存,因此磁盘索引辅助缓存方式有利于优化系统性能。 远程辅助缓存也是JCS的一种缓存辅助的方式。它采用可靠性高的RMI结构为多层系统提供连贯性缓存。同一台计算机上的多个客户端可以使用一个监听端口连接远程缓存服务器并接收服务器发出的更新回叫信号,这样可以减少连接数量。各个客户端在缓存服务器上分别注册以作区分,避免了未被使用的远程某内存域做不必要的数据更新。当客户端不能正常连接远程服务器或传输过程中出现错误时,客户端将按设定好的次数重连服务器。如果仍然无法正常连接,则进入备用恢复模式,即客户端将按顺序依次连接已设定好的备用服务器并在服务器上注册。当连接上某个备用服务器后,客户端将备用服务器上的更新信息广播给所有相关的缓存,与此同时,客户端仍会定期地重连主缓存服务器。如果没有设定备用服务器,客户端就会进入异常模式,在此模式中,客户端将不断地重连主服务器,数据项被暂时保存在内存中。一般情况下,远程的更新信息是非常轻量的,网络中的服务器可使用的内存空间可以按照本地的运算规则来调整大小,这远比按照系统预先设定的内存使用模式来使用内存空间的方式灵活,并且充分利用了网络中的资源来平衡了负载。JCS的整体结构图如图1所示。 分布式缓存系统提供了一种管理服务器端缓存中的动态数据的方法。对于客户端重复调用的数据,可将其保存在缓存中,定期进行更新,这样比不断地连接数据库进行数据更新更为有效。 2 网络性能管理系统及其优化 网络性能管理系统充分利用Java分布式、健壮性、安全性、体系结构中立、可移植、高性能、多线程和动态等特点,实现系统与硬件和操作系统的平台无关性,方便进行系统分布和移植扩展。系统核心部分的Java管理扩展(Java Management Extensions,JMX)服务器实现数据的处理功能。它由数据采集、数据分析、数据存取、告警控制和接口5个模块组成,将这些重要的处理功能封装在Mbean中,并在JMX服务器上注册,供客户端的应用程序远程调用。JMX服务器将处理后的数据按一定策略保存到数据库服务器中,为JMX服务器提供可靠的数据支持。客户端应用程序运行在客户机上,为网络管理人员提供图形管理界面,将从服务器上获取的数据反映在管理界面中,获取JMX服务器上的服务。 2.1 分布式缓存对网络性能管理子系统的优化 由于网管系统所监测管理的网络环境是大型高速的IP网络,所以其服务器必须能高效地处理海量级数据的采集、处理与存储,并且延时要小。从上面的模块分析可知,服务器的5大功能模块中,数据存取模块用于保存数据分析模块和告警模块处理后的实时数据,也保存部分从数据库获取的数据供告警控制和数据分析模块使用。此模块除保存数据外,也负责定期将部分实时数据放入数据库中。数据分析模块是数据存取模块的主要数据来源。它每30秒就会接收到采集模块送来的从网络中所有路由器采集得到的原始数据,再对每一个端口的原始数据进行各种分析,得出基于这个数据的几种分析结果。在测试的网络环境中,有上百台路由器,每次经数据分析模块分析出的结果数据就达5M~6MB,这些数据将全部送至数据存取模块。为了减少客户端提取实时数据的延时,存取模块将数据保存在内存中,直到数据不再用于实时处理,即超出了保存的期限才被放入数据库。在不使用缓存系统管理内存的数据时,数据存取模块将数据全部堆放在内存中。这样服务器的内存大小就决定了数据的保存期限。当系统设定的保存期限大于内存最大的保存期限时,就会导致内存溢出。为了保证系统的运行效率与稳定性不受影响,引入分布式缓存系统动态地管理缓存及内存,将实时的或客户端经常调用的数据分散保存在缓存、内存域、文件或远程服务器中,既减少了服务器与数据库的连接损耗,保证了数据的实时性,也解决了内存超负荷运行和溢出的问题。只需将原来的数据存取模块划分成二部分:数据存取模块与分布式缓存系统。划分后的数据存取模块只需负责与其他模块的数据交换功能,将数据管理功能及数据库的数据存取功能交由分布式缓存系统完成。这样既不需要大量调整原有的代码,也符合模块化的规范,对分布式缓存系统的功能调整以及自身的优化也能更方便地实现对现有网管系统的优化。优化后的网络性能监测系统的结构图如图2所示。 在实际测试环境中,对于512MB内存的JMX服务器在拥有100台路由器的网络环境下,分别对未优化与优化了的相同配置的服务器的运行状况进行比较,比较结果如表1所示。 由表1中数据可以看出,不采用分布式缓存系统管理缓存与内存时,内存负荷重,严重影响服务器的运行速度。只有采用缓存系统对缓存与内存进行优化和管理,协助数据存取模块管理实时数据与部分历史数据,才能平衡服务器间的负载,保证系统连续正常运行24×7小时。 2.2 分布式缓存优化应用的推广 分布式缓存优化首先在网络性能管理子系统中得到了应用,并证明了其对系统缓存确实起到了明显的优化作用,从而能增强系统运行的稳定性,有较好的平衡负载的作用。因此可在网管系统的各个子系统中使用分布式缓存进行优化。在拓扑管理子系统中,需要保留大量的网络设备信息及路由信息供智能发现算法使用。如果数据都保存到数据库后再从数据库进行提取,这将在对数据库的存取操作上花费大量的时间。与之相比较,将数据直接存放在内存中的方法更为快捷,所以在拓扑子系统中同样可以应用分布式缓存系统对缓存与内存中的数据进行管理及优化。在主机与网络服务管理子系统中,需要保存各网络服务器的状态监测信息与各种网络服务的进程信息及质量状态参数,其数据量随被监测网络的规模大小而变化。对于本系统运行的实测环境而言,主机与网络服务管理子系统中要监测的数据量都非常大,因此可以用分布式缓存系统对数据库存取操作进行优化,可将大量的监测数据暂时保存在内存中,并按一定的时间间隔,将内存中的数据批量存入数据库。因此延长将数据入库的时间间隔,同时,对于未入库的数据直接进行更新,而无需再从数据库中提取,这样就能减少应用服务器与数据库服务器之间的交互次数,优化系统性能。 分布式缓存系统可管理任何系统缓存中的各种数据,可减少与数据库服务器的交互。因此除了可以优化网管系统的性能外,还可优化任何基于Web应用的系统。在大多数基于Web的动态应用系统中,最主要的性能瓶颈在于从数据库提取数据的过程。因此利用分布式缓存对内存数据的管理,将被频繁访问的数据(如客户端经常调用的表态数据或对数据库查询返回的结果)放入缓存,可避免对已有内容的重复请示和传送,能使更多的Web应用减少与数据库的交互,减少网络流量,从而减少了延时,且平衡了负载。 3 结束语 高速IP网络性能管理系统建立在JMX管理架构上,利用JMX对Java软件的兼容性、可扩展性和可管理性,在对原有模块进行局部调整与切割后,代码只需做少量的改动就可将分布式缓存系统嵌入原系统中。采用Java分布式缓存系统实现了对服务器端的缓存管理的优化,大大提高了原网络性能管理系统的稳定性与运行效率。在校园宽带网测试环境中,在一百余台路由器、约1000个接口的校园网环境下,网络性能管理系统能正常运行24×7小时,网管服务器的数据处理过程没有对系统其他部分的运行产生明显影响,较好地满足了性能监测的实时性与稳定性的要求,充分证明了此分布式缓存系统确实能对网管系统缓存进行优化,并可推广到任何基于Web应用的系统。 参考文献 1 周文莉,雷振明.互联网性能监测技术.宽带世界,2002;(5) 2 Barnett S A.A Cost Compareson of Distributed and Sentralized Approaches to Video-on-demand.IEEE Journal Selected Areas on Communications,1996(14) 3 Cavaness C,Friesen G,Keeton B著,师夷工作室译.Java完全探索.北京:中国青年出版社,2001 |
|
相关推荐 |
|
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 21:01 , Processed in 0.851710 second(s), Total 44, Slave 33 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (威廉希尔官方网站 图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号