分布式作业开发一个应用并在实体之间使用发布订阅来进行通信.docx

上传人:b****5 文档编号:28935491 上传时间:2023-07-20 格式:DOCX 页数:11 大小:282.05KB
下载 相关 举报
分布式作业开发一个应用并在实体之间使用发布订阅来进行通信.docx_第1页
第1页 / 共11页
分布式作业开发一个应用并在实体之间使用发布订阅来进行通信.docx_第2页
第2页 / 共11页
分布式作业开发一个应用并在实体之间使用发布订阅来进行通信.docx_第3页
第3页 / 共11页
分布式作业开发一个应用并在实体之间使用发布订阅来进行通信.docx_第4页
第4页 / 共11页
分布式作业开发一个应用并在实体之间使用发布订阅来进行通信.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

分布式作业开发一个应用并在实体之间使用发布订阅来进行通信.docx

《分布式作业开发一个应用并在实体之间使用发布订阅来进行通信.docx》由会员分享,可在线阅读,更多相关《分布式作业开发一个应用并在实体之间使用发布订阅来进行通信.docx(11页珍藏版)》请在冰豆网上搜索。

分布式作业开发一个应用并在实体之间使用发布订阅来进行通信.docx

分布式作业开发一个应用并在实体之间使用发布订阅来进行通信

1.为什么网格在学术应用中很流行,而云计算统治了商业应用?

请给出示例来比较它们的优缺点。

答:

(1)网格计算即分布式计算,研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给许多计算机进行处理,最后把这些计算结果综合起来得到最终结果。

资源在独立管理,并不是进行统一布置、统一安排的形态。

网格这些资源都是异构的,不强调有什么统一的安排。

另外网格的使用通常是让分布的用户构成虚拟组织(VO),在这样统一的网格基础平台上用虚拟组织形态从不同的自治域访问资源。

此外,网格一般由所在地区、国家、国际公共组织资助的,支持的数据模型很广,从海量数据到专用数据以及到大小各异的临时数据集合,在网上传的数据,这是网格目前的基本形态。

网格计算非常适合那些有少量用户要访问大量数据的组织(或者数据访问次数较少,但是每次规模都很大的那种);网格很适合虚拟组织中复杂的科学任务;而学术应用正好符合网格的特点,所以网格在学术应用中很流行。

(2)云计算是从网格计算演化来的,能够随需应变地提供资源。

云计算是以虚拟化技术为基础,以互联网为载体提供基础架构、平台、软件等服务,整合大规模可扩张的计算、存储、数据、应用等分布式计算资源进行协同工作的超级计算模式。

云计算是一种全新的商业模式,它使用的硬件设备是成千上万的廉价的服务器集群,企业和个人通过高速互联网调用这些分散的服务器集群,从而获得计算能力,这种资源的共享方式避免了大量硬件的重复投用。

云计算更适合于那些有大量用户要访问小量数据的环境(或数据访问规模比较小,但是访问次数很大的那种)。

如果计算需求比较小,或比较大但是偶尔发生,或不定时发生和突然发生,或不可预测,或呈现出快速而不规则的增长率,那么使用云计算比较好,因为这些类型的计算需求会让你的数据中心有时处于闲置状态,或者不能给你足够的规模经济来分摊数据中心运行的投资。

所以云计算适合商业应用。

云计算是一种宽泛的概念,它允许用户通过互联网访问各种基于IT资源的服务,这种服务允许用户无需了解底层IT基础设施架构就能够享受到作为服务的“IT相关资源”。

综上可得,云计算是以相对集中的资源,运行分散的应用(大量分散的应用在若干大的中心执行);而网格计算则是聚合分散的资源,支持大型集中式应用(一个大的应用分到多处执行)。

但从根本上来说,从应对Internet的应用的特征特点来说,它们是一致的,为了完成在Internet情况下支持应用,解决异构性、资源共享等等问题。

(3)云计算与网格计算的优缺点:

Ø云计算的四个显著优点是:

1云计算提供了最可靠、最安全的数据存储中心,用户不用担心数据丢失、病毒入侵等麻烦;

2云计算对用户端的设备要求最低,使用起来也最方便;

3云计算可以轻松实现不同设备间的数据与应用共享;

4云计算为我们使用网络提供了几乎无限多的可能。

Ø缺点主要有两个方面:

①安全,因为云计算计算能力和数据都在云里,如何保证客户数据的安全就是比较重要的了。

安全有两个方面,一个是数据不会丢失,这个一般服务商都会有备份能力解决,但是也是偶尔会发生丢失的;另外一个就是你的数据不会泄漏,这个虽然服务商也会采取一些措施,不让外部人员,例如黑客等攻击获取数据,但是服务商内部人员的问题也是很大的,例如前一阶段暴露的某国有大型移动运营商内部员工非法销售客户通话列表一事。

当然服务商都会说数据放在他们那里是安全的,但是都是他们自说自的,没有一个第三方的权威机构统一认证和评判。

②网络延迟或者中断。

云计算一般都是远程通过网络访问的,虽然现在网速提高很快,但是和局域网相比,速度还是有所延迟的,而如果一旦网络终端,服务也就无法访问,例如前几年海底电缆断了,那么你根本无法访问到国外的云计算服务了。

Ø网格计算的优点:

①计算网格系统能使企业通过相应的软件将其中大块的任务分割成众多小的部分,再将各个子任务分配给底层的处理单元。

②无需在用户端配全套计算机系统和复杂软件,就可以简便地得到网格提供的各种服务。

Ø网格计算的缺点:

如果软件的一个节点发生故障,该软件的其他部分在其他节点也同样崩溃。

如果该组件在另一个节点上转移组件故障,可以起到缓解作用。

如果组件依赖于其他部分的软件来完成一个或多个网格计算任务,那么问题仍然会出现。

云计算和网格计算都是可伸缩的,可伸缩性是通过独立运行在通过Web服务连接的各种操作系统上的应用程序实例的负载平衡实现的;CPU和网络带宽根据需要分配和回收,系统存储能力根据特定时间的用户数量、实例的数量和传输的数据量进行调整。

两种计算类型都涉及到多承租和多任务,即很多用户可以执行不同的任务。

访问一个或多个应用程序实例,通过大型的用户池共享资源来降低基础设施成本,提高峰值负荷能力。

云计算和网格计算都提供了服务水平协议(SLA)以保证可用性,如果服务达不到承诺的正常运行时间,消费者将由于数据延迟而得到服务补偿。

网格计算和云计算虽有相似之处,但它们的区别也是明显的。

主要有以下几点:

①网格计算的思路是聚合分布资源,支持虚拟组织,提供高层次的服务,例如分布协同科学研究等。

而云计算的资源相对集中,主要以数据中心的形式提供底层资源的使用,并不强调虚拟组织(VO)的概念。

②网格计算用聚合资源来支持挑战性的应用,因为高性能计算的资源不够用,要把分散的资源聚合起来;后来到了2004年以后,逐渐强调适应普遍的信息化应用,特别在中国,做的网格跟国外不太一样,就是强调支持信息化的应用。

但云计算从一开始就支持广泛企业计算、Web应用,普适性更强。

③在对待异构性方面,二者理念上有所不同。

网格计算用中间件屏蔽异构系统,力图使用户面向同样的环境,把困难留在中间件,让中间件完成任务。

而云计算实际上承认异构,用镜像执行,或者提供服务的机制来解决异构性的问题。

当然不同的云计算系统还不太一样,像Google一般用比较专用的自己的内部的平台来支持。

④网格计算强调资源共享,任何人都可以做为请求者使用其它节点的资源,任何人都需要贡献一定资源给其他节点。

网格计算强调将工作量转移到远程的可用计算资源上。

云计算强调专有,任何人都可以获取自己的专有资源,并且这些资源是由少数团体提供的,使用者不需要贡献自己的资源。

在云计算中,计算资源被转换形式去适应工作负载,它支持网格类型应用,也支持非网格环境,比如运行传统或Web2.0应用的三层网络架构。

网格计算侧重并行的计算集中性需求,并且难以自动扩展。

云计算侧重事务性应用,大量的单独的请求,可以实现自动或半自动的扩展。

⑤网格计算用执行作业形式使用,在一个阶段内完成作用产生数据。

而云计算支持持久服务,用户可以利用云计算作为其部分IT基础设施,实现业务的托管和外包。

⑥网格计算更多地面向科研应用,商业模型不清晰。

而云计算从诞生开始就是针对企业商业应用,商业模型比较清晰。

 

2.开发一个应用,并在实体之间使用“发布-订阅”来进行通信。

若应用不同语言开发的实体之间进行“发布-订阅”来进行通信,应如何实现?

答:

随着Internet技术和分布式应用的发展,发布/订阅逐渐成为一种流行的通信模式。

发布/订阅支持一个消息驱动模型,消息生产者和消费者都参与消息的传递,生产者发布消息,而消费者订阅感兴趣的消息并使用消息,系统根据使用者注册的兴趣,将消息传给使用者。

发布/订阅系统是一种使分布式系统中的各参与者能以“发布/订阅”的方式进行交互的中间件系统。

发布/订阅(Pub/Sub)通信范型与传统的通信范型(消息传递、RPC/RMI和共享空间)相比,具有异步、多点通信的特点,使通信的参与者在空间、时间和控制流上完全解耦,能够很好地满足大型分布式系统松散通信的需求。

问题:

在日常生活中,常常会有这样的情形:

当某件事发生时,应该通知所有的相关者。

例如,如果我们的课程改变时间或地点,就应该通知所有选修了这么课程的同学。

在软件设计中,也有类似的问题:

当一个对象的状态发生变化时,如何能够通知与其相关的所有其他对象,而不用修改该对象的代码?

Ø发布/订阅模式的意图:

定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

在下面三种情况均适用:

①当一个抽象模型有两个方面,其中一个方面依赖于另一方面。

将这二者封装在独立的对象中以使它们可以各自独立地改变和复用。

②当对一个对象的改变需要同时改变其它对象,而不知道具体有多少对象有待改变。

③当一个对象必须通知其它对象,而它又不能假定其它对象时谁。

换言之,你不希望这些对象是紧密耦合的。

Ø模式结构示意图:

其中:

Observer

ØSubject(目标)

目标知道它的观察者。

可以有任意多个观察者观察同一个目标。

提供注册和删除观察者对象的接口。

ØObserver(观察者)

为那些在目标发生改变时需要获得通知的对象定义一个更新接口。

ØConcreteSubject(具体目标)

将有关状态存入各ConcreteSubject对象。

当它的状态发生改变时,向它的各个观察者发出通知。

ØConcreteObserver(具体观察者)

维护一个指向ConcreteSubject对象的引用。

存储有关状态,这些状态应与目标的状态保持一致。

实现Observer的更新接口以使自身状态与目标的状态保持一致。

应用举例:

辅导员都有电话号码,学生需要知道辅导员的电话号码,以便于在合适时拨打,在这样的组合中,辅导员就是一个被观察者(Subject),学生就是需要知道信息的观察者,当辅导员的电话号码发生改变时,学生得到通知,并更新相应的电话记录。

类图如下图:

(1)Subject代码:

packageobserver;

publicinterfaceSubject{//目标类的定义

publicvoidattach(Observero);//注册一个观察者

publicvoiddetach(Observero);//删除一个观察者

publicvoidnotice();//通知所有观察者更新

}

(2)Observer代码:

packageobserver;

publicinterfaceObserver{//观察者类定义

publicvoidupdate();//更新观察者

}

(3)Teacher代码:

packageobserver;

importjava.util.Vector;

publicclassTeacherimplements

Subject{

privateStringphone;//电话号码

privateVectorstudents;//学生

publicTeacher(){

phone=””;

ptudents=newVector();

}

publicvoidattach(Observero){

students.add(o);//注册学生

}

publicvoiddetach(Observero){

students.remove(o);//删除学生

}

publicvoidnotice(){//通知学生更新

for(inti=0;i

((Observer)students.get(i)).update();

}

publicvoidsetPhone(Stringphone){

this.phone=phone;

notice();

}

publicstringgetPhone(){

returnphone;

}

}

(4)Student代码:

packageobserver;

publicclassStudentimplementsObserver{

privateStringname;//学生姓名

privateStringphone;//辅导员老师电话

privateTeacherteacher;

publicStudent(Stringname,Teachert){

this.name=name;

teacher=t;

}

publicvoidshow(){

System.out.printIn(“Name:

”+name+”\nTeacher’sphone:

”+phone);

}

publicvoidupdate(){//更新电话与辅导员老师的保持一致

phone=teacher.getPhone();

}

}

 

(5)Client代码:

packageobserver;

importjava.util.Vector;

publicclassClient{

publicstaticvoidmain(String[]args){

Vectorstudents=newVector();//定义学生类向量

Teachert=newTeacher();//定义老师类对象

for(inti=0;i<10;i++){

studentsst=newStudents(“lili”+I,t);

students.add(st);//把学生加到向量中

t.attach(st);//老师注册一个学生

}

t.setPhone(“123”);

for(inti=0;i<10;i++)

((Student)students.get(i)).show();//所有学生的辅导员电话都为123

t.setPhone(“456”);

for(inti=0;i<10;i++)

((Student)students.get(i)).show();//所有学生的辅导员电话都为456

}

}

效果分析:

①对一个对象状态的更新,需要其他对象同步更新,而且其他对象的数量动态可变。

②对象仅需要将自己的更新通知给其他对象而不需要知道其他对象的细节。

优点:

①Subject和Observer之间是松耦合的,分别可以各自独立改变。

②Subject在发送广播通知的时候,无需指定具体的Observer,Observer可以自己决定是否需要订阅Subject的通知。

③遵守大部分GRASP原则和常用设计原则,高内聚、低耦合。

缺点:

2松耦合导致代码关系不明显,有时可能难以理解。

②如果一个Subject被大量Observer订阅的话,在广播通知的时候可能有效率问题。

若应用不同语言开发的实体之间进行“发布-订阅”来进行通信,应如何实现:

答:

信息的生产者将“事件”发送给发布/订阅中间件;发布者向代理网络发布事件,通过代理网络将事件路由给适当的订阅者。

事件代理间的逻辑连接构成覆盖于物理网络之上的事件代理网络。

订阅者向代理网络注册订阅信息,表明希望接收事件的特征;

信息的消费者则向发布/订阅中间件发出一个“订阅”条件,表示对系统中的哪些事件感兴趣;而发布/订阅中间件则保证将所发布的事件及时、可靠地传送给所有对之感兴趣的信息消费者。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 金融投资

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1