分布式应用程序开发.docx

  1. 1、本文档共32页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
分布式应用程序开发分布式应用程序开发

大型Java分布式应用纵横谈在当今应用架构里,分布式应用与服务之间的通信都是核心思想。想要从分布式应用与服务中获益,你必须牢牢记住几条基本的原则,否则你可能很容易遇到性能和扩展性问题。在开发阶段这些问题不会经常出现,但当你进行负载测试或产品化的时候,你会意识到你选择的软件架构不能满足性能和扩展性需求。在这篇文章中,我们重点关注构建分布式应用需要记住的一些关键点。  分布式需要应用之间进行交互。范围包括从大规模集群架构上简单的点到点的交互,到动态的面向服务或基于服务的架构。跨系统边界的通信也是提高软件系统扩展性和可用性的关键。如今软件架构已把分布式作为一个核心的必要的概念。Java平台成为了核心角色,因为它的分布式、有很好的API和产品支持这些特点。应用场景从像SAP这样在标准软件上的系统集成,到内部或外部的服务集成。SOA提供这样的方法,使服务和应用变的灵活和可重用,可以对新的市场需求很快的做响应。另外,像使用网格计算,虚拟机和多核刀片机的趋势,导致越来越多的集群应用的出现。这主要是由于追求高可扩展性和高可用性驱动的。而且云计算的发展趋势表明,分布式平台将来会更加流行。另外,系统正变得希望能更动态的增加其灵活性。例如,在运行时添加应用节点。这些趋势也导致了系统结构变得越来越复杂。对于开发人员,则更难理解产品中服务调用是如何实现的。这种复杂性和缺乏对相应知识的了解,很容易导致资源消耗的增加(CPU,内存,网络)和性能的降低。  如今,远程技术使分布式应用的实现更加简单。底层通信的细节和服务端和客户端的基础结构对开发人员是透明的。现在,如果要把一个Java类暴露为一个服务,有时只需要简单的加一个注解到这个类上。服务也可以被工具生成的代理很容易的访问。如下图所示,但是,这仅仅是冰山的一角。?  图1.远程协议的上层架构  远程堆栈的核心块是对象的序列化和传输的格式化。通常,应用的开发者不需要知道这些。但是,这也是很多性能问题产生的原因。效率不高的序列化意味着,通过网络传输了很多不需要的数据。复杂对象的显示和大量的数据,在序列化和反序列化期间,导致CPU和内存的使用会很高。底层的基础架构和它的配置对应用的性能有很大的影响。在客户端,主要是连接的管理和底层线程模型。在分布式应用中使用连接的指导方针和数据库的连接很像。建立一个连接需要一定的时间。但这同样要看是什么协议。例如,建立一个HTTPS的连接的开销要大于一个简单的TCP/IP连接。同时连接又是系统很重要的资源。所以使用连接池很重要。正确的配置在这里也很关键,因为错误的配置文件给我们带来的坏处要多于好处。线程的模型涉及到请求如何被处理。重要的是请求是被同步还是异步处理。同步通信阻塞一个进程直到收到相应。在异步通信中,当收到响应时会调用一个回调。这就允许这个线程被其他事务使用。在服务端,可用的工作线程数量就是定义的并行处理的最大服务请求数。网络本身也是分布式应用的一个重要组件。网络是比影响性能更加限制其可扩展性的重要的瓶颈资源。这块通常在开发时会被忽视,因为没有调用实际的网络。  远程调用之美在于...  这有很多可以选择,Java提供了非常多的可能性和技术来实现分布式应用。远程技术的选择对应用的架构、性能和扩展性有十分重要的影响。最“老的”的但是几乎是用的最广的远程协议是RMI(如下图)。  图2.RMI架构  RMI是J2EE应用的一个标准协议,设计时就是为了调用远程Java虚拟主机上的对象提供的方法。对象在服务端被暴露出来,这时客户端就可以通过代理调用这个对象。同样的服务端对象被多个线程使用。线程池被RMI基础设施管理。通信通过TCP/IP被处理,并且使用JRMP或针对RMI的基于IIOP GIOP(CORBA协议)的协议。应用服务端也提供自己的属性协议来优化其性能。如服务端的引用需要管理一样,RMI基础设施也提供了垃圾回收器来管理引用。这个分布式垃圾回收器(DGC)本身也使用RMI协议来管理服务器端的对象生命周期。除了客户端和服务端很强大,RMI还有一些其他的实现。关于RMI的详细介绍及应用请参考51CTO之前的文章《用RMI实现基于Java的分布式计算》。  RMI只支持同步通信,缺点上面已经讨论过了。另外,不能为数据驱动的服务提供低级缓存,因为它是基于2进制协议的。开发人员和系统架构能够改变基础设施的配置参数来优化性能。JMS是J2EE平台上使用的第二多的协议。如下图:  图3.JMS架构图  有别于RMI, JMS是一个异步协议。通信是基于队列的,以便监听器可以对消息作出反应。JMS不是一种标准的远程调用协议,但是它仍然能够满足服务与服务之间的交互。在SOA中非常重要的很多ESB的实现,就采用基于JMS的中间件来进行服务之间的信息传递。由于JMS是异步的,一些典型的同步问

文档评论(0)

cxiongxchunj + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档