RPC&Netty 原理|学习笔记

简介: 快速学习 RPC&Netty 原理

开发者学堂课程【阿里巴巴分布式服务框架 Dubbo 快速入门RPC&Netty 原理】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/624/detail/9476


RPC&Netty 原理


内容介绍:

一、RPC 原理

二、netty 原理


一、RPC原理

1.rpc 的原理

rpc 就是完成一次远程过程调用

image.png

比如:

computer01的某一个客户端,想要调用 computer02服务端的某处代码,首先发起一个远程调用请求,接下来有一个代理对象,把想要调用的这些信息,通过网络传输给我们服务端,服务端收到想要调哪个方法以及参数以后,服务端去调用本地的方法。

这个方法调用完成以后,服务端代理把调用后的结果又通过网络传输出来,然后客户端代理收到结果以后,就把这个结果返回。

2.一次完整的 RPC 调用流程(同步调用,异步另说)

(1)服务消费方(就是客户端)调用以本地调用方式调用服务,(就像写 double  一样,调一个接口,调一个方法就行);

(2)Client stub(认为这是一个客户端的代理)接收到调用后负责将方法、参数等组装成能够进行网络传输的信息体(比如要调用什么方法,包括的方法用的参数等等是什么,要将这些信息组装成能在网络间传输的这些消息。);

(3)Client stub 找到服务地址,并将信息发送到服务端(消息包含要哪个方法,方法的参数等);

(4)Server stub 收到消息后,进行解码;(有可能传的是一个对象,需要在网络中传输,它就要反序列化等)

(5)Server stub 根据解码结果调用本地的服务(解码得到参数的信息等,根据这些再来调用本地的方法)

(6)本地服务执行并将结果返回给 Server stub(本地方法会传出相应的方法返回的数据,把返回数据传给服务端的代理)

(7)Server stub 将返回结果打包成消息并发送至消费方(客户端收到,代理将这个数据重新序列化,称为把这个数据重新打包成消息通过网络又发送出来)

(8)Client stub 接收到消息,并进行解码(客户端收到内容以后,把这些内容进行解码得到要用的返回值,比如把序列化过来的数据,

反序列化成想要的对象,)

(9)服务消费方得到远程调用服务端代码的反馈最终结果

3.dubbo

(1)用 dubbo 只有两步,第一步,就是面向接口的方式调一个远程方法,第二步直接拿到结果。

(2)中间的整个过程是透明的,rpc 框架,它的作用就是想要把中间的过程封装起来。它要做一个对象,代理对象要来发送编解码数据,包括要连上网络等。

这一系列环节都是应该有 rpc 框架来做的,这是 rpc 的一个简单流程,

(3)Dubbo 也是一个 rpc 框架,也会遵循这几个步骤,在调试源码时注意当前到底在哪一个环节。

包括 double 底层进行通信的时候,ab 两个服务器要通信,它是使用一个框架叫90媒体是基于 Java 的 NIO 进行通信。


二、netty 原理

1.IO

简单来说,习惯性把 nio 称为 Non-blocking IO,也就是非阻塞 IO,BIO 就是 Bocking IO 阻塞式的 IO。

所谓的 IO 就是指无论是网络间的数据传输叫网络 IO还是本地磁盘的数据传输,叫本地的 IO,他们都算是 IO

2.BIO 就是 Bocking IO 阻塞式的 IO。

image.png

假设这是一个服务器,用 BIO 的模式

每一个请求进来,要接收传来的数据,开一个 socket 的开线程来处理数据。来读取 socket 传来的数据,获取到流入在这读取等等,

包括读到数据以后,进行业务逻辑,操作完以后再返回,与此同时服务器可能会收到很多的请求,同时在这操作。而且此时,在业务逻辑没完成之前,这个线程都是不能得到释放的,那这样服务器就不能同时处理大量的请求,因为有大量的线程在这阻塞在这等待业务逻辑的完成。

3.NIO

测试可以采用的 NIO 的方式,NIO 多了一些概念

image.png

(1)channel 是通道;还有一个 buffer 来进行数据传输,selector 称为选择器,也称为多路复用。

(2)原理

select 注册了很多的通道,相当于每一个请求进来,传递数据或者其它都可以弄成通道。

selector 过来监听多个通道,当发现某一个通道的数据准备好了,比如某一个连接过来了,可以 selector 连接

比如 contact,连接成功; accept 接收数据准备就绪;read 读取就绪;right 就绪了怎么办?

通过一个 select 来监听多个通道的方式,

某一个通报的任何一个状态准备好了,可以额外的开一个线程来做。这就是多路复用的模型。

它就不像 BIO 一样,每一个请求进来就直接开一个线程慢慢执行在这阻塞,NIO 使用 selector 来进行多个通道的各种事件,感兴趣的事件就绪了以后,再开一个线程去执行相关的工作。

4.netty 原理

netty 是基于 NIO 的多路复用模型来做的

image.png

(1)netty 过程

首先 netty 服务器启动,绑定监听某一个端口,比如 dubbo 的20880,所有给20880端口发的数据,netty 服务器都能收到。

启动以后它会初始化服务器的通道,这个通道初始化好以后注册到 selector 中,就是多路复用器,负责监听一个事件,如图监听 stepl 的事件:当通道已经准备就绪,接下来就要处理通道里边的信息。

与客户端建立起连接,来生成 NioSocketChannel,这就是与客户端连接的通道,然后把这个通道注册到 selector 里边,selector 监听 READ 和 WRITE 事件,相当于通道里数据读准备就绪和数据写准备就绪。读准备就绪,相当于请求发来的数据已经收完,可以读了;写准备就绪,就是可以给客户端通道写响应了。

(2)读写都准备就绪以后,处理事件,比如读准备就绪,要做的任务也准备就绪,做一个任务,这时任务都会抛给任务队列,ANT 把这个任务队列执行完。包括我们监听 accept 也一样,也会生成任务队列,当监听好要去做什么,整个任务队列运行完成,整个 netty 就结束了。

(3)这有两个线程组,一个叫 boss,一个叫 worker。

Boss 其实就是用来监听主线程,来自于20880的所有连接准备就绪事件,这个worker 就是当准备就绪以后,要做什么工作,把这个工作抛给 worker,让 worker 慢慢来做。

相关文章
|
6月前
|
网络协议
【Netty 网络通信】Socket 通信原理
【1月更文挑战第9天】【Netty 网络通信】Socket 通信原理
|
6月前
|
Java Unix Linux
【Netty技术专题】「原理分析系列」Netty强大特性之Native transports扩展开发实战
当涉及到网络通信和高性能的Java应用程序时,Netty是一个强大的框架。它提供了许多功能和组件,其中之一是JNI传输。JNI传输是Netty的一个特性,它为特定平台提供了高效的网络传输。 在本文中,我们将深入探讨Netty提供的特定平台的JNI传输功能,分析其优势和适用场景。我们将介绍每个特定平台的JNI传输,并讨论其性能、可靠性和可扩展性。通过了解这些特定平台的JNI传输,您将能够更好地选择和配置适合您应用程序需求的网络传输方式,以实现最佳的性能和可靠性。
145 7
【Netty技术专题】「原理分析系列」Netty强大特性之Native transports扩展开发实战
|
3月前
|
Java 调度
Netty运行原理问题之ChannelHandler在Netty中扮演什么角色
Netty运行原理问题之ChannelHandler在Netty中扮演什么角色
|
3月前
|
编解码 网络协议 API
Netty运行原理问题之Netty的主次Reactor多线程模型工作的问题如何解决
Netty运行原理问题之Netty的主次Reactor多线程模型工作的问题如何解决
|
3月前
|
编解码 网络协议 开发者
Netty运行原理问题之NettyTCP的粘包和拆包的问题如何解决
Netty运行原理问题之NettyTCP的粘包和拆包的问题如何解决
|
6天前
|
存储 Dubbo Java
分布式 RPC 底层原理详解,看这篇就够了!
本文详解分布式RPC的底层原理与系统设计,大厂面试高频,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
分布式 RPC 底层原理详解,看这篇就够了!
|
3月前
|
调度
Netty运行原理问题之事件调度工作的问题如何解决
Netty运行原理问题之事件调度工作的问题如何解决
|
3月前
|
开发者
Netty运行原理问题之Netty高性能实现的问题如何解决
Netty运行原理问题之Netty高性能实现的问题如何解决
|
3月前
|
API 开发者
Netty运行原理问题之Netty实现低开发门槛的问题如何解决
Netty运行原理问题之Netty实现低开发门槛的问题如何解决
|
5月前
|
网络协议 网络架构
RPC原理解析
RPC原理解析
92 0