System_IO_RPC
2024-12-04 10:12:17 0 举报
系统级IO RPC原理
作者其他创作
大纲/内容
interProxy
单一连接
cpu3
IO 连接 模型
interface
endpointendpointRefinvokerinvokerref
EventLoopselector
IO读取
client
FC 函数调用 寻址SC 系统调用 中断 int 0x80RPC 远程调用 socketIPC 进程间通信 管道、信号、socket
协议的封装封包
计算
好像计算很快io密集型肯定有用户态内核态切换的过程,因为现在基于内核我们一般用同步的IO模型,程序自己串行read
consumer
queue
有状态consumer + provider端同步实现有状态协议(requestID)发送和接受可以异步连接可以共享使用
cpu0
EventLoopGroupboss
kernel 内存里
provider
通过关闭中断直接干预数据DMA拷贝
io读取
注册
当前服务,2个端口用的是一套handler逻辑只不过丰富了暴露的端口号而已
时间长短的窗口
框架的设计者多去使用单例
本机当前jvm有没有可能consumer和provider 在一起
app
网卡数据如何进入到app中,jvm的多路复用器如何接收数据
http可以吗? 可以本身是无状态C+P端 带requestID,双方都可以解析requestID,这就是有状态的。
面向service的datacontent
message每msg为单位触发我们的方法
service
netty:IO框架
hashMap
EventLoopGroupworker
local
handler注入到pipeline
线程
当,你用2个serverbootstrap,bind各自的端口号(每个可不可以多绑定几个?可以的)init:
mapk: refv: obj
EventLoopselectorlisten9090
在那种线程池种执行业务
通过集合的fd,逐一去内核发起读取queue
dispatcher
0,内核有buffer / queue1,读取的时候会出现 粘包拆包的处理
自定义的协议自定义性更强好实现有状态
异步
看你的业务需求隔离与不隔离
proxy
直接返回了
request,responserequestID有状态的通信
execute thread
调用
能不能实现有状态通信on http
遵从现实有可能provider端你不可控比如:provider是Tomcat,就不可控
LB
?系统调用搬运的过程如何让他搬运的更快
Local
cpu2
系统调用和计算串行了
cpu1
1,反射3,javasist2,spark 具备固定角色,单例对象 msg,判定(看过大数据更清楚)
servletfilter
用户体验度
HTTP协议作为载体
计算密集型CPU占用时间
IO模型:每请求对应一个连接还是多个请求复用一个连接(异步,串行)发送/接收
on nettyhttp server
C+P端遵从http约束报文的封装是否断开连接保障发送+返回为一个原子操作TCP 连接
client9090
来个自己的sbs注册的handler
IO thread
URL第三方http协议content on http
on netty自己实现的rpc传输协议自己实现编解码
endpointendpointRef抽象的通用接口send askrecivemsg 数据
多路复用器,如何从内核的queue中取数据
serverbootstrap,bind多个端口号
client8080
header协议自定义httprmi是否有状态
对象proxy
cpu
EventLoopselectorlisten8080
ooxx(){同步阻塞实现service(req,res)}
把RPC 前边写的重构下层次感
RPC
selector.selectedkeys() ->iteriter.remove()
并发可以很大:连接1,reactor模型,os 多路复用器epoll2,eventloop(selector) 占一个cpu3,io的读取是线性的(搬运,从内核到app)4,读取到的内容,可以在当前线程(阻塞后续io读取),也可以在其他线程5,考量:IO上的损耗,尤其在读取时间和资源的占比上6,尽量的是小包(好的压缩1,协议上减轻;2,好的压缩算法(压缩消耗cpu时间,但是cpu一定比io快))
网卡
面向接口
块设备b mmap字符设备c stream
注册发现service1:N
有事件的fd集合放到了jvm的直接空间
每请求对应一个连接
on netty 编解码http协议content on http
selector.select()
rpc
无状态在连接池取连接,并锁定连接发送和返回的生命周期里锁定
tomcat | jettyhttp server容器
容器hashmap
jvmqueue
底层会有优化网卡接收数据会有中断当网卡到来的数据极快os:操心,中断关了数据包其实先要进入内核的queue我的app到底应该以什么频率、速度去搬运内核的queue里的数据程序员能做的就是让线程更多的高频率搬运数据到app内存空间用户的数据包能到,但是返回的可能慢点
java序列化为啥header长度不一样path
连接池+mapping requestID
程序jvmC语言 虚拟机(解释器)使用了多路复用器 selector
io密集型和kernel有关
内核到jvmfd集合的一个增量的过程
连接可以“复用”串行使用也有池化的概念
Servlet 接口oncontainer
CPU
在jvm堆空间给你一个事件集
serverbootstrap,bind一个端口号
不删除jvm里的fd集合
interImp
EventLoopselectorlisten
自己实现rpc传输协议header+content
xml->文本写死了注解-> scan扫描注解
netty:IO框架线程
游戏Netty如何封装协议头
0 条评论
下一页