【9-2:RPC设计】

RPC

  • 1. 基础
    • 1.1 定义&特点
    • 1.2 具体实现框架
    • 1.3 应用场景
  • 2. RPC的关键技术点&一次调用rpc流程
    • 2.1 RPC流程
      • 流程
      • 两个网络模块如何连接的呢?
      • 其它特性
      • RPC优势
    • 2.2 序列化技术
      • 序列化方式
      • PRC如何选择序列化框架
      • 考虑因素
    • 2.3 应用层的通信协议-http
      • 什么是IO
        • 操作系统的IO模型有哪些
    • 2.4 动态代理
      • 其它动态代理方案
    • 2.5 基于ZK注册的原理
      • 基于zk注册数据的存储结构-以dubbo为例
    • 2.6 容错策略之超时重试
      • 什么是超时重试?
      • 如何检测请求是否超时?
      • 时间轮算法
    • 2.7 熔断限流
      • 熔断降级的概念
      • 如何判断熔断
      • 熔断工作合适开始?又合适结束
      • 有了熔断降级为何还要限流?
      • 常见的限流算法
  • 3. 实现一个自己定义的RPC框架-mini版
    • PRC框架
    • 网络模块

1. 基础

1.1 定义&特点

RPC,remote procedure call,远程过程调用,它定义了一台机器上的程序去调用另一台机器上子程序的这一行为
特点:

  • 把远程实现搬到了本地,效果上远程调用和本地调用没有差别
  • 使用cs模式,客户端发起请求,服务端接收请求参数后执行
  • 屏蔽跨进程跨网络调用底层复杂性让我们更专注于业务逻辑

1.2 具体实现框架

  1. dubbo(apache alibaba java)
  2. motan(微博)
  3. tars(腾讯内部)
  4. grpc
  5. thrift
  6. spring cloud openfeign

1.3 应用场景

跨网络通信都可以用

2. RPC的关键技术点&一次调用rpc流程

2.1 RPC流程

流程

在这里插入图片描述
在这里插入图片描述

  1. 客户端调接口走到代理类,组装请求并序列化,然后协议编码并发送
  2. 服务端收到请求,进行协议解析以及反序列化拿到请求参数
  3. 服务端根据请求参数调用接口实现,然后组装响应
  4. 响应按同样的方式返回

两个网络模块如何连接的呢?

在这里插入图片描述

注册中心就是一个存数据的地方,最好可以提供监听功能。注册中心与rpc框架是分开的
常见的注册中心:zookeeper、nacos、etcd

其它特性

在这里插入图片描述

  • 路由筛选可用的提供者
  • 负载均衡:从可用的提供者种,选择具体用哪个
  • 熔断限流:流量控制
  • 网络处理
  • 协议处理

RPC优势

  1. 让构建分布式应用更容易,解耦服务,容易扩展
  2. RPC一般使用长连接,不必每次通信都要建立连接,减少网络开销

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/42064.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vortex GPGPU的硬件设计和代码结构分析

文章目录 前言一、GPGPU是什么?1.1 GPU和GPGPU之间的差异1.2 GPU和CPU之间的集成方式1.3 GPU包含什么(列举和VMIPS向量体系结构的差异) 二、Vortex GPGPU是什么?2.1 Vortex GPGPU的技术边界和验证环境2.2 Vortex GPGPU的指令集设计…

安卓稳定性之crash详解

目录 前言一、Crash 的基本原理二、Crash 分析思路三、实例分析四、预防措施五、参考链接 前言 在开发和测试 Android 应用程序时,遇到应用程序崩溃是很常见的情况。 Android 崩溃指的是应用程序因为异常或错误而无法正常执行,并且导致应用强制关闭。 一…

p11函数和递归

递归与迭代 求n的阶乘。&#xff08;不考虑溢出&#xff09; int Fac1(int n) {int i0;int ret1;for(i1;i<n;i){ret*i;}return ret; } int main(){//求n的阶乘int n0;int ret0;scanf("%d",&n);retFac1(n);printf("%d\n",ret);return 0; } int Fac…

unity知识点 专项四 一文彻底说清楚(锚点(anchor)、中心点(pivot)、位置(position)之间的关系)

一 概述 想要使UI控件在屏幕中达到正确的显示效果&#xff0c;比如自适应屏幕尺寸、固定边距等等&#xff0c;首先要理清楚几个基本概念和设置&#xff1a;锚点(anchor)、中心点(pivot)、位置(position)、UI缩放模式、父物件的transform设置 二 Anchor、Pivot与Position 2…

网络连接线相关问题

问题1&#xff1b; 直通线为什么两头都是T568B&#xff1f;是否可以两台T5568A&#xff1f;或者任意线序&#xff0c;只需两头一致&#xff1f; 不行&#xff0c;施工规范规定。&#xff08;原因&#xff1b;网线最长距离100m&#xff0c;实际用起来要把网线包管&#xff0c;走…

【分布式系统】Filebeat+Kafka+ELK 的服务部署

目录 一.实验准备 二.配置部署 Filebeat 三.配置Logstash 四.验证 一.实验准备 结合之前的博客中的实验 主机名ip地址主要软件es01192.168.80.101ElasticSearches02192.168.80.102ElasticSearches03192.168.80.103ElasticSearch、Kibananginx01192.168.80.104nginx、Logs…

iperf3: error - unable to connect to server: No route to host

1.确认iperf3版本是否统一。 2.确认防火墙是否关闭。 关闭防火墙 : systemctl stop firewalld 查看防火墙状态: systemctl status firewalld 3.重新建起链接

自动驾驶算法———车道检测(一)

“ 在本章中&#xff0c;我将指导您构建一个简单但有效的车道检测管道&#xff0c;并将其应用于Carla 模拟器中捕获的图像。管道将图像作为输入&#xff0c;并产生车道边界的数学模型作为输出。图像由行车记录仪&#xff08;固定在车辆挡风玻璃后面的摄像头&#xff09;捕获。…

【ZIP压缩大揭秘】轻松掌握ZIP分卷压缩包的高效解压秘籍!

在这个信息爆炸的时代&#xff0c;文件大小常常成为我们分享与存储的绊脚石。幸运的是&#xff0c;ZIP分卷压缩技术如同一把钥匙&#xff0c;巧妙地将庞然大物分解成小巧易管理的部分。但面对这一串分卷压缩包&#xff0c;你是否也曾迷茫于如何高效解压&#xff0c;恢复文件的完…

解码Python字符串:‘r‘、‘b‘、‘u‘和‘f‘前缀的全面指南

&#x1f4d6; 正文 1 字符串前加’r’ 表示原始字符串&#xff0c;消除转义 print(abc\nde) # abc # deprint(rabc\nde) # abc\nde在下面这个列子中&#xff0c;如果不在路径字符串前面加r那么&#xff0c;路径中的空格就会出现问题 print(rD:\01 programming\09python\py…

全志A527 T527 cat /proc/cupinfo没有Serial问题

1.前言 我们有些客户是使用cpuinfo节点去获取系统的cpuid的,如下: cat /proc/cupinfo processor : 0 BogoMIPS : 48.00 Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp CPU impleme…

系统吃swap问题排查

目录 背景 问题 分析并解决 1.控制线程数 2.更换IO组件 3.Linux进程信息文件分析 总结加餐 参考文档 背景 隔壁业务组系统是简单的主从结构&#xff0c;写索引的服务(主)叫primary&#xff0c; 读索引并提供搜索功能的服务(从)叫replica。业务线同步数据并不是平滑的&…

static的理论学习

在说到static之前&#xff0c;需要先明确变量类型&#xff1a; 而在聊到变量类型之前我们可以将变量的两个属性好好学一学 变量的两个属性 作用域&#xff08;scope&#xff09;&#xff1a; 从内存的角度来看&#xff0c;就是变量存放在栈&#xff08;stack&#xff09;中&…

TypeError: Cannot read properties of null (reading ‘nextSibling‘)

做项目用的Vue3Vite, 在画静态页面时&#xff0c;点击菜单跳转之后总是出现如下报错&#xff0c;百思不得其解。看了网上很多回答&#xff0c;也没有解决问题&#xff0c;然后试了很多方法&#xff0c;最后竟然发现是template里边没有结构的原因。。。 原来我的index.vue是这样…

ELK+Filebeat+Kafka+Zookeeper

本实验基于ELFK已经搭好的情况下 ELK日志分析 架构解析 第一层、数据采集层 数据采集层位于最左边的业务服务器集群上&#xff0c;在每个业务服务器上面安装了filebeat做日志收集&#xff0c;然后把采集到的原始日志发送到Kafkazookeeper集群上。第二层、消息队列层 原始日志发…

Matlab手搓线性回归-非正规方程法

原理&#xff1a;wxb&#xff0c;x是输入&#xff0c;求得的结果与真实值y求均方误差。 采用链式法则求导 参数更新&#xff0c;梯度下降法&#xff08;批量梯度下降&#xff09; 随机生成数据&#xff1a; m100&#xff1b;生成100个数据&#xff0c;并添加随机噪声 clear; …

基于flask的猫狗图像预测案例

&#x1f4da;博客主页&#xff1a;knighthood2001 ✨公众号&#xff1a;认知up吧 &#xff08;目前正在带领大家一起提升认知&#xff0c;感兴趣可以来围观一下&#xff09; &#x1f383;知识星球&#xff1a;【认知up吧|成长|副业】介绍 ❤️如遇文章付费&#xff0c;可先看…

二次元转向SLG,B站游戏的破圈之困

文 | 螳螂观察 作者 | 夏至 2023年是B站游戏的滑铁卢&#xff0c;尽管这年B站的游戏营收还有40多亿&#xff0c;但相比去年大幅下降了20%&#xff0c;整整少了10亿&#xff0c;这是过去5年来的最大跌幅&#xff0c;也是陈睿接管B站游戏业务一年以来&#xff0c;在鼻子上碰的第…

鸿蒙语言基础类库:【@ohos.process (获取进程相关的信息)】

获取进程相关的信息 说明&#xff1a; 本模块首批接口从API version 7开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。开发前请熟悉鸿蒙开发指导文档&#xff1a;gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。…

昇思13天

ResNet50迁移学习 ResNet50迁移学习总结 背景介绍 在实际应用场景中&#xff0c;由于训练数据集不足&#xff0c;很少有人会从头开始训练整个网络。普遍做法是使用在大数据集上预训练得到的模型&#xff0c;然后将该模型的权重参数用于特定任务中。本章使用迁移学习方法对Im…