版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
0ZStack可拓展性的秘密武器0 可拓展性的秘密武器1:异步架构........................................................................1ZStack—可拓展性秘密武器2:无状态的服务 10 可拓展性秘密武器3:无锁架构..........................................................................180ZSTACKZSTACK--可拓展性的秘密武器1:异步架构首先,我们非常不赞同一些文章里面描写的关于“一些基础配套设施,尤其是数常一项任务完成需要花费几秒甚至几分钟。所以当整个系统被缓慢的任务填满0程序,每一个服务可能会花费几秒甚至几分钟去引导外部硬件完成一些操作,这极大的延长了程只有在之前的任务执行完毕时才会开始执行下一个任务。因为任务执行缓慢,当达到一个任的调度他们。随后有一个想法是把线程分发出去,让不同的操作系统上相似的软件分做任何真正耗时的操作。举个例子,存储系统可以分配磁盘容量,镜像系统可以下载0最大的挑战是必须让所有组件都异步,并不只是一部分组件异才能进行下一步操作,这会使得整个工作流依旧是处于同步状态。(一个执行业务流程服务的线程同步调用了存储服务,然而存储服务和外部存储系统是异步通信的,因此它依旧需要等到存储服务返回之后,才能往下执行,这里的异步就等同于同步了。)1.异步消息AttachNicToVmOnHypervisorMsgAttachNicToVmOnHypervisorMsgamsg=newAttachNicamsgamsg.setVmUuid(self.getUuid(amsgamsg.setHostUuid(self.getHostUuiamsgamsg.setNics(msg.getNicsbusbus.makeTargetServiceIdByResourceUuibus.bus.send(amsg,newCloud@Overrider.setError(errf.instantiateErrorCode(VmErrors.ATTACH_NETWORK_ERROR}}finalfinalImageInventoryinv=ImageInventory.valueOf(ivo);finalList<DownloadImageMsg>dmsgs=CollectionUtils.transformToList(msg.getBackupStorageUuids(),newFunction<DownloadImageMsg,String>(){@OverridepublicDownloadImageMsgcall(Stringarg){DownloadImageMsgdmsg=newDownloadImageMsg(inv);dmsg.setBackupStorageUuid(arg);bus.makeTargetServiceIdByResourceUuid(dmsg,BackupStorageConstant.SERVICE_ID,arg);returndmsg;}bus.send(dmsgs,newCloudBusListCallBack(msg){@Overridepublicpublicvoidrun(List<MessageReply>replies){/*dosomething*/}}finalList<ConnectHostMsg>msgs=newArrayList<ConnectHostMsg>(hostsToLoad.size());for(Stringuuid:hostsToLoad){ConnectHostMsgconnectMsg=newConnectHostMsg(uuid);connectMsg.setNewAdd(false);connectMsg.setServiceId(serviceId);connectMsg.setStartPingTaskOnFailure(true);msgs.add(connectMsg);}bus.send(msgs,HostGlobalConfig.HOST_LOAD_PARALLELISM_DEGREE.value(Integer.class),newCloudBusSteppingCallback(){@Overridepublicvoidrun(NeedReplyMessagemsg,MessageReplyreply){/*dosomething*/}2.异步的方法件、插件使用方法调用的方式来进行交互,这种方式也是异步的。protectedvoidstartVm(finalAPIStartVstartVm(msg,newCoAPIStartVmInstanceEventevt=newAPIStartVmInsta}APIStartVmInstanceEventevt=newAPIStartVmInstaevt.setErrorCode(errf.instantiateE}}publicvoidcreateApplianceVm(ApplianceVmSpecspec,finalReturnValueCompletion<ApplianceVmInventory>completion){CreateApplianceVmJobjob=newCreateApplianceVmJob();job.setSpec(spec);if(!spec.isSyncCreate()){job.run(newReturnValueCompletion<Object>(completion){@Overridepublicvoidsuccess(ObjectreturnValue){completion.success((ApplianceVmInventory)returnValue);}@Overridepublicvoidfail(ErrorCodeerrorCode){completion.fail(errorCode);}}else{jobf.execute(spec.getName(),OWNER,job,completion,ApplianceVmInventory.class);}}3.HTTP异步调用RefreshFirewallCmdcmd=newRefreshFirewallCmd();List<ApplianceVmFirewallRuleTO>tos=newRuleCombiner().merge();cmd.setRules(tos);resf.asyncJsonPost(buildUrl(ApplianceVmConstant.REFRESH_FIREWALL_PATH),cmd,newJsonAsyncRESTCallback<RefreshFirewallRsp>(msg,completion){@Overridepublicvoidfail(ErrorCodeerr){/*handlefailures*/}@Overridepublicvoidsuccess(RefreshFirewallRspret){/*dosomething*/}@OverridepublicClass<RefreshFirewallRsp>getReturnClass(){returnRefreshFirewallRsp.class;}0满足大多数云的负载需要,考虑到系统需要高可用性以及承受巨),0ZSTACKZSTACK—可拓展性秘密武器2:无状态的服务ZStack管理节点足以承担大多数云的负载量;然而当必须处理一致性(consistency)、可用性(availability)和分区容忍性(partitionto二,因为节点都是相似的,对于分区问题系统通常是可以容忍的。因此,通常把一统设计为无状态的而不是有状态的。但是设计一个无状态的分布式系统通常比0我们所说的状态。如果一个服务是有状态的,每个服务维护自己的状态。请求者必须可以状态的改变是危险且易错的,这通常限制了整个系统的可拓展性。为了使整个性和横向拓展性增强,把状态和服务分离开,使得服务无状态是比较理想的解ServiceStatelessnessPrinciple)。无状态的服务使请求者不需要询问向哪里发送请求,当新添一个新的服务实例或者删除一个旧的服务实例的时候,服务之间也不用交换状态。0程或者不同的机器上,ZStack则把所有服务封装在一个共享任何状态,但仍然需要维护和其他节点的心跳记录,和一个一致性哈希环,我们接下来将详细介绍哈希环。心跳用来监视管理节点是否正常运行,一旦一个管理节点停止更新自己的心),zstackzstack.message.ansible.3694776ab31a45709259254a018913cazstack.message.api.portalzstackzstack.message.applianceVm.3694776ab31a45709259254a018913cazstack.message.cloudbus.3694776ab31a45709259254a018913cazstack.message.cluster.3694776ab31a45709259254a018913cazstack.message.configuration.3694776ab31a45709259254a018913cazstack.message.console.3694776ab31a45709259254a018913cazstack.message.eip.3694776ab31a45709259254a018913cazstack.message.globalConfig.3694776ab31a45709259254a018913cazstack.message.host.3694776ab31a45709259254a018913cazstack.message.host.allocator.3694776ab31a45709259254a018913cazstack.message.identity.3694776ab31a45709259254a018913cazstack.message.image.3694776ab31a45709259254a018913cazstack.message.managementNwork.service.3694776ab31a45709259254a018913cazstack.message.portForwarding.3694776ab31a45709259254a018913cazstack.message.query.3694776ab31a45709259254a018913cazstack.message.securityGroup.3694776ab31a45709259254a018913cazstack.message.snapshot.volume.3694776ab31a45709259254a018913cazstack.message.storage.backup.3694776ab31a45709259254a018913ca就发挥作用了。节点拓展或者收缩环去描述当前系统的状态。当msg=newStartVmInstanceMsg();destinationManagementNodeUUID=consistent_hashing_algorithm("932763162d054c04adaab6ab498c9139");msg.setServiceId("vmInstance."+destinationManagementNodeUUID);cloudBus.send(msg)因为使用一致性哈希环,发送者不需要知道哪个服务实例将处理这条消息,因为服务实例例可以由哈希环完成,服务只需要单纯的处理消息。因此,服务变得极其简单且无状态。对于API消息(如APIStartVmInstanmsg=newAPICreateVmInstanceMsg()msg.setServiceId("api.portal")cloudBus.send(msg)0而,在现实中,对于私有云,两个管理节点足够满足高可用性和可拓展性的需求。对云,管理者可以依据负载量大量创建管理节点0ZSTACKZSTACK--可拓展性秘密武器3:无锁架构依赖关系,任务希望以特定的序列被执行。比如,如果当一个对某个磁盘进行快照的任务运行时,那么删除该磁盘的操作不能被执行。有些时候,为了提升性能,任务应该被并行主机上创建虚拟机的并发任务,将毫无疑问的摧毁整个系统,或者导致整个系统长时间没何回应。这种并发编程问题在多线程的环境中是复杂的,并且在分布式系统环境中将教科书教导我们解决同步和并行问题的答案锁(lock)和信号量(se0(Synchronized)和并行化,同步(Synchronous)与串行化(Synchronized)某些时候是可换的,但是他们是不同的,在我们的文档中同步(Synchronous)是指一个任务将会在运行塞线程,而串行化(Synchronized)是指一个任务执行时是互斥的。如果一个任务一直占用一个线程直到任务完成,它是同步的(Synchronous)任务。如果一个任务在其他任务执行时无锁架构的基础是一致性哈希算法,因为一致性哈希算法保证了对应同一息,总是被同一服务实例处理。这种聚合消息到特备注:在深入讲解细节之前,请注意我们将要讲的队列和“ZSta0常是一个Java可执行程序)在它返回后才被认为已经完成。thdfthdf.syncSubmit(newSyncTask<Object>(){@Override@OverridepublicpublicStringgetSyncSignature(){return"apireturn"api.worker";}@OverridepublicintgetSyncLevel(){returnapiWorkerNum;}@OverridepublicStringgetName(){return"api.worker";}@OverridepublicObjectcall()throwsException{if(msg.getClass()==APIIsReadyToGoMsg.class){handle((APIIsReadyToGoMsg)msg);}else{try{dispatchMessage((APIMessage)msg);}catch(Throwablet){bus.logExceptionWithMessageDump(msg,t);bus.replyEr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度熟食加工企业环保设施租赁合同2篇
- 二零二五年饲料生产废弃物处理合同2篇
- 2024有关工程合作协议书模板
- 2025年度文化产业并购知识产权许可及运营合同3篇
- 二零二五版吊车租赁项目验收与交付合同3篇
- 二零二五版仓单质押担保与仓储物流合同3篇
- 2025年度绿色能源厂房租赁合同补充协议3篇
- 个性化家装服务详细协议条款版A版
- 二零二五版生物医药厂房租赁安全协议范本3篇
- 二零二五年防火门产品认证与安装服务合同2篇
- 三晶8000B系列变频器说明书
- 幽默动感年会互动PPT演示模板
- 麒麟小学创建五好关工委工作实施方案
- 地化录井技术在油田勘探开发中的应用-李斌
- GB/T 23315-2009粘扣带
- GB/T 10228-2015干式电力变压器技术参数和要求
- 会议系统大会议室报价清单
- 2休闲食品市场营销策划案1
- 全国高校第三轮学科评估按大学汇总
- 社区卫生服务中心装饰施工组织设计(86页)
- 送达地址确认书(法院最新版)
评论
0/150
提交评论