怎么进行RPC实战与原理的分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
Remote Procedure Call,远程过程调用。
屏蔽远程调用、本地调用的区别
隐藏底层网络通信的复杂性
,让我们更专注于业务
网络传输必须是「二进制」,调用方的参数都是对象
请求↔二进制消息体
网卡
等操作,只能通过内核操作
,应用程序
要发送网络数据,需要将数据复制到内核
。
虚拟内存
mmap + write
sendfile
一个请求,可能拆分成多个数据包
数据包的组合在用户空间,解决用户空间内存的拷贝处理问题,CompositeByteBuf
也包括用户空间、内核空间的数据拷贝:Direct Buffers
JDK:只能代理接口
Javassist
:操作底层字节码
,不需要反射,性能好
Byte Buddy
:更容易的 API,速度比 Javassist 快,Spring、Jackson 使用
多路复用
,同一链路双向发送stream数据
Header 压缩
公共的“通讯录”
DNS多级缓存,且缓存时间长
需要搭建负载均衡,额外成本
future 启动线程进行异步编程,sleep
如果5秒超时,高并发的
让CPU额外轮询遍历,浪费CPU
延迟消息
订单过期(10分钟未付款,取消订单)
减少额外的扫描操作
调用端请求的超时处理,节省CPU
Netty的 TimeWheel
RPC Server
提供服务,向 Registry 注册自身
RPC Client
调用服务,从 Registry 拉取服务列表
Server 节点变更时,同步变更,Client 感知刷新本地的「服务节点列表」
实现:
注册中心 API
服务健康状态监测:ZooKeeper 的会话超时控制机制
服务状态变更通知:ZooKeeper 的 Watcher 机制
客户端、服务端如何建立网络连接:HTTP、Socket
服务端如何处理请求:NIO(使用 Netty
)
数据传输采用什么协议
数据如何序列化、反序列化:JSON,PB,Thrift
核心理念:调用链,全局唯一的 ID
将同一请求串联起来,从而还原调用关系,统计系统指标。
高可用
集群部署:多个实例
多机房部署:一个机房断电等不可抗因素
数据一致性
CP
型:ZooKeeper(Redis),强一致性,机房间断网,注册中心不可用
AP 型:牺牲一致性,保证可用性。Eureka
Dubbo:Java,阿里
Motan:Java,微博
Tars:C++,腾讯(已支持多语言)
Spring Cloud:Java
网关 Zuul
注册中心 Eureka
服务超时熔断 Hystrix
调用链监控 Sleuth
日志分析 ELK
gRPC:HTTP/2
Thrift:TCP
关于怎么进行RPC实战与原理的分析问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。