RPC 框架基本了解
#博学谷IT学习技术支持#
目录
1. 应用场景
2.RPC框架的基本调用生命周期
2.1 获取调用方的ip、port - 注册中心
2.2 代理技术 - 动态代理
2.3 封装数据 - 序列化技术
2.4 网络模块
3. RPC 的一些扩展功能
3.1 超时重试
3.2 负载均衡
3.3 熔断限流
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
这边还是我初步的理解,后面会把它完善一下。
RPC 框架基本了解相关推荐
- 轻量级分布式 RPC 框架
RPC,即 Remote Procedure Call(远程过程调用),说得通俗一点就是:调用远程计算机上的服务,就像调用本地服务一样. RPC 可基于 HTTP 或 TCP 协议,Web Servi ...
- windows下rpc框架thrift的环境配置
windows下rpc框架thrift的环境配置 引用链接: https://www.cnblogs.com/49er/p/7193829.html 最近在弄windows下 的Facebook的rp ...
- Java分布式 RPC 框架性能大比拼,Dubbo真的最差吗?
点击上方"搜云库技术团队",选择"设为星标" 回复"1024"或"面试题"获取学习资料 Dubbo 是阿里巴巴公司开源的 ...
- 分布式RPC框架性能大比拼
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:鸟窝 链接:http://985.so/aXe2 Dubbo ...
- Java分布式 RPC 框架性能大比拼,Dubbo最差?
点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 Dubbo 是阿里巴巴公司开源的一个Java高性能优秀的服务框架,使得应用可通过高性能的 RP ...
- 如何手撸一个较为完整的RPC框架
[文章作者/来源]一个没有追求的技术人/https://sourl.cn/sJ4Brp 缘 起 最近在公司分享了手撸RPC,因此做一个总结. 概 念 篇 RPC 是什么? RPC 称远程过程调用(Re ...
- 花了一个星期,我终于把RPC框架整明白了!
" RPC(Remote Procedure Call):远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想. 作者:李金葵,来自:51CTO技术栈 R ...
- Java实现简单的RPC框架
一.RPC简介 RPC,全称为Remote Procedure Call,即远程过程调用,它是一个计算机通信协议.它允许像调用本地服务一样调用远程服务.它可以有不同的实现方式.如RMI(远程方法调用) ...
- 微服务架构介绍和RPC框架对比
微服务架构介绍和RPC框架对比 1.微服务架构 1.1 特征 自动化部署,端点智能化,语言和数据的去中心化控制. 1.2架构 一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中 ...
- 分布式架构探索 - 2. WebService RPC框架之Apache CXF
Apache CXF是一个开源的WebService RPC框架. 例子: 1. 新建一个maven web项目, 添加pom 如下: <?xml version="1.0" ...
最新文章
- 恶犬秒变萌汪:东京大学开源“治愈系”GAN图片拼贴工具 | 技术头条
- 99%的数据工作者不曾知道的一款利器
- 从工作经历和实践理论看工业互联网的发展
- [号外] Blazor wasm 其实也挺快!
- JavaWeb项目:简易小米商城系统
- pxe自动部署Linux,Kickstart+PXE自动部署CentOS6.6
- 华科网络内容管理系统 v5.6 手机 PC
- python接口编程_Python 中的面向接口编程
- Python学习笔记之While循环(一)
- 熵的理解(玻尔兹曼分布)
- 聊聊jQuery is not defined
- word---自定义编号样式
- 2011最新笔记本、一体机显卡性能排行
- TP-Link 886nV6 刷第三方系统回忆
- php px与rem转换,pt 与 px、em、rem 的区别与换算
- WPS当中封面图如何快速对齐下划线
- 剑与家园服务器维护,剑与家园合服爆料 合服规则介绍
- 软件测试入门全流程精华总结【必看 知识点很全】
- Python让Excel飞起来—批量进行数据分析
- linux命令忽略大小写zip,Linux基础命令---unzip