ImageVerifierCode 换一换
格式:DOC , 页数:95 ,大小:252KB ,
资源ID:7011720      下载积分:10 金币
验证码下载
登录下载
邮箱/手机:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/7011720.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  
声明  |  会员权益     获赠5币     写作写作

1、填表:    下载求助     留言反馈    退款申请
2、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
3、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
4、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
5、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【xrp****65】。
6、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
7、本文档遇到问题,请及时私信或留言给本站上传会员【xrp****65】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。

注意事项

本文(云计算的关键技术与应用实例.doc)为本站上传会员【xrp****65】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4008-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

云计算的关键技术与应用实例.doc

1、云计算的关键技术与应用实例.txt世上有三种人:一是良心被狗吃了的人,二是良心没被狗吃的人,三是良心连狗都不吃的人。丶爱情是个梦,而我却睡过了头第一篇从并行计算到云计算第1章并行计算与云计算. 21.1 并行计算到云计算的演变. 21.2 云计算需要定义吗?. 41.3 云计算是否是新瓶装旧酒. 51.4 MPI与Hadoop,不同学科学者的选择. 61.5 云计算与浏览器. 8第2章MPI并行计算环境的建立. 102.1 配置前的准备工作. 102.2 挂载NFS文件系统. 112.3 配置ssh实现MPI节点间用户的无密码访问. 122.4 安装MPICH2. 122.5 建立并行计算环境

2、时的注意事项. 14第3章并行计算时代的程序设计方法. 153.1 最简单的并行程序. 153.2 获取进程标志和机器名. 183.3 有消息传递功能的并行程序. 203.4 Monte Carlo法在并行程序设计中的应用. 233.5 并行计算中节点间的Reduce操作. 253.6 用MPI的6个基本函数实现Reduce函数功能. 283.7 计算与通信的并行. 303.8 节点间自定义复杂数据结构的传输. 343.9 MPI与MySQL数据库的结合应用. 373.10 设计MPI并行程序时的注意事项. 41第4章从MPI走向云计算. 434.1 MPI没有分布式文件系统支持. 434.2

3、 MPI无法应对节点的失效. 444.3 假如用MPI来构建云计算系统. 44第二篇云计算的关键技术第5章Map/Reduce是云计算的选择吗. 485.1 Map/Reduce跨越50年的历史. 485.2 实现Map/Reduce的C语言实例. 495.3 采用MPI实现并行化的Map/Reduce功能. 51第6章Hadoop技术. 586.1 Hadoop与MPI在数据处理上的对比. 586.2 Hadoop的主从式结构. 596.2.1 主从式文件系统HDFS. 596.2.2 主从式计算系统Map/Reduce. 606.2.3 文件分块策略分析. 616.3 Hadoop文件系统

4、HDFS的前辈GFS. 646.4 构建云文件系统需要解决的关键问题. 666.5 云计算不相信节点服务器. 676.6 揭密云计算架构下的典型服务器Google服务器. 686.6.1 Google服务器概述. 686.6.2 揭开Google服务器的神秘面纱. 696.6.3 Google服务器的配置情况. 696.6.4 Google服务器的性能评测. 73第7章Hadoop环境的建立. 757.1 Hadoop配置环境. 757.2 配置ssh实现Hadoop结点间用户的无密码访问. 767.3 JDK的安装配置. 767.4 Hadoop的安装配置. 777.5 Hadoop中的He

5、llo World. 817.6 C语言程序在Hadoop上运行. 82第8章动手做自己的云计算V0.01系统. 868.1 系统总体分析. 868.1.1 系统架构. 868.1.2 文件分布式存储流程. 888.1.3 计算与存储的整合流程. 888.2 管理节点程序设计与分析. 898.2.1 管理节点服务器程序主函数. 908.2.2 管理节点各线程函数的设计. 938.2.3 主服务器中其他函数的设计. 958.3 子节点程序分析. 988.3.1 子节点主函数. 998.3.2 子节点各线程函数设计. 1028.4 客户端API设计. 1078.4.1 客户端文件的存储. 1088

6、.4.2 客户端启动子节点计算. 1138.4.3 客户端应用的简单实例. 1148.5 客户端应用开发实例115第三篇云计算应用实例第9章基于不可信服务器节点的云计算基础架构. 1189.1 云计算基础架构的应用场景. 1189.2 云计算基础架构. 1209.3 基于单向指针目录映射的分层用户隔离. 1219.4 云文件系统的物理存储管理. 1239.5 云存储的安全级别划分. 1249.6 计算和存储的整合. 1259.7 计算和存储的迁移. 1269.8 任务的可并行性和分类分析. 1279.9 简化的服务器级粗粒度计算和存储资源分配方案. 1309.10 数据的云计算系统之旅. 13

7、3第10章云计算与智能. 13510.1 云计算的智能与人类智能的比较. 13510.2 云计算提升终端智能. 13610.3 云计算智能与Monte Carlo方法. 13810.4 云计算时代不确定性智能算法示例模拟谐振子算法. 13810.4.1 简谐振动的描述. 13910.4.2 模拟谐振子算法描述. 14110.4.3 模拟谐振子算法流程. 14410.4.4 模拟谐振子算法分析. 14610.4.5 模拟谐振子算法应用于旅行商问题. 14910.4.6 模拟谐振子算法在连续和非线性优化问题中的应用. 16110.4.7 模拟谐振子算法的隐含并行性. 16210.5 云计算中的人工

8、智能. 162第11章云计算企业之间的竞争性分析. 16411.1 云计算技术流派分析. 16411.1.1 存储型数据密集云计算平台. 16411.1.2 计算型计算密集云计算平台. 16511.1.3 综合云计算平台. 16511.2 国际云计算公司分析. 16511.2.1 云计算技术的提出者Google. 16611.2.2 “端”的霸主微软. 16611.2.3 蓝色巨人IBM的蓝云. 16711.2.4 云计算的市场先行者Amazon公司. 16811.2.5 Salesforce从SaaS走入云中. 16811.2.6 热爱白皮书的Sun. 16911.2.7 EMC云计算的核心

9、是虚拟化. 17011.2.8 渔翁得利的思科. 17011.3 国内云计算公司分析. 17111.3.1 拥有基础设施的世纪互联. 17111.3.2 阿里巴巴下决心入云. 17211.3.3 中国移动的BigCloud. 17211.3.4 国产旗帜友友云计算平台. 17311.3.5 曙光高性能与云计算. 17311.3.6 展览也要云. 17311.4 开源云计算平台分析. 17411.5 国际国内云计算平台提供商对比研究. 17511.6 产业综合分析. 17911.6.1 云计算与网络设备商的关系. 17911.6.2 云计算与移动通讯运营商的关系. 18011.6.3 云计算与服

10、务器提供商的关系. 18011.6.4 云计算与应用程序开发商的关系. 181后记:未来的计算机不确定性和隐含并行计算. 182附录:计算力的标准Linpack测试详细指南. 186参考文献196面对云计算,有的人越来越糊涂,经常听到有人用云里雾里来形容现在的云计算。云计算系统确实是一个庞大和综合的系统,即使是国际大公司也不敢贸然进军云计算领域,大量的企业不是将自己的传统技术优势称为云计算,就是雷声大雨点小的观望。一般开发者更是不适应在机群的环境下工作,所以本章将用一个简单的例子来展现云计算的基本特点和技术开发方式,我们并不保证这个系统是一个完善的系统,但它具备了云计算的一些基本特点如计算和存

11、储的整合、计算向存储的迁移、文件的分布式存储、计算的并行化等,我们对这些功能采用了最简单的实现方法以使大多数读者能从中体会到云计算技术的核心理念,所以我们命名这个系统为云计算V0.01,运行环境为Windows。8.1系统总体分析我们进行系统总体结构设计时主要着眼于云计算基本特征的实现,不考虑系统中很多细节性的要求和高级要求,并采用中等水平的读者能完成的难度设计。设计需要实现的基本功能如下。(1)向开发云应用的客户提供可以调用的API函数,利用API函数实现对云计算系统的访问。(2)实现分布式的文件存储。(3)实现计算向存储的迁移,使计算和存储在同一个节点完成,避免数据在网络中的传送。(4)向

12、用户隔离计算的并行性和存储的分布性,用户无需关心系统具体的操作过程。(5)初步实现对数据求和及求最大值的处理,演示云计算的基本特点。读者可以通过增加处理函数实现更多的计算功能。8.1.1系统架构云计算V0.01系统是一个完全模型化的实验用系统,开发和运行环境为Windows系统,通过对该系统的学习使读者对云计算技术的基本要点有一定的了解,云计算V0.01将云计算设备分为3个角色:管理节点、子节点和客户端。管理节点和子节点构成了云计算的服务器端,客户端通过对API的调用实现对云计算系统的访问,并通过API整合为不同的应用程序。为了简化系统的设计难度,我们在做云计算V0.01时限定所做的计算任务包

13、括对大数据量数组求和、求最大值等操作,读者可通过实际的系统体会存储的分布化与计算的并行化的关系,并理解计算向存储迁移的作用。云计算V0.01没有实现存储的副本策略,因此暂时不能处理节点失效的问题,这也是为了降低系统难度的需要。以下的系统架构方法仅供参考和学习,并且不代表我们赞成这一架构,不同的读者可以设计不同的系统架构。系统的整个架构如图8.1所示,这种架构方式是一个以客户端为核心的架构方法,系统中的所有操作指令均由客户端发出,管理节点不和任一子节点作数据和指令的通信,管理节点的作用主要是维护root.dat和node.dat两个系统文件。root.dat文件存储着现在系统中已注册的用户名及该

14、用户所对应的文件分块描述文件所在节点的IP地址,系统利用这一文件可实现用户的注册、认证及用户登录后获得文件分块描述文件所在节点的IP地址。node.dat文件则维护着整个云计算系统所有子节点的IP地址、端口、最大空间、剩余空间等信息,客户端通过该文件能够获得整个机群的信息,从而实现向各子节点的直接连接。客户端从管理节点获得了相关的系统信息后将根据这一信息直接向各个子节点发起连接,完成文件存储及计算的功能,这大大提高了数据传输的速率,减轻了管理节点的负荷。各用户文件的具体分块和存储方式被系统用该用户的用户名(username)作为文件名的文件分块描述文件存储于其中的一个子节点,这一子节点的IP可

15、在root.dat文件中找到。图8.1 云计算V0.01的系统结构在云计算V0.01系统中不同角色间存在两类数据的传送:一类是命令数据CMD,管理节点和子节点通过命令数据判断自己下一步所要完成的任务;一类是信息数据,这类数据是系统要完成相关任务所需要数据,如系统描述信息、文件信息等,这类数据的数据量相对较大。由于采用了计算向存储的迁移策略,系统中出现用户文件数据传输的情况很少,这大大提高了系统的运行效率。8.1.2文件分布式存储流程系统在进行文件存储时先通过客户端连接管理节点,读取root.dat文件数据,检验是否有该用户存在,并获取用户数据块文件所在节点的IP地址。通过读取node.dat文

16、件从管理节点读取子节点的IP地址的列表,根据以上信息完成对数据的分割,启动多线程函数同时连接各子节点将数据分别保存在各个节点上,最后更新username表以备访问时重新找到文件的分布情况。uesername文件将被存储于某一节点上,管理节点会根据现有username文件的分布情况向用户分配一个节点的IP地址存放username文件,文件名就是该用户的用户名,由于用户名在系统中是惟一的,所以每个用户的username也是惟一的,不会造成混乱,如图8.2所示。图8.2 文件的分布式存储流程8.1.3计算与存储的整合流程如图8.3所示,在云计算V0.01系统中,我们利用获得的用户名、文件名、数据块号

17、以及数据分块信息文件的IP地址信息,可以惟一地确定任一数据块的位置和文件名,客户端同时向各个子节点发送启动计算的命令,各节点就地读取数据块本地文件,并对其进行计算,计算完成后发送回客户端汇总得到最后的结果。图8.3 计算与存储的整合流程这一计算过程不用移动任何数据,对于数据的处理就在存储数据块的节点完成,系统根据客户端的指令,将计算迁移到节点上分布式的完成,大大提高了计算效率,避免了数据在网络中的大量流动所造成的效率下降,对于海量数据来说,这一做法的效果是相当明显的。对于不同的数据,我们可以定义不同的数据处理方法,从而扩展系统的应用领域。8.2管理节点程序设计与分析管理节点在云计算V0.01系

18、统中只与客户端进行通信,存储系统中的节点信息和用户注册信息,并不负责任务的调度工作。在管理节点我们将保存root.dat和node.dat两个系统信息文件。root.dat文件保存用户名及该用户文件系统所在的子节点的IP地址,采用userInfo数据结构来描述。客户端程序只有获得了子节点IP地址才能和该子节点直接建立连接获取子节点上的用户存储情况文件,该文件的文件名就是用户的用户名,通过这一个文件可以知道数据的具体存储情况,从而由客户端直接与数据块存储节点建立连接。node.dat文件保存了云计算系统的所有子节点的IP地址、总空间和可用空间等信息,由nodeInfo数据结构来描述。管理节点各函

19、数调用关系如图8.4所示。图8.4 管理节点函数调用结构8.2.1管理节点服务器程序主函数管理节点主程序为整个管理程序的主入口,通过4个线程函数来监听并完成客户端所提交的任务。程序8.1/*文件名mainsever.cpp*/ 定义管理节点服务器程序的入口点void test();int _tmain(int argc, _TCHAR* argv)openfile(); /获得root.dat、node.dat的文件指针test(); /该函数完成对主服务器的配置工作WSADATA wsa;int ret = 0;int PORT = 5100;SOCKET s_socket;SOCKET c

20、_socket;struct sockaddr_in s_sockaddr;struct sockaddr_in c_sockaddr;int c_sockaddr_len = sizeof(c_sockaddr);ret = WSAStartup(MAKEWORD(2, 2), &wsa);if(ret != 0)cout Init WinSock failed: ret endl;return 0;if(s_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP) = SOCKET_ERROR)cout Create Socket Failed:

21、 WSAGetLastError() endl;WSACleanup();return 0;s_sockaddr.sin_family = AF_INET;s_sockaddr.sin_port = htons(PORT);s_sockaddr.sin_addr.s_addr = htonl(INADDR_ANY);if(bind(s_socket, (SOCKADDR *)&s_sockaddr, sizeof(s_sockaddr) = SOCKET_ERROR)cout bind failed: WSAGetLastError() endl;closesocket(s_socket);W

22、SACleanup();return 0;if(listen(s_socket, 5) = SOCKET_ERROR)cout Listen Failed: WSAGetLastError() endl;closesocket(s_socket);WSACleanup();return 0;CMD cmd;/进入循环接收来自客户端的操作命令cmdwhile(1)c_socket = accept(s_socket, (SOCKADDR *)&c_sockaddr, &c_sockaddr_len);recv(c_socket, (char *)&cmd, sizeof(CMD), 0);/从客

23、户端获取操作命令SOCKET *tsock = (SOCKET *)malloc(sizeof(SOCKET);*tsock = c_socket;switch(cmd)case USERADD:_beginthreadex(NULL, 0, &useraddthread, tsock, 0, NULL);/进入增加用户线程break;case USERGET:_beginthreadex(NULL, 0, &usergetthread, tsock, 0, NULL);/进入获取用户信息线程case USERDEL:_beginthreadex(NULL, 0, &userdelthread

24、, tsock, 0, NULL);/删除用户,暂未定义case GETNODE:_beginthreadex(NULL, 0, &getnodeaddrthread, tsock, 0, NULL);/进入获取节点信息线程default:break;cin.get();cin.get();return 0;/test()函数用于配置各子节点的IP、端口等信息,并将信息存储到管理节点的node.dat文件void test()cout 输入地址信息 endl;char ip16;int port = 5101;while(1)cout 输入IP endl;scanf(%s,ip);if(str

25、cmp(ip,0) = 0)break;if(nodeadd(ip, port, 1024*10) = 0)cout 该记录已经存在 endl;cout 主服务器配置完成 endl;上面的管理服务器主程序在5100端口监听来自客户端的连接及操作命令,其命令由cmd定义,根据从客户端接收到的命令进入不同的处理线程,在本系统已实现的功能有添加用户功能、获取用户信息功能和获取节点信息功能。管理节点服务器在启动时就调用test()函数完成对子节点信息的添加及配置。节点信息被存到node.dat文件,用户信息被存到root.dat。在用户需要进行数据访问时将读取这两个文件获得当前云计算系统所有已接入系统

26、的子节点,并判断当前用户是否存在,如存在则返回其文件分配信信息存储位置。我们要注意的是在现在这个系统中管理节点并不和任何的子节点进行通信,也不直接协调子节点的工作。用户在获取相关信息后将直接与子节点联系进行操作和数据访问,这样可以大大减轻主节点的负载。在管理节点程序中我们定义了一些常用的数据结构主要有userInfo,该数据结构与root.dat文件有关,包括用户名、用户数据配置文件所在节点的IP地址等信息,因为用户数据文件的信息没有存放在管理节点而是放在某一个子节点上的,客户端要访问文件数据首先要从管理节点的root.dat文件中获取该用户数据配置文件所在节点的IP地址,再通过该IP地址获取

27、数据的存储信息。另一个数据结构是nodeInfo,该数据结构与node.dat文件有关,包括节点IP、端口、节点总容量、可用空间等,系统中所有节点的相关内容都采用这一数据结构存入node.dat文件。主节点服务器程序部分参数及数据结构的定义如程序8.2所示。程序8.2/*文件名melem.h*/#define USERADD 1 /添加用户#define USERGET 2 /获取用户信息#define USERDEL 3#define GETNODE 4 /获取节点信息#define BLOCKSIZE 1024/定义文件块大小typedef int CMD; /CMD为命令标识/*此结构体

28、写入root.dat文件*/typedef structchar user20; /用户名char ip16; /用户数据配置文件所在节点的IP地址int port;userInfo;/*此结构体写入node.dat文件*/typedef structchar ip16; /存储节点的IP地址int port; /端口号int userNum; /用户数目_off_t totalsize; /节点的总容量_off_t freesize; /节点的可用空间nodeInfo;typedef structchar ip16;int port;nodeaddr;8.2.2管理节点各线程函数的设计管理节

29、点程序的功能基本是由其定义的4个线程函数(其中删除用户未定义)提供的,这些函数的功能主要是完成用户信息的注册、服务器节点信息的管理和用户数据配置信息的管理。管理节点可以看作是一个信息的中转站,其自身并不完成任何的数据操作和处理工作。各线程的函数定义如下。1增加新用户线程函数程序8.3/*文件名mthread.cpp*/*增加新的用户,用于新用户注册功能*/unsigned _stdcall useraddthread(LPVOID p)SOCKET* tsock = (SOCKET *)p;struct sockaddr_in taddr;int len = 20;char* username

30、 = (char *) malloc (len * sizeof(char);recv(*tsock, username, len, 0);/从客户端接收用户名int result = useradd(username);send(*tsock, (char *)&result, sizeof(int), 0);closesocket(*tsock);free(username);free(tsock);return 1;函数useraddthread()接收来自于客户端的新注册用户名,调用useradd()函数将用户名及存储该用户文件信息的节点IP地址写入主节点的root.dat文件,客户端

31、访问该文件可以获得某一用户的文件存储信息文件所在的子节点IP地址,该文件的文件名就是用户名。2获取用户信息线程函数程序8.4/*文件名mthread.cpp*/*客户端获取用户信息文件*/unsigned _stdcall usergetthread(LPVOID p)SOCKET* tsock = (SOCKET *)p;struct sockaddr_in taddr;int len = 20;char* username = (char *) malloc (len);userInfo *user = (userInfo *) malloc (sizeof(userInfo);recv(

32、*tsock, username, len, 0);cout 接收到的用户名: username endl;/*根据用户名读取root.dat中的用户及对应存储文件描述信息的子节点IP*/if(userget(username, user) = 0)cout get false user, 0);strcpy(user-ip,0.0.0.0);user-port = 0;cout int_thread: user ip : port endl;send(*tsock, (char *)user, sizeof(userInfo), 0);closesocket(*tsock);free(use

33、rname);free(user);return 1;函数usergetthread()接收来自客户端的用户名,并在root.dat文件中查找该用户名对应的userInfo数据结构,并传回给客户端。其中调用userget()函数从root.dat读取与username对应的userInfo信息。通过调用这一函数客户端可以知道对应用户的文件描述文件存储在哪个子节点上,通过连接该子节点获取文件的具体存储方式。客户端在调用一这函数后将通过返回的IP地址与存储了数据分块描述情况文件的子节点进行连接。3文件分块线程函数程序8.5/*文件名mthread.cpp*/*根据node.dat文件中的节点信息,

34、将数据块分配到各节点*/unsigned _stdcall getnodeaddrthread(LPVOID p)SOCKET* tsock = (SOCKET *)p;int blocknum = 0;nodeInfo *node = (nodeInfo *) malloc (sizeof(nodeInfo);nodeaddr *naddr = (nodeaddr *) malloc (sizeof(nodeaddr);recv(*tsock, (char *)&blocknum, sizeof(int), 0); /获取数据块个数for(int i = 0; i port = node-p

35、ort;strcpy(naddr-ip, node-ip);send(*tsock, (char *)naddr, sizeof(nodeaddr), 0); /该数据块的存储位置发送回客户端closesocket(*tsock);free(node);free(naddr);free(tsock);return 1;函数getnodeaddrthread()接收来自客户端的数据块个数,并为每个数据块分配一个存储节点,数据块的分配通过调用datagetnode()函数来完成,该函数按剩余空间最大的策略向各数据块分配存储节点,并将分配结果发送回客户端,由客户端根据接收到的子节点IP直接连接子节点

36、来完成文件的存储工作,并将存储结果写入子节点中的数据分块描述文件中,以便系统在下次读取时获得数据的存储情况。8.2.3主服务器中其他函数的设计主服务器其他函数定义。程序8.6/*文件名mfile.cpp*/*向node.dat文件添加节点信息*/int nodeadd(char* ip, int port, _off_t totalsize)nodeInfo *temp = (nodeInfo *) malloc (sizeof(nodeInfo);fseek(fp_node, 0, 0);/*判断该节点是否已存在*/while( fread(temp, sizeof(nodeInfo), 1

37、, fp_node) = 1)if(strcmp(temp-ip, ip) = 0 & temp-port = port)free(temp);return 0;strcpy(temp-ip, ip);temp-port = port;temp-userNum = 0;temp-totalsize = totalsize;temp-freesize = totalsize;/*写入node.dat文件*/fwrite(temp, sizeof(nodeInfo), 1, fp_node);fseek(fp_node, 0, 0);fflush(fp_node);free(temp);retur

38、n 1;/*分配用户数据描述文件存储节点的IP*/int usergetnode(nodeInfo *node)nodeInfo *temp = (nodeInfo *) malloc (sizeof(nodeInfo);fseek(fp_node, 0, 0);int num = 0;int no = 0;/*寻找已分配uesername文件最少的节点IP*/if(fread(node, sizeof(nodeInfo), 1, fp_node) != 1)return 0;while( fread(temp, sizeof(nodeInfo), 1, fp_node) = 1)+num;i

39、f(temp-userNum userNum)*node = *temp;no = num;memset(temp, 0, sizeof(nodeInfo);*temp = *node;temp-userNum += 1;fseek(fp_node, no*sizeof(nodeInfo), 0);fwrite(temp, sizeof(nodeInfo), 1, fp_node);fseek(fp_node, 0, 0);fflush(fp_node);free(temp);return 1;/*将username及对应存储数据描述文件的节点IP写入root.dat文件*/int useradd(char* username)userInfo *temp = (userInfo *) malloc (sizeof(userInfo);nodeInfo *node = (nodeInfo *) malloc (sizeof(nodeInfo);fseek(fp_user, 0, 0);while( fread(temp, sizeof(userInfo), 1, fp_user) = 1)/*检测该用户名是否存在*/if(strcmp(temp-user, username) = 0)free(temp);free(node);

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服