我是靠谱客的博主 冷傲万宝路,最近开发中收集的这篇文章主要介绍netty连接nbiot_RPC 实战与原理 精简版,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

什么是 RPC?

Remote Procedure Call,远程过程调用。

RPC 有什么作用?屏蔽远程调用、本地调用的区别

隐藏底层网络通信的复杂性,让我们更专注于业务

RPC 步骤

84dabb7e0cbaa7438878d76e68be23a0.png

为什么需要序列化?网络传输必须是「二进制」,调用方的参数都是对象

请求↔二进制消息体

零拷贝

什么是零拷贝?

5a7f109a692179fdeb94d9f056a6a699.png

为什么需要零拷贝?

网卡等操作,只能通过内核操作,应用程序要发送网络数据,需要将数据复制到内核。

如何实现零拷贝?

虚拟内存mmap + write

sendfile

Netty 的零拷贝有何不同?一个请求,可能拆分成多个数据包

数据包的组合在用户空间,解决用户空间内存的拷贝处理问题,CompositeByteBuf

也包括用户空间、内核空间的数据拷贝:Direct Buffers

动态代理实现JDK:只能代理接口

Javassist:操作底层字节码,不需要反射,性能好

Byte Buddy:更容易的 API,速度比 Javassist 快,Spring、Jackson 使用

HTTP/2 特性多路复用,同一链路双向发送stream数据

Header 压缩

为什么需要服务发现?

公共的“通讯录”

为什么不用 DNS?DNS多级缓存,且缓存时间长

需要搭建负载均衡,额外成本

定时任务 & 时间轮

定时任务的问题?future 启动线程进行异步编程,sleep

如果5秒超时,高并发的

让CPU额外轮询遍历,浪费CPU

时间轮的应用延迟消息

订单过期(10分钟未付款,取消订单)

时钟轮本质

减少额外的扫描操作

时间轮在 RPC 的应用

调用端请求的超时处理,节省CPU

时间轮实现

Netty的 TimeWheel

如何注册和发现服务?RPC Server 提供服务,向 Registry 注册自身

RPC Client 调用服务,从 Registry 拉取服务列表

Server 节点变更时,同步变更,Client 感知刷新本地的「服务节点列表」

f1fc6924dd2e6e46b688942ddeff3abc.png

实现:注册中心 API

服务健康状态监测:ZooKeeper 的会话超时控制机制

服务状态变更通知:ZooKeeper 的 Watcher 机制

如何实现 RPC 远程调用?客户端、服务端如何建立网络连接:HTTP、Socket

服务端如何处理请求:NIO(使用 Netty)

数据传输采用什么协议

数据如何序列化、反序列化:JSON,PB,Thrift

如何追踪微服务?

核心理念:调用链,全局唯一的 ID 将同一请求串联起来,从而还原调用关系,统计系统指标。

df015083aa29f3f17effa388f8dee5ea.png

注册中心选型高可用集群部署:多个实例

多机房部署:一个机房断电等不可抗因素

数据一致性CP 型:ZooKeeper(Redis),强一致性,机房间断网,注册中心不可用

AP 型:牺牲一致性,保证可用性。Eureka

开源 RPC 框架

限定语言Dubbo:Java,阿里

Motan:Java,微博

Tars:C++,腾讯(已支持多语言)

Spring Cloud:Java网关 Zuul

注册中心 Eureka

服务超时熔断 Hystrix

调用链监控 Sleuth

日志分析 ELK

跨语言 RPC 框架gRPC:HTTP/2

Thrift:TCP

Spring Cloud 微服务架构

b18471958b4f7f347706d9edd2b3eb66.png

代码、思维导图笔记链接

代码和思维导图在 GitHub 项目中,欢迎大家 star!

coding 笔记、点滴记录,以后的文章也会同步到公众号(Coding Insight)中,希望大家关注_

ea64c088d234e1eb38669b6351cf7e91.png

最后

以上就是冷傲万宝路为你收集整理的netty连接nbiot_RPC 实战与原理 精简版的全部内容,希望文章能够帮你解决netty连接nbiot_RPC 实战与原理 精简版所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部