OnceDeep数据交换服务器集群系统的设计与实现.docx_第1页
OnceDeep数据交换服务器集群系统的设计与实现.docx_第2页
OnceDeep数据交换服务器集群系统的设计与实现.docx_第3页
OnceDeep数据交换服务器集群系统的设计与实现.docx_第4页
OnceDeep数据交换服务器集群系统的设计与实现.docx_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机应用与软件Computer Applications and SoftwareOnceDeep 数据交换服务器集群系统的设计与实现肖彦 叶丹 虞海江(中国科学院软件研究所软件工程技术研究开发中心 北京 100190)摘 要 数据交换中一般存在数据中心。中心处理的并发任务量高,对服务器性能和可靠性要求高,往往会成为数据交换的瓶 颈。为了提高数据交换平台的数据中心的性能、可靠性,并降低管理成本,本文设计和实现了 OnceDeep 数据交换服务器集群系 统。基于现有的数据交换平台 OnceDeep,使用 Shoal 集群框架实现对 OnceDeep 服务器集群的管理。本文讨论了集群环境下数据 交换流程的设计,针对数据交换任务的特点设计了基于预测的动态负载均衡算法,制定了任务失效的恢复策略。测试表明,集群 系统较现有数据交换服务器在性能上有很大提高,并具有较好的扩展能力。关键词 数据交换平台 集群 负载均衡中图分类号 TP399 文献标识码 A DOI:DESIGN AND IMPLEMENTATION OF ONCEDEEP DATA EXCHANGE SERVER CLUSTERXiao Yan Ye Dan Yu Hai-jiang(Technology Center of Software Engineering, Institute of Software, Chinese Academy of Sciences, Beijing 100190, China)Abstract There exists a center in the data exchanging process, for example, the head office of a company. The data exchange server in the center faces much pressure and could become the bottleneck of data exchanging. In order to improve the performance and reliability of server in the center, it designs and implements a OnceDeep data exchange server cluster system. The system is based on the existing data exchange platform OnceDeep, and takes the best benefits of Shoal, which is a kind of Java clustering framework. It presents the process of data exchanging in cluster, designs a load balancing algorithm based on predicting in accordance with the characteristics of data exchanging tasks, makes failure recovery mechanism for data exchanging tasks. Experiments show that the cluster perform much better than the , and it has good expansion ability.Keywords Data exchange platform cluster load balance0引言随着信息化建设的不断发展,大中型企业和机构纷纷建立 起庞大而复杂的信息系统。这些信息系统的建设通常具有阶段 性和分布性的特点,导致了“信息孤岛”的存在,降低了信息 的利用效率。为了消除信息孤岛,实现信息共享,提高对信息 资源的利用率,人们建立了数据交换平台1。数据交换平台在 科技、银行、政府、电信等领域有广泛的应用2。企业总部的数据交换中心,其数据交换服务器面临着巨大 的压力,容易成为数据交换的瓶颈,因此数据交换中心往往需 要采用高性能服务器,或部署多台数据交换服务器。OnceDeep 数据交换平台是由中国科学院软件研究所软件 工程技术研究开发中心研发的基于消息中间件的数据交换平 台。OnceDeep 为上层应用提供了数据交换、数据查询、数据 路由等服务。OnceDeep 的数据传输中间件实现了数据的加密 传输、压缩传输、数据分块传输,保证了文件传输的安全性和困难,每加入一台数据交换服务器,都要重新设定对应关系; 二是负载不均衡,可能出现某台服务器负载很高但其他服务器 负载很低的状况;三是一旦某台服务器出现故障,发送方服务 器仍会一直尝试与这台服务器建立连接发送数据,发送任务无 法自动转移到其他服务器。为了实现对数据交换中心的多台 OnceDeep 服务器的管 理,提高 OnceDeep 数据交换平台的性能和可靠性,本文设计 和实现了 OnceDeep 数据交换服务器集群系统。该集群系统能 够动态添加、删除节点;实现集群节点的负载均衡;并且对失 效的任务的进行处理。提高了数据交换中心的数据交换能力以 及可靠性,降低管理成本。1 相关工作在工业界,国内外很多厂商提出了自己的数据交换平台解 决方案。例如国外的 IBM Message Broker 和 WebSphere MQ 数 据交换平台解决方案、Chainbuilder 基于 Chainbuilder Connect单个文件的传输效率。OnceDeep 数据交换平台目前解决数据 交换中心性能瓶颈问题的方法是,在数据交换中心部署多台数 据交换服务器,人工设定每台数据交换服务器负责与哪几个数 据交换节点进行数据交换,这个方法具有很多不足:一是扩展收稿日期: 2013-05-07。国家高技术研究发展计划(2012AA011204), 国家科技支撑计划(2012BAH05F02),国家科技支撑计划(2012BAF11B04)。 肖彦,硕士研究生,主研领域:网络分布式计算与软件工程。叶丹,副研 究员。虞海江,工程师。计算机应用与软件5的数据交换平台解决方案;国内的英创思数据交换平台、中科 软数据交换平台、金蝶数据交换平台等。对于数据交换中心节 点对性能、可靠要求较高的问题,部分企业提出中心节点采用 高性能计算机、并对其进行双机热备份的解决方案,例如,IBM 和金蝶数据交换平台。学术界围绕数据交换平台的大量研究集中在平台基本框 架、安全性、数据转换、报文封装格式、路由转发等方面,对 数据交换平台的性能、可靠性、数据交换服务器集群的研究相 对较少。文献3提出根据系统硬件资源状况和任务到达情况对行数据交换任务,下文简称其为“子节点”;主控节点负责对 子节点进行监控、管理,并对客户端和其他服务器的连接请求 进行响应,下文简称其为“主节点”。子节点之间相互独立, 独立完成主节点分配的数据交换任务。图 1 所示的数据交换平台,由 N 个数据交换节点构成。其 中数据交换节点 1、数据交换节点 5 使用集群,数据交换节点 2、数据交换节点 6 等其他数据交换节点使用单机数据交换服 务器。数据交换节点 1 使用的 OnceDeep 数据交换服务器集群, 由 1 个主控节点和 3 个数据交换服务器构成。并发任务数进行控制,但只针对单台数据交换服务器上的任务 的调度,没有给出多台服务器情况下的调度策略。文献4应用数据交换 节点3数据交换 节点4数据交换节点5应用 程序负载优化划分和公平调度算法及其改进算法对数据交换任务 在多台服务器之间的调度给出了方案,但没有提供对数据交换 任务失效的处理。文献2通过一个服务中心控制服务请求方和 提供方的连接,服务中心根据当前负载和任务情况使用公平任数据交换节点2数据交换节点1应用 程序数据交换服务器集群数据交换服 务器集群务调度算法对任务进行调度,但利用 CPU 指标进行负载均衡 并不一定适用于本文的数据交换服务器。文献5提出在数据中 心使用虚拟机集群技术,但并未结合数据交换平台构建集群,应用程序数据交换服务器主控节点数据库 服务器数据交换节点6 应用程序也没有对负载均衡进行研究。构建 OnceDeep 数据交换服务器集群系统利用的集群技术 主要是负载均衡和集群框架。在负载均衡方面,负载均衡算法服务器1 服务器2 服务器3数据交换服务器一般分为静态负载均衡算法和动态负载均衡算法。静态负载均数据交换节点N其他数据交换节点衡算法(例如轮询法、优先权法)根据系统的先验知识做出决 策,运行时负载不能重新分配,其好处是易于分析和实现,但2.2 集群软件架构图 1 集群拓扑结构其不足是在进行负载均衡时没有考虑节点负载的变化情况,故 可能造成整个系统的利用率低、性能较差,可用性不高7。在开源集群框架方面,常用的有 OpenRDS,Pacemaker, OpenAIS/Corosync, Apache Helix,Shoal 等。 Shoal 是一个 基于 Java 可扩展的分布式动态集群框架,能够为构建容错、可数据交换服务器集群系统分为四层:集群基础框架层、集群管理层、OnceDeep 层、API 层,如图 2 所示。API 层位于客 户端,供使用数据交换服务器集群系统的应用程序调用。客户端靠和可用的 Java 应用程序提供了基础架构支持。Shoal 的 group 是集群节点的虚拟组合;每个 group 由 member 组成,member 分为 core member 和 spectator member ; Shoal 的 Group Management Service(GMS)通过保持跟踪集群内 member 的状态 来管理网络中的 group,协调 member 之间的合作和通信;Shoal提供信号机制,一个节点可以收到其他节点的 Signal 并进行处API层平台连 接接口平台管 理接口队列操 作接口路由管用户管理接口理接口服务器端应用层理。Shoal 由 GMS Client API 和 GMS Service Provider Interface集群管理层OnceDeep层WebService接口(SPI)组成。应用与 API 交互,API 使用 SPI 与底层的组通讯协议对话。SPI 默认使用 JXTA 提供的组服务。Shoal 框架提供了 集群基本的管理机制。节点加入、退出、集群,或出现故障时 时,主节点会收到加入、退出、故障信号。主节点和子节点可 以互相发送字符串类型数据。2 OnceDeep 数据交换服务器集群系统架构节负准失点载入效管均控恢理衡制复集群基础框架层(Shoal) 集群节点信号通信管理机制队平路用列台由户管管管管理理理理数据交换连接控制传输2.1 集群拓扑结构一个 OnceDeep 数据交换平台包含若干个数据交换节点, 一个数据交换节点由一个单机数据交换服务器,或一个数据交 换服务器集群提供数据交换服务。数据交换中心(例如总公司 的数据中心)或者不是中心但并发任务量较高的数据交换节 点,使用 OnceDeep 数据交换服务器集群,其他负载不高的数 据交换节点,使用单机 OnceDeep 数据交换服务器。一个 OnceDeep 数据交换服务器集群,由一个主控节点和 若干个数据交换服务器构成,呈星型拓扑。各个服务器负责执图 2 系统软件架构(1) 集群基础框架层采用 Shoal 框架作为集群基础框架层,提供集群最基本的 管理功能。(2) 集群管理层集群管理层,提供节点管理、负载均衡、准入控制、失效 恢复能功能。主节点定期收集子节点汇报的信息、维护节点状态信息、接受客户端和其他数据交换服务器的连接请求、使用负载均衡 模块分配任务。子节点在加入集群时向主节点发送自己的基本信息。加入 集群后,定期采集负载信息,并将这些信息上报主节点。启动子节点的数据交换服务后,该节点加入集群(Join);节 点正常运行时,呈 Normal 状态;当系统正常停止时,主节点 收到正常停止信号 Planned Shutdown;主节点接收不到子节点 心跳时,子节点呈 Failure Suspected 状态,在一段时间内恢复 心跳,则回到 Normal 状态,经过一段时间仍无心跳,则从 Failure Suspected 状态进入 Failure 状态,表示子节点异常退出集群。 节点状态转换如图 3 所示。Planned ShutdownJoinNormalFailureSuspectedFailure图 3 节点状态转换图负载均衡、准入控制、失效恢复将在下文介绍。(3) OnceDeep 层每个子节点运行 OnceDeep,独立完成数据交换任务。该 层的主体是原有的数据交换平台 OnceDeep。本文针对集群环 境下的数据交换过程的变化,加入连接控制模块。(4) API 层原有的 OnceDeep 提供 API 接口供应用层调用,实现了单 机情况下的 API 接口。本文实现了集群系统下的 API 接口,包 括与集群的通信、集群节点分配、集群异常处理等。应用层通 过统一的 API 接口,使用单机或集群服务器。2.3 数据交换过程设计如图 4 所示, APP1 和 APP2 分别是位于两个数据交换节 点的应用程序,APP1 使用数据交换平台 m,APP2 使用数据交 换平台 n。两个数据交换平台各有一个主节点 M、N 和若干个 子节点。同一个集群的子节点共用一个数据库。(1) 应用向数据交换服务器发送数据APP1 将数据发送到服务器的过程:1)APP1 使用与 M 的连接,向 M 发送数据发送请求。2)M 运行负载均衡算法,计算出合适的节点,例如 M3。3)M 将 M3 的信息发送给 APP1。4)APP1 与 M3 建立连接,向 M3 发送数据文件。(2) 数据交换服务器向目标服务器发送数据服务器 M3 将数据发送到目的服务器的过程:1)M3 与 n 的主节点 N 建立连接,发送数据发送请求。2)N 根据消请求信息,用负载均衡器选择合适的子节点, 例如 N3。3)N 将 N3 的信息发送给 M3。4)M3 与 N3 建立连接,向 N3 发送数据。5)N3 定期将接收完成信息汇报给主节点 N。 (3) 应用从服务器获取数据APP2 获取消息 ,可以通过获取最新消息或者根据消息 ID获取消息的方式。APP2 使用消息 ID 从服务器获取数据的过程:1)APP2 使用与 N 的连接,向 N 发送数据获取请求。2)N 找到消息所在的子节点信息,例如 N3,发送给 APP2.3)APP3 使用与 N3 的连接,从 N3 获取数据。 集群与单机、单机与单机之间的数据交换过程与上述过程类似,而且更为简单。以 APP1 向 APP3 发送数据为例。APP1 向数据交换服务器集群发送数据的过程与上文“APP1 将数据 发送到服务器的过程”相同。集群子节点 M3 向单机数据交换 服务器发送数据的过程如下:1)M3 与单机数据交换服务器建立连接,发数据发送请求。2)单机数据交换服务器将本机信息发送给 M3。3)M3 直接向数据交换服务器发送数据。APP3 从单机数据交换服务器获取数据时,直接使用与单 机数据交换服务器的连接,获取数据即可。3 集群负载均衡3.1 负载均衡算法APP1客户端APIAPP2客户端API本文采用基于负载预测的动态负载均衡算法。设一个集群内有一个主节点 M,n 个子节点S1,S2,Sn,节点 Si 的内存总 大小为 MEM 兆,CPU 个数 CN ,带宽为 BW 。所有节点的内存314123iiinn数据交换服务器集群系统2数据交换服务器集群系统(2)总大小 MTotal = MEMii =1n,CPU 总个数 CTotal = CNii =1,总带主节点M(1)主节点N宽 BTotal = BWii =1。节点 Si 某时刻的内存使用率为 MU i ,CPU(3)MEMCNBW子节点子节点子节点子节点子节点子节点使用率 CU 。设 M =,C =MTotaliCTotal, B =。iBTotaliiiiiM1M2M3N1(4)N2N3计算某时刻节点 Si 的处理能力的公式为:单机交换服Pi = a M i (1 - MU i ) + b Ci (1 - CU i ) + c Bi(1)务器服务器APP3客户端API图 4 应用之间、集群之间数据交换流程其中, a 、 b 、 c 为权值,根据数据交换任务占用内存、带宽高,而对 CPU 占用相对少的特点,将 a 、 b 、 c 设为 10, 1,5。 M i 、 C i 、 Bi 越大,说明该节点较其他节点性能越强; (1 - MU i ) 、 (1 - CU i ) 越大,说明系统的可用资源比重越高。M i (1 - MU i )、 Ci (1 - CU i )越高,说明系统当前的处理能力 越强。为防止在一段时间内,集群中某个子节点的性能一直较其 他节点高,导致其他节点空闲的情况,使用概率区间选择子节点8。计算节点 Si 被选择的概率 f 的公式为:MEM (t) = MEM (t ) + T PerSend + T Per Re cv + T PutGetMaxiPf i (2)ii 0123(3)0i = m,f = 0Pjt 时刻 CPU 使用率、网速等视为与 t0 时刻相等。j = 1i -1i -14任务失效处理节点 Si 的概率区间为(fk ,fk + fi 。k = 0k = 0最后随机生成(0,1之间的小数,根据该数落在哪个节点 的概率空间,选择执行任务的节点。i为防止系统超载崩溃,子节点的资源使用率需要得到控 制。根据对 OnceDeep 数据交换服务器的分析和测试,本文发 现内存占用是系统是否能够稳定运行的决定性指标。因此,如 果一个节点的内存使用率超过阈值,那么这个节点不可以接受 该任务。如果每一个节点内存占用都超过阈值,说明集群当前 负载过重,拒绝请求。在内存使用率不超阈值的节点中,根据 预测的负载计算 P 。上述算法如图 5 所示。t0时刻获取各节点负载信息t时刻新任务请求预测t时刻各个节点的 负载信息每个节点内存 超过阈值数据交换任务的失效主要由连接失效和节点失效引起,其 中节点失效可能引起连接失效。本文中,连接失效是指数据交 换服务器与数据交换服务器之间、客户端与数据交换服务器之 间的连接中断;节点失效是指集群节点因软硬件故障引起服务 程序停止。4.1 连接失效处理(1) 服务器之间连接失效的处理集群 m 的子节点 M3 与集群 n 的子节点 N1 在传输数据的 过程中,连接中断时,M3 如果直接重新向 n 请求新节点传数 据,需要重新传输已经传输给 N1 的数据,如果数据比较大, 这个过程会很耗时;如果 M3 一直试图与 N1 建立连接,当 N1 节点失效时,M3 的传输任务将不能完成。所以设计 M3 重新 请求节点的算法,可以加快任务的完成,并避免任务得不到完 成。重新请求连接算法的描述如下。算法 1 重新请求连接算法。ConnectionAlgrithm1. while(SendFinished is false)2. if(IsCluster is true)/如果接收方是集群3./计算与接收方断开连接后,重连接收方的最大次数4. MaxConnection = K*SentSize/Speed5. if(LostConnection is true) /当与接收方连接断开时判断如果接受新任务, 各节点内存使用是否超过阈值有节点内存不超过阈值 计算这些节点Pi值,计算fi值计算Si概率区间拒绝请求6./如果断开后重连接收方的次数小于最大重连次数7.if(ConnectionCountMaxConnection) 8.sleep(1000)9. Reconnect(Receiver)/重新与接收方连接10. ConnectionCount+/重连次数加 111.else/如果重连次数大于等于最大重连次数12.ConnectMaster()/连接接收方主节点3.2 负载预测生成(0,1间随机 数,选取节点图 5 负载均衡14. Receiver =Request()15. ConnectionCount=0/重连次数归零16. end if17. end if18.else/如果接收方不是集群19. Reconnect(Receiver)/重新连接接收方根据任务消耗资源的特点,将 OnceDeep 数据交换平台的任务分为四类:服务器向服务器发送数据、服务器从服务器接 收数据、客户端向服务器 put 或从服务器 get 数据、客户端其 他任务。每增加第一类任务,增加内存 PerSend 兆,经过分析 和测试,PerSend=1.5M;第二类任务占用内存在 1.6M2.1M 之 间波动,每增加一个接收任务,增加内存 PerRecv 兆,取 PerRecv=2.1M;应用程序和数据交换服务器一般在同一个局域 网中,网络状况相对稳定,第三类任务的数据分块传输,经测 试,内存占用最大为 PutGetMax=0.2M;第四类任务都只涉及 一次数据库查询或更新,且查询和更新操作实际消耗的是数据20. end if21. end while符号说明MaxConnection重复连接的最大次数SentSize已经发送的数据大小Speed当前传输速度ConnectionCount已经重复连接的次数K系数表 1 部分符号的说明库服务器的系统资源,执行任务的子节点占用内存资源很少, 主要与查询结果集的大小相关,所以这类任务消耗资源不进行 计算。设t0, t0+5是一个负载采集周期,t0 时刻收集到的已用内存 是,在t0,t这段时间(t0tt0+5),节点 Si 接受的前三类任务 数为 T1 、 T2 、 T3 ,则 t 时 刻 , 已 用 内 存 的 预 测 公 式 为 :SentSize/Speed 越大,说明重新分配节点需要重新传的时 间越长,所以,SentSize/Speed 越大,就尝试更多次连接。设 K=1/2,当尝试连接的时间已经达到需要重新传的文件所需传 输时间的一半时,请求主节点分配新节点。(2) 应用程序与服务器之间连接失效处理应用程序向集群发送数据时,可以由任意子节点接收数据。应用程序从集群获取数据时,只能从特定子节点获取数据。 其他类型的任务,例如查看未读消息等,一般只涉及一个数据 库查询、更新操作,可由任意节点完成。根据以上特点,对执 行各类任务时连接失效进行如下处理。应用程序向集群发送数据过程中出现连接失效,与服务器 间连接失效处理过程类似:应用程序的 API 实现中捕获异常, 重连若干次无效后,连接主节点重新分配子节点进行数据传 输;应用程序从集群获取数据的过程中出现连接失效,重连若 干次无效时,向应用程序抛出异常;应用程序执行其他任务连 接失效时,直接请求服务器分配新节点。4.2 节点失效处理集群中的节点失效分为主节点失效和子节点失效,本文只 讨论子节点失效的情况,即节点处于 Failure 状态。当节点处于 Failure Suspected 状态,主节点暂时不向此节点分配任务即可。子节点失效对数据交换任务的影响是,正在执行的任务中 断、客户端无法正确获取失效子节点上数据、数据库中存储的 失效节点上的数据的状态不正确。其中,正在执行的任务中断, 连接失效处理已经给出了解决方式,主要考虑解决后两个问 题,根据子节点是否使用共享存储设备,采取不同的处理策略。(1) 子节点没有共享存储设备的情况下处理策略1 .主节点查询数据库 MsgHanlder 表中 NODE_ID 等于失效 节点 ID 的消息。将这些消息的 MSG_STATUS 从设为“Failure+ 原状态”,其中,原状态即查询结果中的 MSG_STATUS 值。2 .当失效节点恢复正常时,将数据库 MsgHanlder 表中 NODE_ID 等于恢复节点 ID 的消息的状态,由“Failure+原状态” 更新为“原状态”。(2) 子节点有共享存储设备的情况下处理策略 可以由其他子节点接管失效子节点负责的数据。 1.主节点查询数据库 MsgHanlder 表中 NODE_ID 等于失效节点 ID 的消息。将这些消息的 MSG_STATUS 从设为“Failure+ 原状态”。2.主节点从状态为 Normal 的子节点中,随机选择一子节 点,向其发送接管命令以及失效节点的数据存储路径。3.接到命令的子节点,将失效节点路径中的文件,拷贝到 自己的数据存储路径中,每拷贝成功一个,向主节点汇报,并 将该数据从失效节点数据存储路径中删除。直到全部拷贝完 毕。集群性能测试本文使用系统能够稳定运行情况下的最高并发任务数量 MPTN(Max Parallel Task Number),和每秒钟完成任务的数目 TNPS ( Task Number Per Second ) 衡 量 性 能 。 TNPM=TNum/Time(TN 为一组并发任务的总数,Time 为这组 任务从开始到全部完成的总时间)。1) MPTN 对比 本测试中的任务指接收来自其他数据交换服务器的 2M 大小的文件。数据发送方为 4 台内存为 1G 的机器,集群有 1 个 主节点,3 个子节点,内存均为 1G,使用了重新请求连接算法。单机服务器、使用轮转法(Round Robin Scheduling)9分 配任务的集群、使用本文描述的负载均衡算法分配任务的集群 的 MPTN 对比如表 2 所示。类型单机轮转法本文算法MPTN180530大于 1000表 2 MPTN 对比3 个子节点采用轮转法集群的 MPTN 不足单机的 3 倍,是 由于集群环境下,可能出现一个接收任务尚未完成时,发送方 失去了与接收方的连接而将数据重新发送给其他接收方,但原 接收方没有及时释放资源造成的。本文算法的 MPTN 较轮转法 的 MPTN 大,而且远高于单机 MPTN 的三倍(受发送方性能 限制,4 个节点最多并发发送 1000 个文件),主要由于本文算 法规定集群子节点资源使用率达到阈值时拒绝任务,使任务延 后执行,从而保证集群的稳定运行。2) TNPS 对比本测试中,数据发送方为 4 台内存为 1G 的机器,集群有 1 个主节点,3 个子节点,主节点内存为 1G,3 个子节点中, 有 2 个子节点内存 1G,通过软件限制带宽为 50Mb/s,1 个子 节点内存 2G,网络带宽 100Mb/s。使用轮转法、本文负载均衡 算法的集群执行不同类型任务的 TNPM 对比如图 6 所示。4.主节点收到子节点拷贝成功的汇报后,将该数据对应的 MsgHanlder 表的消息的 NODE_ID 更新为接管的子节点的 ID, MSG_STATUS 从“Failure+原状态”更新为“原状态”。5.如果失效节点恢复正常,并且执行恢复命令的子节点仍 在执行拷贝操作,则向该子节点发送停止接管命令,并将数据 库 MsgHanlder 表中 NODE_ID 等于恢复节点 ID 的消息的状态, 由“Failure+原状态”更新为“原状态”。5实验及评价测试机器:9 台机器,Win7 操作系统,硬盘 50G,带宽 100Mb/s,其中 8 台 1G 内存,1 台 2G 内存。数据交换中心的服

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论