05_基础增强_第5天(轻量级RPC框架开发)_讲义.docx

05_基础增强_第5天(轻量级RPC框架开发)_讲义.docx

第 2 天 轻量级 RPC 框架开发 今天内容安排: 1、掌握 RPC 原理 2、掌握 nio 操作 3、掌握 netty 简单的 api 4、掌握自定义 RPC 框架 1. RPC 原理学习 1.1. 什么是 RPC RPC (Remote Procedure Call Protocol) ——远程过程调用协议,它是一种通过网络从远 程计算机程序上请求服务, 而不需要了解底层网络技术的协议。 RPC 协议假定某些传输协议 的存在,如 TCP 或 UDP,为通信程序之间携带信息数据。在 OSI 网络通信模型中, RPC 跨越 了传输层和应用层。 RPC 使得开发包括网络分布式多程序在内的应用程序更加容易。 RPC 采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服 务器。 首先, 客户机调用进程发送一个有进程参数的调用信息到服务进程, 然后等待应答信 息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器 获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息, 最后,客户端调用进 程接收答复信息, 获得进程结果,然后调用执行继续进行。 见代码 1.2. RPC 原理 运行时,一次客户机对服务器的 RPC 调用,其内部操作大致有如下十步: 1.调用客户端句柄;执行传送参数 2.调用本地系统内核发送网络消息 3.消息传送到远程主机 4.服务器句柄得到消息并取得参数 5.执行远程过程 6.执行的过程将结果返回服务器句柄 7.服务器句柄返回结果,调用远程系统内核 8.消息传回本地主机 9.客户句柄由内核接收消息 10.客户接收句柄返回的数据 1.3. hadoopRPC 演示 2. nio 原理学习 2.1. 简介 nio 是 New IO 的简称,在 jdk1.4 里提供的新 api 。Sun 官方标榜的特性如下: 为所 有的原始类型提供(Buffer)缓存支持。字符集编码解码解决方案。 Channel :一个新的原始 I/O 抽象。 支持锁和内存映射文件的文件访问接口。 提供多路(non-bloking) 非阻塞式的高 伸缩性网络 I/O 。 2.2. 传统 socket 和 socket nio 代码 见代码 2.3. socket nio 原理 2.3.1. 传统的 I/O 使用传统的 I/O 程序读取文件内容, 并写入到另一个文件(或 Socket), 如下程序: File.read(fileDesc, buf, len); Socket.send(socket, buf, len); 会有较大的性能开销, 主要表现在一下两方面: 1. 上下文切换(contextswitch), 此处有 4 次用户态和内核态的切换 2. Buffer 内存开销, 一个是应用程序 buffer, 另一个是系统读取 buffer 以及 socket buffer 其运行示意图如下 1) 先将文件内容从磁盘中拷贝到操作系统 buffer 2) 再从操作系统 buffer 拷贝到程序应用 buffer 3) 从程序 buffer 拷贝到 socket buffer 4) 从 socket buffer 拷贝到协议引擎. 2.3.2. NIO NIO 技术省去了将操作系统的 read buffer 拷贝到程序的 buffer, 以及从程序 buffer 拷贝到 socket buffer 的 步 骤 , 直 接 将 read buffer 拷 贝 到 socket buffer. java 的 FileChannel.transferTo() 方法就是这样的实现, 这个实现是依赖于操作系统底层的 sendFile() 实现的. publicvoid transferTo(long position, long count, WritableByteChannel target); 他的底层调用的是系统调用 sendFile()方法 sendfile(int out_fd, int in_fd, off_t *offset, size_t count); 如下图 3. netty 常用 API 学习 3.1. netty 简介 Netty 是基于 Java NIO 的网络应用框架. Netty 是一个 NIO client-server(客户端服务器)框架,使用 Netty 可以快速开发网络应用, 例如服务器和客户端协议。 Netty 提供了一种新的方式来使开发网络应用程序,这种新的方 式使得它很容易使用和有很强的扩展性。 Netty 的内部实现时很复杂的,但是 Netty 提

文档评论(0)

1亿VIP精品文档

相关文档