前言:

这些内容是我从收集的Java核心知识点的PDF里面,分享了一小部分给大家,这知识一个很小的知识点,最近看很多朋友都在备战春招,我也希望这份PDF可以帮助到大家,查漏补缺,巩固自己了解的知识点,学习自己还不会的知识点,文末有该PDF的领取方式哦,此文档共283页包含30个核心知识点,带详细的解析,今天给大家分享的是Netty与RPC




rsync监听多个端口 netty监听多个端口_rsync监听多个端口


1.Netty 原理

Netty 是一个高性能、异步事件驱动的 NIO 框架,基于 JAVA NIO 提供的 API 实现。它提供了TCP、UDP 和文件传输的支持,作为一个异步 NIO 框架,Netty 的所有 IO 操作都是异步非阻塞的,通过 Future-Listener 机制,用户可以方便的主动获取或者通过通知机制获得 IO 操作结果。

2.Netty 高性能

在 IO 编程过程中,当需要同时处理多个客户端接入请求时,可以利用多线程或者 IO 多路复用技术进行处理。IO 多路复用技术通过把多个 IO 的阻塞复用到同一个 select 的阻塞上,从而使得系统在单线程的情况下可以同时处理多个客户端请求。与传统的多线程/多进程模型比,I/O 多路复用的最大优势是系统开销小,系统不需要创建新的额外进程或者线程,也不需要维护这些进程和线程的运行,降低了系统的维护工作量,节省了系统资源。与 Socket 类和 ServerSocket 类相对应,NIO 也提供了 SocketChannel 和 ServerSocketChannel两种不同的套接字通道实现。

2.1多路复用通讯方式

Netty 架构按照 Reactor 模式设计和实现,它的服务端通信序列图如下:


rsync监听多个端口 netty监听多个端口_RPC_02


客户端通信序列图如下:


rsync监听多个端口 netty监听多个端口_rsync监听多个端口_03


Netty 的 IO 线程 NioEventLoop 由于聚合了多路复用器 Selector,可以同时并发处理成百上千个客户端 Channel,由于读写操作都是非阻塞的,这就可以充分提升 IO 线程的运行效率,避免由于频繁 IO 阻塞导致的线程挂起。

2.2异步通讯 NIO

由于 Netty 采用了异步通信模式,一个 IO 线程可以并发处理 N 个客户端连接和读写操作,这从根本上解决了传统同步阻塞 IO 一连接一线程模型,架构的性能、弹性伸缩能力和可靠性都得到了极大的提升。


rsync监听多个端口 netty监听多个端口_rsync监听多个端口_04


rsync监听多个端口 netty监听多个端口_客户端_05


Netty RPC 实现

概念

RPC,即 Remote Procedure Call(远程过程调用),调用远程计算机上的服务,就像调用本地服务一样。RPC 可以很好的解耦系统,如 WebService 就是一种基于 Http 协议的 RPC。这个 RPC 整体框架

如下:


rsync监听多个端口 netty监听多个端口_客户端_06


关键技术

1.服务发布与订阅:服务端使用 Zookeeper 注册服务地址,客户端从 Zookeeper 获取可用的服务地址。

2. 通信:使用 Netty 作为通信框架。

3. Spring:使用 Spring 配置服务,加载 Bean,扫描注解。

4. 动态代理:客户端使用代理模式透明化服务调用。

5. 消息编解码:使用 Protostuff 序列化和反序列化消息。


rsync监听多个端口 netty监听多个端口_RPC_07


rsync监听多个端口 netty监听多个端口_rsync监听多个端口_08


rsync监听多个端口 netty监听多个端口_rsync监听多个端口_09