Java 分布式
Java 分布式是什么
-
分布式系统是:由多个
节点(计算机服务器)
组成的系统,而且这些节点一般不是孤立的,而是互通的。 -
通过
计算机网络
与节点(计算机服务器)相连,将所有节点都连接上。
分布式有什么特点
-
系统容量增加
将原本复杂的业务从一台服务器上拆分到对多台服务器上,是系统容量从一条服务器变成了多台服务器的容量。 -
增强系统可用性
不会因为一台机器出故障而导致整体不可用,消除了单点故障,从而提高系统可用性。 -
重用度更高
系统模块化,从而重用度更高。 -
开发和发布速度更快
因为拆分成了多个服务模块,可以同时平时开发,所以提高了开发和发布速度。 -
扩展性更高
分布式有什么优点
-
会把模块拆分,使用接口通信,从而降低模块之间的耦合度。
-
会把项目拆分成若干个子项目,不同的团队负责不同的子项目。
-
增加功能灵活,只需要增加一个子项目,调用其他系统的接口就可以。
-
能够灵活地进行分布式部署。
-
代码复用性提升极大。
分布式有什么缺点
-
系统之间交互需使用远程通信,使接口开发增大工作量。
-
部署单个服务会比较快,但是如果一次部署需要多个服务,部署会变得复杂。
-
系统的吞吐量会变大,但是响应时间会变长。
-
测试和查错的复杂度增大。
-
提高了维护和运维的复杂度。
Java 自身实现网络通信的方式(Java 网络编程)
-
就是
TCP/IP、UDP/IP 与 BIO、NIO
进行相互组合形成 4 种方式。 -
TCP/IP + BIO、TCP/IP + NIO、UDP/IP + BIO、UDP/IP + NIO。
TCP(Transmission Control Protocol,传输控制协议):一种面向连接的、可靠的、基于字节流的传输层通讯协议
-
传输控制协议,
面向连接
的协议 -
两台机器的可靠无差错的数据传输
-
双向字节流传递
UDP(User Datagram Protocol,用户数据报协议):无连接无状态的传输层通讯协议
-
用户数据报协议,面向
无连接
协议(发送方发送消息后,如果接收方不在目的地,那这个消息就丢失了) -
不保证可靠的数据传输(发送方无法得知是否发送成功)
-
速度快
,也可以在较差的网络下使用(好处是:简单、节省、经济)
BIO(Blocking I/O)同步阻塞通讯方式
-
一个线程可以管理一个连接
。 -
如果连接多了,线程数量不够,就只能等待,即会发生阻塞。
-
BIO 是单向的,要么是输入流要么是输出流。
-
BIO 主要是以 I/O 流的形式处理数据,效率:块 > 流。
-
BIO 主要是以字节流和字符流操作。
NIO(Non-Blocking I/O)同步非阻塞通讯方式
-
一个线程可以管理多个连接
。 -
客户端发送的连接都会注册到多路复用器上,然后进行轮询连接,有I/O请求就处理。
-
不是异步的,只是一个线程管理多个管道。
-
减少线程多的压力。
-
避免同步 I/O 通讯效率过低。
-
NIO 是双向的,可以从 channel(通道)往 buffer(缓冲区)读写数据,同时 buffer 也可以向 channel 读写数据。
-
NIO 以 I/O 块(buffer)的形式处理数据,效率:块 > 流。
-
NIO 是基于 channel、buffer 操作的,而 selector(选择器)是用来监听 channel 的。
AIO(Asynchronous I/O)异步非阻塞通讯方式
-
异步 I/O,采用回调方法进行处理读写操作
。 -
引入了异步通道,采用的是 proctor(监考人)模式,特点是:有效的请求才启动线程,先由操作系统完成后再通知服务端。
-
有三大组件:selector(选择器),channel(通道),buffer(缓冲区)。
-
一个线程对应 selector,一个 selector 对应三个 channel,而一个 channel 又对应 buffer(双向)。
-
程序切换到哪个 channel 取决于 event(事件)决定,selector 会根据事件去切换 channel。
-
buffer是一个内存块,底层有一个数组。