RPC框架(一):扫盲

news2024/9/20 16:36:51

文章目录

  • 一、概要
  • 二、RPC组成部分
  • 三、影响RPC框架性能的因素

一、概要

RPC作用?
让不同服务间调用方法像同一服务间调用本地方法一样
在这里插入图片描述

二、RPC组成部分

在这里插入图片描述

  • Client:RPC协议调用方

  • Server:远程服务方法的具体实现

  • Stub/Proxy:RPC代理存在于客户端,因为要实现客户端对RPC框架“透明”调用,那么客户端不可能自行去管理消息格式、不可能自己去管理网络传输协议,也不可能自己去判断调用过程是否有异常。这一切工作在客户端都是交给RPC框架中的“代理”层来处理的。

  • Message Protocol:两端都能识别的、共同约定的消息格式。RPC的消息管理层对网络传输所承载的消息信息进行编码和解码操作。

  • Transfer/Network Protocol:传输协议层负责管理RPC框架所使用的网络协议、网络IO模型。传输层还需要统一RPC客户端和RPC服务端所使用的IO模型。例如Hessian的传输协议基于HTTP(应用层协议);而Thrift的传输协议基于TCP(传输层协议)。

  • Selector/Processor:存在于RPC服务端,用于服务端的某一个RPC接口实现的特性(它并不知道自己是一个将要被RPC提供给第三方系统调用的服务)。所以在RPC框架中应该有一种“负责执行RPC接口实现”的角色。包括:管理RPC接口的注册、判断客户端的请求权限、控制接口实现类的执行在内的各种工作。

  • IDL:跨语言RPC框架一定会有IDL部分的存在。为了能找到一个各种语言能够理解的消息结构、接口定义的描述形式。

三、影响RPC框架性能的因素

  1. 网络IO模型:在高并发状态下RPC服务器性能会有很大差别,尤其是单位处理性能下内存、CPU资源的使用率。

  2. 基于的网络协议:可以采用应用层协议,也可以采用TCP协议,对工作性能有影响但不大。

  3. 消息封装格式是目前RPC协议性能差异最重要的原因。要考虑的问题:消息的易读性、描述单位内容时的消息体大小、编码难度、解码难度、解决半包/粘包问题的难易度。

  4. Schema 和序列化(Schema & Data Serialization)
    序列化和反序列化,是对象到二进制数据的转换,程序是可以理解对象的,对象一般含有 schema 或者结构,基于这些语义来做特定的业务逻辑处理。
    考察一个序列化框架一般会关注以下几点:

    • Encoding format 。是 human readable(是否能直观看懂 json) 还是 binary(二进制)。
    • Schema declaration 。也叫作契约声明,基于 IDL,比如 Protocol Buffers/Thrift,还是自描述的,比如 JSON、XML。另外还需要看是否是强类型的。
    • 语言平台的中立性 。比如 Java 的 Native Serialization 就只能自己玩,而 Protocol Buffers 可以跨各种语言和平台。
    • 新老契约的兼容性 。比如 IDL 加了一个字段,老数据是否还可以反序列化成功。
    • 和压缩算法的契合度 。跑 benchmark (基准)和实际应用都会结合各种压缩算法,例如 gzip、snappy。
    • 性能 。这是最重要的,序列化、反序列化的时间,序列化后数据的字节大小是考察重点。
      序列化方式非常多,常见的有 Protocol Buffers, Avro,Thrift,XML,JSON,MessagePack,Kyro,Hessian,Protostuff,Java Native Serialize,FST 。
  5. 实现的服务处理管理方式:您可以让RPC的Selector/Processor使用单个线程运行服务的具体实现(这意味着上一个客户端的请求没有处理完,下一个客户端的请求就需要等待)、您也可以为每一个RPC具体服务的实现开启一个独立的线程运行(可以一次处理多个请求,但是操作系统对于“可运行的最大线程数”是有限制的)、您也可以线程池来运行RPC具体的服务实现(目前看来,在单个服务节点的情况下,这种方式是比较好的)、您还可以通过注册代理的方式让多个服务节点来运行具体的RPC服务实现。

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

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

相关文章

基于SpringBoot的家庭理财记账系统的设计与开发

1.引言 随着社会的发展,社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景,运用软件工程原理和开发方法,它主要是采用java语言技术和mysql数据库来完成对系统的设计。整个…

Apache组件POI,将图片下载到Excel文件中并导出。

在日常的工作中,有时我们会遇到需要将数据库表中图片字段下载到Excel中的需求,为方便各位小伙伴今后的开发工作,我将分享出自己写的代码,在文章末尾有我上传到 Gitee 上的 Demo案例,希望大家喜欢。 将图片下载到Excel文…

[CKA]考试之Deployment管理pod扩缩容

由于最新的CKA考试改版,不允许存储书签,本博客致力怎么一步步从官网把答案找到,如何修改把题做对,下面开始我们的 CKA之旅 题目为: Task 扩容 deployment guestbook 为 6个pod 注意,如果题目要求先切换K8…

低价高品质的头戴式降噪耳机,还支持主动降噪,QCY H4体验

每天办公的时候,我都喜欢戴上耳机听音乐,开会的时候也会方便一些。以前我用过无线入耳式耳机,但是戴时间长了会让耳朵很痛苦,因为室内也不算热,所以我觉得头戴式蓝牙耳机很合适,目前我用的是这款QCY H4头戴…

Laravel 多字段去重count计数

Laravel 多字段去重count计数 背景:需要统计数据列表总条数(字段1、字段2去重统计) table:policy_view,去重字段admin_id和permission 期望结果:count不含重复统计数据 解决思路: 语法:DISTI…

appium下载安装及环境配置及夜神模拟器下载、nodejs安装

appium所需要的环境有:jdk、android sdk、Nodejs、appium客户端 此次教程只针对于windows jdk、Android sdk已下载安装配置好环境,此次教程不再重复记录 jdk可看这篇博文jdk安装及环境配置 Android sdk 可看这篇 Android SDK下载与安装 一、Nodejs安装 …

有哪些做任务赚佣金的平台 做任务挣钱的app

科思创业汇 大家好,这里是科思创业汇,一个轻资产创业孵化平台。赚钱的方式有很多种,我希望在科思创业汇能够给你带来最快乐的那一种! 做任务赚佣金的平台?做任务赚钱一直是一种流行的赚钱方式。现在有无数的app可以通…

优化细节令人惊叹,用户体验直接拉满!你的App也能如此丝滑!

启动时间是App使用者的第一体验,很多大厂都通过A/B实验论证启动速度的优化可以带来用户留存的显著收益,尤其是体量大的用户,启动时间缩短一点,留存增长一点,那就带来了非常大的收益。因此,启动性能优化一直…

济南中医风湿病医院受邀参加北坦街道“学习二十大 奋进新征程”主题党日活动

为学习贯彻党的二十大精神,中共天桥区北坦街道工作委员会于近日特组织开展“学习贯彻二十大精神 凝心聚力奋进新征程”联合主题党日活动,济南中医风湿病医院党支部预备党员卢雪梅同志受邀参加。 活动第一站,参观济南黄河文化展览馆。这是一部…

Microsoft Edge插件推荐:CSDN·浏览器助手

文章目录 1.简介2.安装3.总结 今天来给大家分享一个超级好用的Microsoft Edge插件,名为CSDN浏览器助手 1.简介 CSDN浏览器助手是一款集成本地书签、历史记录与 CSDN搜索(so.csdn.net) 的搜索工具,可以自定义Microsoft Edge的新标签页,还可以…

LangChain-Evaluation—如何评估LLM及其应用(三)

省流:目前没有真正完美的解决方案,比如分类有精度这样接近完美的评估方案,但LLM目前没有 This section of documentation covers how we approach and think about evaluation in LangChain. Both evaluation of internal chains/agents, b…

十五周算法训练营——背包问题

今天是十五周算法训练营的第十三周,主要讲背包问题专题。(欢迎加入十五周算法训练营,与小伙伴一起卷算法) 「背包问题:给你一个可装载重量为W的背包和N个物品,每个物品有重量和价值两个属性。其中第i个物品…

以加快工程和科学发展为使命,MathWorks 创新步履不止

一直以来,人类对于宇宙苍穹、高山峻岭的探索永不止步。今年是人类首次登月54周年,毋庸置疑,“登月计划”激发了全世界所有人的想象力。正由于这项计划,让耐高温的金属和合金防火面料、冻干食品及光伏电池、集成电路、计算机以及备…

解密Linux内核神器:内存屏障的秘密功效与应用方法

一、内存屏障简介 现在大多数现代计算机为了提高性能而采取乱序执行,这可能会导致程序运行不符合我们预期,内存屏障就是一类同步屏障指令,是CPU或者编译器在对内存随机访问的操作中的一个同步点,只有在此点之前的所有读写操作都执…

信号链噪声分析14

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 提示:这里可以添加技术概要 虽然噪声的均方根值可通过 q/√12 计算精确近似值,但在某些条件下,频域成分可能 与交流输入信号高度相关。例如,低幅度周期性信号的相关度大…

智慧厕所系统:革新公厕管理的智能解决方案

公厕是城市基础设施的重要组成部分,但由于管理难度大、人员分散等问题,公厕的管理一直是一个难题。智慧公厕系统通过智能化的监控设备和传感器,实时监测公厕的使用情况和卫生状况,并将数据传输到中央控制系统。管理员可以通过该系…

C++学习笔记-第8单元 运算符重载

第8单元 运算符重载 文章目录 第8单元 运算符重载单元导读单元导读1:深度学习与C单元导读2:向量、矩阵、张量 8.1 运算符重载与平面向量类8.1.1 运算符与函数的关系8.1.2 平面向量类8.1.3 C运算符函数8.1.4 [C11]左值、纯右值、将亡值 8.2 重载二元运算符…

极致呈现系列之终章:Vue3中封装Echarts组件

经过前面一系列博文的介绍,我已经详细地讲解了Echarts中涉及的各种图表类型。所以,我认为极致呈现系列文章到此基本告一段落了。作为这个系列文章的终章,我想探讨最后一个问题:如何封装Echarts组件。我觉得这是一个很好的结尾&…

黑马程序员-从0到1学习Linux-第一章 初识Linux

视频学习地址:黑马程序员新版Linux零基础快速入门到精通,全涵盖linux系统知识、常用软件环境部署、Shell脚本、云平台实践、大数据集群项目实战等_哔哩哔哩_bilibili 目录 操作系统概述 初识Linux系统 虚拟机介绍 VMware WorkStation安装 在VMware上…

【Langchain】GPT的高效插件

功能1:让模型具有memory 可以看到,langchain作为访问gpt的一个插件,可以让gpt模型通过memory变量将之前的对话记录下来,从而使模型具有记忆(在不改变模型参数的情况下)。 查看memory变量包含了什么&#…