1、概述
1.1 大型应用通常会拆分为多个子系统来实现;
对于java来说,这些子系统可能部署在同一台机器的多个不同的JVM中,也可能部署在不同的机器上;
但这些子系统又不是完全独立的,要相互通信来共同实现业务功能;
1.2 对于分布式java应用,通常有2种典型的方法来是实现:
1.1.1 基于消息方式
当系统之间要通信时,就向外发送消息,消息可以是字节流、字节数组、甚至是java对象,其他系统接收到消息后则进行相应的业务处理;
消息方式的系统间通信,通常基于网络协议来实现,常用的实现系统间通信的协议有:TCP/IP、UDP/IP;
TCP、UDP可用于完成数据的传输,但要完成系统间通信,还需要对数据进行处理。例如,读取、写入数据,按照POSIX标准分为同步IO、异步IO;
1.1.1.1 BIO
当发起IO的读或写操作时,均为阻塞方式,只有当程序读到了流或者将流写入OS后,才会释放资源;
1.1.1.2 NIO
基于事件驱动的思想,通常采用Reactor模式,当发起IO的读或写操作时,是非阻塞的;
只有当Socket有流可读或可写入Socket时,OS会相应地通知应用程序进行处理,应用再将流读取到缓冲区或写入OS;
对于网络IO而言,主要有3种事件:连接建立、流读取、流写入;
1.1.1.3 AIO
基于事件驱动思想,通常采用Proactor模式;
和NIO不同,当进行读写操作时,只须调用API的read、write即可,这2种方法均为异步;
对于read操作而言,当有流可读取时,OS会将可读的流传入read方法的缓冲区,并通知应用程序;
对于write操作而言,当OS将write方法传递的流写入完毕时,OS主动通知应用程序;
较之NIO而言,AIO一方面简化了程序的编写,流的读写都由OS来代替完成;另一方面省去了NIO中程序要遍历事件通知队列的代价;
1.1.2 基于远程调用方式
当系统之间要通信时,可通过调用本地的一个java接口的方法,透明地调用远程的java实现,具体的实现细节由java或框架完成,这种方式在java中主要用来实现基于RMI、WebService的应用;
2、分布式java应用实现:
1.1 消息方式
1.1.1 基于java自身技术实现消息方式的系统间通信:
TCP+BIO;
TCP+NIO;
UDP+BIO;
UDP+NIO;
1.1.2 基于开源框架实现消息方式的系统间通信:
原文地址:https://www.cnblogs.com/anpeiyong/p/10648336.html