首页 > 其他分享 >RPC学习记录

RPC学习记录

时间:2024-05-21 13:51:46浏览次数:27  
标签:调用 多路复用 记录 阻塞 学习 RPC IO select

RPC是帮助我们屏蔽网络编程细节,实现调用远程方法就跟调用本地方法一样的体验。

RPC是一个远程调用,需要通过网络来传输数据,并且RPC常用于业务系统之间的数据交互,需要保证其可靠性,所以一般默认采用TCP来传输。

 网络传输数据必须是二进制的,但是调用方请求的出入参数都是对象,对象没法直接进行网络传输,需要提前把转换成可传输的二进制,而且要求转换过程是可逆的,这个过程叫做序列化。

数据需要有一定的格式,这种约定内容叫做协议。大多数协议会分成两部分,分别是数据头和消息体。数据头一般用于身份识别,包括协议标识、数据大小、请求类型、序列化类型等,消息体主要是请求的业务参数信息和扩展属性等。

序列化

网络通信

常见的网络IO模型:同步阻塞,同步非阻塞,IO多路复用,异步非阻塞IO。

比较常用的是同步阻塞和IO多路复用。

IO多路复用:多个网络连接的IO可以注册到一个复用器(select)上,当用户进程调用了select,那么整个进程会被阻塞,同时内核会监视所有select负责的socket,当任何一个select数据准备好之后,这个时候用户进程再调用select 函数,将数据从内核拷贝到用户进程。

在编程语言上,无论C++还是Java,在高性能的网络编程框架编写上,大多数基于Reactor模型。其中最典型的就是java的netty框架,而Reactor是基于IO多路复用的。在非高并发场景下,同步阻塞IO是最常见的。

 RPC就是把拦截到的方法参数,转成可以在网络中传输的参数,并保证在服务提供方能正确的还原出语义,最终实现像调用本地一样调用远程方法。

心跳机制:健康状态、亚健康状态、死亡状态。

路由策略:

负载均衡:

重试机制:考虑业务逻辑幂等,超时时间重置,去掉有问题节点,

应用优雅关闭:

优雅启动

熔断机制:调用端可以通过熔断机制进行自我保护,防止调用下游服务出现异常,

RPC是解决应用间相互通信的框架,而应用之间的远程通信一般是不会暴露在公网上的。

 

标签:调用,多路复用,记录,阻塞,学习,RPC,IO,select
From: https://www.cnblogs.com/gaoshikenan/p/18110613

相关文章

  • Flutter 学习笔记:再次重新学习Flutter
    目录前言相关链接环境安装常见问题环境编译成功分析项目程序入口Wiget动态更新按照教程初始化项目弱化Flutter编译检查添加第一个按钮快速嵌套组件化数据更新:ChangeNotifier和StatefulWidgetDart中的委托修改好的代码运行效果总结前言作为一个开发了一年多的Uniapp的.NET开发工......
  • .net 4.8 webApi 文件下载部分代码记录
    privateHttpResponseMessageExportData(stringids,Func<string,string>exportFunc,stringdataNotExistsMsg){varfilePath=exportFunc.Invoke(ids);//检查文件是否存在if(!File.Exists(filePath)){......
  • 在机器学习项目中,将原始数据集划分为训练数据集和测试数据集划分比例的确定
    在机器学习项目中,将原始数据集划分为训练数据集和测试数据集是非常重要的一步。这个划分比例会影响模型的训练效果和对未来数据的泛化能力。虽然没有固定的规则,但有一些建议和常见做法可以参考:常见的划分比例70%训练/30%测试:这是一个较为传统的划分比例,被广泛应用于各种机器......
  • 学习心得
    今天是从盒模型开始的学习,一直以来我最不理解的就是HTML的布局和排版,虽然也有过一些了解。但总感觉有些模糊,今天在学习的过程中逐渐搞清了关于盒模型里的一些排列,对于padding、border和margin到底是什么,以及在浏览器中的位置的具体显示,这些已经清楚了。对于位置上的判定目前大致......
  • 学习和使用多个平台上的测试工具
    Postman:工具介绍:Postman是一款用于API开发和测试的工具,可通过创建请求、发送HTTP请求并查看响应来测试API的功能和性能。在项目中的使用:在充电桩电控系统项目中,可以使用Postman来测试系统的API接口。首先,创建针对不同功能的请求,如启动充电、停止充电、查询充电状态等。然后,发......
  • 深入学习Semantic Kernel:创建和配置prompts functions
    引言上一章我们熟悉了一下SemanticKernel的理论知识,Kernel创建以及简单的Sample熟悉了一下SK的基本使用。在SemanticKernel中的kernelfunctions由两部分组成第一部分是promptsfunctions(提示函数),第二部分Nativefunction(原生函数),kernelfunctions是构成插件(Plu......
  • MLOps 学习之旅「GitHub 热点速览」
    又是AI神仙打架的一周,上周OpenAI发布了最新的GPT-4o模型,而谷歌也紧跟着开源了Gemma2模型。随着AI大模型不断地变强,各大科技巨头正利用它们重塑自家的产品,这也让大模型算法工程师变得炙手可热,相关岗位需求正旺。对于普通程序员来说,想要转型成为大模型算法专家,可能会感......
  • auto_ptr和unique_ptr用法学习
    转自:https://blog.csdn.net/cpp_learner/article/details/118912592,chatgpt1.auto_ptr存在的问题复制或者赋值都会改变资源的所有权;auto_ptr 的设计有一些缺陷,特别是其所有权转移语义(transferofownership)。当一个 auto_ptr 被赋值或拷贝时,所有权会从源对象转移到目标对象......
  • C++基础知识学习笔记(1)
    资料来源https://www.bilibili.com/video/BV1et411b73Z/?spm_id_from=333.337.search-card.all.click&vd_source=cc561849591f6a210152150b2493f6f3简单知识点创建项目用VS创建了一个C++的空项目。在【源文件】中创建一个cpp文件书写以下代码并运行#include<iostr......
  • N 年前,为了学习分库分表,我把 Cobar 源码抄了一遍
    10几年前,互联网产业蓬勃发展,相比传统IT企业,互联网应用每天会产生海量的数据。如何存储和分析这些数据成为了当时技术圈的痛点,彼时,分库分表解决方案应运而生。当时最流行的Java技术论坛是javaeye,有位淘宝的技术人员分享了一篇分库分表的文章,这篇文章,我反复看了几十遍,想从......