分布式java应用_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 分布式java应用

分布式java应用

 2017/8/17 21:31:18  vision_xie  程序员俱乐部  我要评论(0)
  • 摘要:大型应用,通常会拆分为多个子系统来实现。对Java来说,这些子系统可能部署在同一台机器的多个不同的JVM中,也可能部署在不同的机器上,但这些子系统又不是完全独立的,要相互通信来共同实现业务功能。对于此类Java应用,我们称之为分布式Java应用。对于分布式Java应用,通常有2种方法来实现:1.基于消息方式实现系统间的通信系统间通信,就要向外发送消息,消息可以是字节流、字节数组、甚至是Java对象。消息方式的系统间通信,通常是基于网络协议来实现的。常用的协议有:TCP/IP、UDP/IP
  • 标签:Java 应用

?大型应用,通常会拆分为多个子系统来实现。

? ? ? 对Java来说,这些子系统可能部署在同一台机器的多个不同的JVM中,也可能部署在不同的机器上,但这些子系统又不是完全独立的,要相互通信来共同实现业务功能。

? ? ? 对于此类Java应用,我们称之为分布式Java应用。

?

?

? ? ? ?对于分布式Java应用,通常有2种方法来实现:

? ? ? ?1. 基于消息方式实现系统间的通信

? ? ? ? ? ? 系统间通信,就要向外发送消息,消息可以是字节流、字节数组、甚至是Java对象。

? ? ? ? ? ?消息方式的系统间通信,通常是基于网络协议来实现的。常用的协议有:TCP/IPUDP/IP。???

? ? ? ? ? ?TCP/IP是一种可靠的网络数据传输协议。TCP/IP要求通信双方首先建立连接,之后再进行数据的传输。TCP/IP负责保证数据传输的可靠性。

? ? ? ? ? ?UDP/IP是一种不保证数据一定到达的网络数据传输协议。由于UDP不能保证数据传输的可靠,因此性能会好一些。

? ? ? ? ? ?TCP/IPUDP/IP可用于完成数据传输,但要完成系统间通信,还需要对数据进行处理。例如:读取和写入数据,按照POSIX标准,分为:同步IO异步IO。同步IO中最常用的是BIO(Blocking?IO)NIO(Non-Blocking?IO).

?

? ? ? ? ? ?BIO:从程序角度而言,BIO就是当发起IO的读或写操作时,均为阻塞方式,只有当程序读到了流或将流写入操作系统后,才会释放资源。

? ? ? ? ? ?NIO:从程序角度而言,当发起IO的读或写操作时,是非阻塞的;当Socket有流可读或可写入Socket时,操作系统会通知相应的应用程序进行处理,应用再将流读取到缓冲区或写入操作系统。

? ? ? ? ? ?AIO:为异步IO方式。从程序角度而言,当进行读写操作时,只须直接调用APIreadwrite方法即可。?这两种方法均为异步的。对于读操作而言,当有流可读取时,操作系统会将可读的流传入read方法的缓冲区,并通知应用程序;对于写操作而言,当操作系统将write方法传递传递的流写入完毕时,操作系统主动通知应用程序。

? ? ? ? ? ?较之NIO而言,AIO简化了程序的编写,流的读取和写入都由操作系统来代替完成。

?

? ? ? ? 2. 基于远程调用方式实现系统间的通信

? ? ? ? ? ? 当系统间通信时,可通过调用本地的一个Java接口的方法,透明地调用远程的Java实现。其细节由Java或框架来完成。

?

? ? ? ? ? ??使用Java包来实现基于消息方式的系统间通信还是比较麻烦的。

? ? ?为了让开发人员能更加专注对数据进行业务处理,而不是过多关注纯技术细节,开源业界诞生了很多优秀的基于以上各种协议的系统间通信的框架,Mina

? ? ? ? ? ? MinaApache的顶级项目,基于Java?NIO构建,同时支持TCP/IPUDP/IP两种协议。Mina对外屏蔽了Java?NIO使用的复杂性,并在性能上做了不少的优化。

?

? ??? ? ? ? 远程调用方式就是尽可能地使系统间的通信和系统内一样,让使用者感觉调用远程通调用本地一样。

?

? ? ? ? ???基于Java自身技术实现远程调用方式的系统间通信

? ? ? ? ? ?在Java中实现远程调用方式的技术主要有RMIWebService两种:

? ? ? ? ? ?RMI:是java用于实现透明远程调用的重要机制。在远程调用中,客户端仅有服务器端提供的接口。

?

? ? ? ? ? ?JDK?6.0以前的版本RMI实现均是基于TCP/IP?+?BIO方式的,RMI服务器端通过启动RMI注册对象在一个端口上监听对外提供的接口,其实现实例以字符串的方式绑定到RMI注册对象上。RMI客户端通过proxy的方式代理了对服务器端接口的访问,RMI客户端将要访问的服务器端对象字符串、方法和参数封装成一个对象,序列化成流后,通过TCP/IP+BIO传输到RMI服务器端。RMI服务器端接收到客户端的请求对象后,解析其中的对象字符串、方法及参数,通过对象字符串从RMI注册对象上找到提供业务功能的实例,之后结合要访问的方法来反射获取到方法实例对象,传入参数完成对服务器端对象实例的调用,返回的结果,则序列化为流以TCP/IP+BIO方式返回给客户端,客户端在接收到此流后反序列化为对象,并返回给调用者。

发表评论
用户名: 匿名