这是java分布式开发的主要技术架构图:



    


对于分布式java应用,通常有两种典型的实现方式:

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

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


TCP/IP协议:

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

TCP/IP负责保证数据传输的可靠性,包括数据的可到达,数据到达的顺序等。但由于TCP/IP需要

保证连接及数据的可靠性,因此可能会牺牲一些性能。


UDP/IP协议:

是一种不保证数据一定到达的网络数据传输协议。UDP/IP并不直接给通信双方建立连接,而是发送

到网络上进行传递。由于UDP/IP不建立连接,并且不能保证数据传输的可靠,因此性能上表现的相

对较好,但可能会出现数据丢失以及数据乱序的现象。


数据的读写:

TCP/IP和UDP/IP可用于完成数据的传输,但要完成系统间通信,还需要对数据进行处理。例如

读取和写入数据。安装POSIX标准分为同步IO和异步IO两种。

其中同步IO中最常用的是BIO(Blocking IO   阻塞性IO )  和NIO(Non-Blocking IO  非阻塞性IO) 。

异步IO主要指AIO。

BIO就是当发起IO的读或写操作时,均为阻塞方式,只有当程序读到流或流写入操作系统后,

才会释放资源。

NIO是基于事件驱动思想,实现上通常采用Reactor模式,从程序角度而言,当发起IO的读或写操作时,

是非阻塞的;当Socket有流可读或可写入Socket时,操作系统会相应地通知应用程序进行处理,应用再

将流读取到缓冲区或写入操作系统。

对于网络IO而言,主要有连接建立,流读取及流写入三种事件。


AIO是异步IO方式,同样基于事件驱动思想,

从程序角度而言,和NIO不同,当进行读写操作时,只须直接调用API的read和write方法即可。

而这两种方法均为异步的,

对于读操作而言,当有流可读取时,操作会将可读的流传入read方法的缓冲区,并通知应用程序;

对于写操作而言,当操作系统将write方法传递的流写入完毕时,操作系统主动通知应用程序。


AIO和NOI对比:

AIO一方面简化了程序的编写,流的读取和写入都是操作系统来代替完成;

另一方面省去了NIO中程序要遍历事件通知队列(Selecttor)的代价。


java中的支持:

传输协议上,java对TCP/IP和UDP/IP均支持。

IO操作上,java7以前仅支持BIO和NIO。java7后才提供AIO的支持。



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

当系统间要通信是,可通过调用本地的一个java接口方法,透明地调用远程的java实现。

在java中主要用来实现基于RMI和WebService的应用。