| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> RPC 框架基本了解(一) -> 正文阅读 |
|
[网络协议]RPC 框架基本了解(一) |
1. 应用场景一般我们在实际开发中或多或少,会用到一些接口开发,当然这边的接口不是interface ,是远程调用其他系统的接口,我两个不同的系统相互之间调用,需要对方写相应的接口文档,然后我们根据他的这个文档来组装数据,然后发送。一般呢我们有四种技术可以实现网络中的调用。 分别是socket、rmi、标准共有协议、和RPC。我们如果是单体应用的话,大都是使用标准共有协议里面的http+json 的方式进行网络调用的方式,RPC和这种有什么异同呢,RPC框架简而言之就像本地接口调用一样方便,我不需要写调用的逻辑类似httpclient、restTemplate 对于程序员而言只需要一个注解就可以完成远程的调用例如openfeign。 实际开发中我客户端写个接口,服务端写一个实现,就可以完成调用,即使他们不在一台机器上。 常见的RPC框架有Dubbo、gRPC、Thrift、Spring Cloud,这边Spring Cloud不是说他是一个RPC框架,只能说他里面有用到。 2.RPC框架的基本调用生命周期2.1 获取调用方的ip、port - 注册中心我要调用你的方法,我是不是得知道你的ip、端口。怎么获得呢,注册中心,当然也不是非得是注册中心,我存数据库行不行呢,我存配置文件行不行呢,也行,只是说注册中心功能更全面一点,我要是修改ip啥的之后,我RPC框架可以快速的感知到,并且修改。 常见的注册中心有zookeeper、consul、nacos等 2.2 代理技术 - 动态代理这边使用到动态代理技术主要是因为在一个项目里面我只写了一个接口,但是具体实现类是没有的,如果什么都不操作的话,那是不是就会报错,如果我们动态代理了,接口直接调用我们想调用的方法上去,这边的方法可以是任何方法。 动态代理技术也有很多jdk、cglib、asm、bytebuddy、javassist 2.3 封装数据 - 序列化技术我用调用你的什么类,你的什么方法,然后我的参数等等信息,我得打包一下告诉你,打包好了我得序列化,这样我才能通过网络给到你是不是? 那序列化技术也有很多种,例如jdk、json、Hessian、protobuf 是技术就会有好坏,那么我们从那些维度考虑呢
这边序列化完成之后还要按照应用层协议进行数据的组装。 2.4 网络模块这边简而言之就是把数据全变成010010001010之类可以在网络上传输的,这边也会涉及到网络协议、通信协议。 这边的技术主要是涉及网络io。 发送完成之后,对应的客户端会进行相反的操作。解析完成之后调用相关的方法。 3. RPC 的一些扩展功能就是让我们RPC框架更为智能的一些功能、例如超时重试、熔断限流、负载均衡等。 3.1 超时重试超时重试主要实现的方案是时间轮算法。时间轮还可以实现心跳等类似于定时任务的功能,但是这种算法开销更小。使用效率更高。 3.2 负载均衡这边涉及到一些负载均衡的算法。什么随机、轮询等。 3.3 熔断限流熔断我要是探测到服务端有报错,我就暂时不调用了,过段时间验证一下,如果成功就继续调用。 限流用到的算法例如 令牌桶? 这边使用的原理就是,你来一个请求要有令牌才可以去访问我的核心业务。没有我就会把这个请求丢弃掉,当然令牌桶还会有相关的问题,令牌是按照一定的速率生产令牌,那么没那么多交易来消费,桶就会满,那么某个时间段,大量的请求过来拿令牌,但是桶里的令牌足够多,会直接把后台应用打穿。 漏斗池 请求可以随便进,但是出去的话就会按照一定的速率打到后台应用 滑动窗口算法 每次执行一个窗口的请求,保证每个窗口的请求,不大于某个数量。 Sentinel 这边还是我初步的理解,后面会把它完善一下。 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 19:40:52- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |