rpc协议微服务器,RPC协议及实现方式(分布式微服务治理的核心)

2023-05-16

分布式微服务治理的核心在于: 微服务和分布式

(微服务框架)微服务的最优技术实现目前是: SpringBoot

(RPC框架)分布式的最优技术实现目前是: Thrift,Motan,Dubbo,Spring Cloud(Netflix OSS),Finagle,gRPC

RPC是什么

RPC 的全称是 Remote Procedure Call ,是一种进程间通信方式。

它允许程序调用另一个地址空间的过程或函数,而不用程序员显式编码这个远程调用的细节,程序员无论是调用本地的还是远程的,本质上编写的调用代码基本相同。

说两台服务器A、B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。

Remote Procedure Call,翻译过来应该是“远程程序调用”,目前业内通用的翻译是“远程过程调用”,但是“过程”这个词很容易造成误解,翻译成“程序”更好理解RPC的意义。

RPC协议说了什么

一般所谓的XX协议就是个文档,类似于我们的需求文档,只说了要做什么,但是具体怎么做是由各大开源大佬做的。一般情况下都会实现核心功能,不同的开源在细节上实现都会不一样,这个需要注意!

RPC 这个概念术语在上世纪 80 年代由 Bruce Jay Nelson 提出的,在 Nelson 的论文 "Implementing Remote Procedure Calls" 中,他提到了几个RPC的特点:

简单:RPC 概念的语义十分清晰和简单,这样建立分布式计算就更容易。

高效:过程调用看起来十分简单而且高效。

通用:在单机计算中过程往往是不同算法部分间最重要的通信机制。

除此之外,这位大佬还给出了实现RPC框架的详细架构图:

27e276702041

image.png

结合上图,Nelson 的论文中指出实现 RPC 的程序包括 5 个部分:

User

User-stub

RPCRuntime

Server-stub

Server

User 是调用方

User-stub 负责将调用的接口、方法和参数通过约定的协议规范进行编码

RPCRuntime 负责将本地数据传输到远端的RPCRuntime

Server-stub 负责根据约定的协议规范进行解码

Server 是被调用方

所以这架构图的意思是:当 user 想发起一个远程调用时,它实际是通过本地调用 User-stub。并通过本地的RPCRuntime传输 。远端 RPCRuntime 实例收到请求后交给 Server-stub 进行解码后发起本地端调用,调用结果再返回给 User 端。

实现RPC协议需要什么

看完协议内容,跟着就得实现这个协议啦,这时候你是不是发现了问题的严重性:自!己!一!点!思!路!都!没!有!

27e276702041

image.png

序列化协议和传输协议

所以我们需要再理解一下RPC协议,根据Nelson的论文知道我们要做的两件事:

将调用的接口、方法和参数通过约定的协议规范进行编码/解码(User-stub/Server-stub)

将本地数据传输到远端(RPCRuntime)

上述两点其实是实现RPC协议的两大要素:序列化协议和传输协议。

本地与远程调用的对比

因为RPC本质上是进程间通信,而“本地调用和远程调用的对比”实际上就是“进程内通信和进程间通信的对比”。通过两者的对比,我们才能理解到序列化协议和传输协议的作用,如下图:

27e276702041

image.png

理解单点式RPC框架和分布式RPC框架的区别

最基本的RPC框架就是单点式的,因为A服务直接调用B服务,不经过第三方,这种是最简单的。但是必须是A和B同时部署一套,A1只能调用B1,A2只能调用B2。

假设现在B服务出现了性能瓶颈,部署多台B服务的同时,也只能部署多台A服务,很浪费资源。

所以需要一台A服务对多台B服务,利用第三方服务(注册中心)找到其他B服务,而不是写死B服务的地址。这种RPC才是分布式RPC,也是业内主流。

单点式RPC框架(自己玩自己):

27e276702041

image.png

分布式RPC框架(自己玩自己,还能玩别人):

27e276702041

image.png

实现分布式RPC框架需要什么

单点RPC框架只需要:

序列化协议

传输协议

但是我们要做分布式的啊,所以需要:

序列化协议

传输协议

服务注册发现中心

实际上在生产环境中,我们需要实时监控服务的调用情况,所以需要一个微服务管理中心,甚至是一个自动化运维的管理中心,所以需要:

序列化协议

传输协议

服务注册发现中心

服务监控管理中心

在文章的第二节我们看到大佬论文中对RPC的总结,其中一个很重要的一点:“通用”。

对的,30年前的初衷更大的是需要解决异构系统的服务调用问题,序列化协议和传输协议必须是通用的才是好的RPC框架,你总不能只能Java用,然后C#用不了,Scala用不了,Go用不了吧。

比如某个服务的并发需求高需要用GO来解决,因为以前用的Java性能低下。然后你的RPC框架不支持GO,完蛋啦,中间的一个服务是GO写的,上层服务是Java来调用的,不支持跨语言的RPC,Go语言写的新服务完全用不了,那还玩个鸡儿。

所以我们需要:

序列化协议

传输协议

服务注册发现中心

服务监控管理中心

能跨语言调用(无关语言)

对的,能实现上述五点的,才是一个合格的RPC框架,但还不是优秀,因为我们还要考虑下性能。

说下业内流行的RPC框架和性能问题

先打个底,目前流行的RPC框架大多都是多管闲事,不单单只是RPC框架,你可以看看Dubbo和SpringCloud中除了RPC还有什么骚功能。

尤其是SpringCloud,很难分类,自己就是一个集成框架,把微服务框架SpringBoot集成进来了,把别人的注册发现服务集成进来了,本身自己又支持RPC,所以这货压根就不是一个单纯的RPC框架,简直就是一整套分布式微服务治理的解决方案!

可以看看别人的各种RPC框架总结:http://www.cnblogs.com/moonandstar08/p/6291283.html

在网上找到了个图,但是没有提到SpringCloud,暂且看看先,因为有些不认为是对的:

27e276702041

image.png

我们可以看到各个RPC框架使用的序列化协议,注册中心,管理中心,是否跨语言,但是传输协议没有提到。

性能问题

参考这篇博客:http://blog.csdn.net/jek123456/article/details/70208049

综合来说,在性能上rpcx是首选,但是考虑到框架的生态,其实还是推荐Dubbo或者SpringCloud的,因为除了性能,成本也是很重要的,无论是学习成本还是研发成本。

感谢

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

rpc协议微服务器,RPC协议及实现方式(分布式微服务治理的核心) 的相关文章

  • 函数模板和类模板成员函数的定义通常放在头文件中

    今天写程序时 xff0c 将函数模板的声明和定义分开放在头文件和 cpp文件中 xff0c 发生了连接错误 上网查看资料和查看 C 43 43 PRIMER 5 P582发现 xff0c xff1a 函数模板和类模板成员函数的定义通常放在头
  • 虚拟机防火墙关了怎么端口还是不能访问

    今天虚拟机启动时候发现网站不能访问了 xff0c 先在本地ping了下地址 xff0c 发现是可以ping通的 xff1b 然后telnet下 80 端口 xff0c 发现进不去 然后在虚拟机上面启动apache xff0c 发现不能访问
  • T84341 Jelly的难题1

    T84341 Jelly的难题1 题解 当窝发现窝的锅在读入这个矩阵的时候 xff0c 窝 窝 窝 果然 xff0c 一遇到和字符串有关的题就开始吹空调 好啦我们说说思路吧 BFS队列实现 拿出一个没有走过的点 xff0c 扩展它可以达到的
  • strtok(), strtok_s() 字符串分割函数

    strtok 函数原型 Check return CRT INSECURE DEPRECATE strtok s CRTIMP char cdecl strtok Inout opt z char Str In z const char D
  • iOS网络——NSURLCache设置网络请求缓存

    今天在看HTTP协议 xff0c 看到了response头中的cache control xff0c 于是就深入的研究了一下 发现了iOS中一个一直被我忽略的类 NSURLCache类 NSURLCache NSURLCache用于缓存网络
  • Maven 教程4-常用dos命令

    常用dos命令 mvn compile 编译mvn clean 清理mvn package 打包mvn package Dmaven test skip 61 true 跳过测试打包mvn package Dmaven test skip
  • Docker笔记

    lxc xff1a LinuX Container chroot xff0c 根切换 xff1b namespaces xff1a 名称空间 CGroups xff1a 控制组 简单使用 xff1a lxc checkconfig xff1
  • 芒果iOS开发之创建pch文件

    在Xcode6之前 xff0c 创建一个新工程xcode会在Supporting files文件夹下面自动创建一个 工程名 Prefix pch 文件 xff0c 也是一个头文件 xff0c pch头文件的内容能被项目中的其他所有源文件共享
  • HDU 1085

    题意 xff1a 有1 2 5三数 xff0c 你赋予他们各自的数量 xff0c 求他们所不能组成的最小数 分析 xff1a 首先想到暴力 xff0c 两层循环 暴力超时 xff0c 再寻他法 O n 2 include 34 cstdio
  • 谈谈对事件的理解(持续更新中)

    谈谈对事件的理解 xff1a 从前有一家人 xff0c 我们称为window家 window他其中有一个儿子叫事件 事件 事件他有很多好基友 xff0c 每次发生什么事情都会找到事件 xff0c 叫他帮忙查看一下那些细节出现了问题 可是事件
  • SSIS组件转换_排序、合并、合并联转换

    一 排序转换 xff08 Sort xff09 排序转换功能是按升序或降序对输入流中的数据进行排序 并将排序后的数据复制到转换输出中 它类似于T SQL中的order by 语句 下面以数据库AdventureWorks为例来介绍一下排序转
  • MariaDB 单表查询与聚合(5)

    MariaDB数据库管理系统是MySQL的一个分支 主要由开源社区在维护 采用GPL授权许可MariaDB的目的是完全兼容MySQL 包括API和命令行 MySQL由于现在闭源了 而能轻松成为MySQL的代替品 在存储引擎方面 使用Xtra
  • 详解python linecache模块读取文件的方法 分类: python...

    本节主要内容 xff1a python linecache模块读取文件 在python中 xff0c 有个好用的模块linecache xff0c 该模块允许从任何文件里得到任何的行 xff0c 并且使用缓存进行优化 xff0c 常见的情况
  • 【ubuntu】ubuntu安装WPS出现系统缺失字体

    ubuntu安装WPS出现系统缺失字体 1 官网下载WPS http community wps cn download 2 双击安装或者命令行安装 3 安装好后出现系统缺失字体问题 解决 xff0c 下载 xff1a https pan
  • 歪国人DIY的MINI四轴

    歪国人DIY的MINI四轴 Crazyflie 2 0 自己仿Crazyflie CrazyPony 转载于 https www cnblogs com LittleTiger p 4699001 html
  • Linux系统-CENTOS7界面美化

    前期准备 xff1a 在美化前 我们先安装一个扩展源 yum install y epel release 然后安装字体包 yum y install liberation mono fonts 安装gnome menis标准菜单实现 通常
  • [原创]Python+selenium+Chrome爬取excel网站

    最近要写一个水利网站的爬虫脚本 xff0c 将网页中2个excel的数据 xff0c 爬到一个excel表里 恩 xff0c 就是下面的网页截图 xff0c 一左一右两张表 左边日期控件 xff0c 输入对应日期查询相应日期的数据 看到这么
  • el-select绑定值为对象时,报错[Vue warn]: <transition-group> children must be keyed: <ElTag>...

    解决方法 xff1a lt el select v model 61 34 syncParams toSlaveList 34 multiple value key 61 34 ip 34 placeholder 61 34 请选择 34
  • iOS开发零基础教程之真机调试流程

    本讲主要内容 xff1a 1 真机测试前准备工作 2 第一步创建App ID 3 第二步创建开发证书Development Certificate 4 第三步打开本地钥匙串创建CSR文件 5 第四步添加设备 6 第五步创建描述文件 7 第六
  • OVN简介

    三 OVN入门 3 1 OVN简介 Open vSwitch xff08 OVS xff09 是一款开源的 虚拟交换机 xff0c 控制协议方面它不但支持OpenFlow的所有特性而且扩展了部分OpenFlow的功能 xff1b Overl

随机推荐

  • 压缩 质量不变_项目启动后客户要求压缩工期,该如何处理?

    点击蓝字关注我们 马先生 首先 xff0c 项目经理应了解这种要求的合理性和必要性 xff0c 如果甲方确实有充分和充足的需要 xff0c 再进行如下工作 xff1a 1 组织项目团队认真分析赶工的可行性 xff0c 如果可行 xff0c
  • 第八章 让开发板发出声音,蜂鸣器驱动 心得体会

    第8章让开发板发出声音 xff0c 蜂鸣器驱动 心得体会 通过学习Android深度探索 卷1 HAL与驱动开发的第8章 让开发板发出声音 xff0c 蜂鸣器驱动 xff0c 我加深对驱动的认识 以下主要是我对本节实验和参考在Linux驱动
  • 连接到CentOS(Linux)服务器ssh、mysql缓慢

    现象 xff1a 服务器163与服务器164在同一机柜 xff0c 双绞线直接连接 xff0c 从办公室或者服务器163去连机服务器164的ssh mysql均缓慢 xff0c 让机房人员查了 xff0c 无果 而164却正常 最后发现两个
  • vs 下调试 引用的DLL源码

    在开发时 xff0c 可以经常引用带源码的DLL xff0c 但有时可以又要跟踪到源码里 解决 xff1a 1 引用Debug目录下的DLL xff0c 不要引用Release目录下的DLL 当然被引用的DLL项目 xff0c 要在Debu
  • 从SDN鼻祖Nicira到VMware NSX 网络虚拟化平台的简单探讨

    以前的大二层技术 xff0c 一般是在物理网络底层使用IS IS路由技术 xff0c 再在此基础之上 xff0c 实现数据中心网络的二层扩展 xff0c 如公有的Trill SPB技术和Cisco私有的OTV Fabricpath技术 xf
  • 使用mysqladmin命令修改Mysql密码

    1 例如你的 root用户现在没有密码 xff0c 你希望的密码修改为123456 xff0c 那么命令是 xff1a mysqladmin u root password 123456 2 如果你的root现在有密码了 xff08 123
  • pyqt5——菜单和工具栏

    菜单和工具栏 这个章节 xff0c 我们会创建状态栏 菜单和工具栏 菜单是一组位于菜单栏的命令 工具栏是应用的一些常用工具按钮 状态栏显示一些状态信息 xff0c 通常在应用的底部 主窗口 QMainWindow提供了主窗口的功能 xff0
  • linux cuda安装目录,ubuntu16.04上的cuda安装、卸载以及替换

    以cuda9 0为例 xff1a 安装 首先 xff0c 下载对应版本的cuda的运行脚本 xff0c 我下载的是cuda 9 0 176 384 91 linux run 1 运行脚本文件sudo sh cuda 9 0 176 384
  • C++软件工程师,你该会什么?

    请尊重原创 转载注明来源 原创在这里哦 C语言广泛用于基础软件 桌面系统 网络通信 音频视频 游戏娱乐等诸多领域 是世界上使用最广泛的编程语言之一 随着物联网技术的发展 xff0c C C 43 43 技术在3G 网络通信 xff08 移动
  • 芒果iOS开发面试题答案

    面试题答案总结 1 简述OC中内存管理机制 1 1 OC的内存管理机制是自动引用计数 xff0c 内存管理的原则是谁开辟谁释放 xff0c 有retain的地方就要有release 1 2 内存管理分为ARC和MRC xff0c 在MRC下
  • 软件工程概论-----课后作业一

    1 网站系统开发需要掌握的技术 xff1f 答 xff1a 网站的开发技术有很多 xff0c 主要包括CGI ASP PHP JSP ASP xff0e NET等 每一种技术都有其自身的特点与局限性 xff0c 具体的网站开发技术要根据网站
  • 拒绝拖延,立即行动 拥有积极心态的四大秘诀

    自己是一个非常拖延的人 在网上找了些指导的文章 用来自勉 以期付出行动 改正自己的坏习惯 根据心理学家的统计 xff0c 每个人每天大约会产生5万个想法 如果你拥有积极的态度 xff0c 那么你就能乐观地 富有创造力地把这5万个想法转换成正
  • STM32 F4 任务创建的步骤

    跟任务重要的三个参数 任务函数 任务堆栈 任务控制块 其他参数 stk limit 任务堆栈深度限位 栈深 确保堆栈不溢出 一般的为堆栈大小的1 10 QTY 内建的消息队列 OS TICK 时间轮转 OS OPT 选项 监测任务堆栈 允许
  • ubuntu下能ping通ssh不通的解决思路

    1 首先看看是否能ping通 xff0c 如果ping不通可能就要考虑网线 路由等问题了 xff1b 2 看防火墙是否关闭 xff0c sshd是否开启 3 ssh v 服务器的ip号 xff0c 根据提示寻找可能的问题 xff1b 我的问
  • lu分解法matlab_MATLAB因式分解

    4 1 因式分解 本节介绍线性代数的一些基本操作 xff0c 包括行列式 逆和秩 xff0c LU分解和QR分解 xff0c 以及范数等 其中LU分解和QR分解都是使用对角线上方或者下方的元素均为0的三角矩阵来进行计算 使用三角矩阵表示的线
  • 宝塔php socket,宝塔开启websocket 小程序聊天功能开发

    前言 在网上找了各种各样宝塔开启websocket的方法 xff0c 结果试了一天都不行 xff0c 无奈只有请教大神出手 摒弃 首先在全网基本上没有宝塔配置的教程 xff0c 有反正我是试了一天都不行 xff0c 他们的统一配置都是在 网
  • 数据库难还是学java难,mysql数据库比java难吗,女生学数据库难吗

    数据库会不会很难学 xff1f 现在主流的数据库是SQL Server xff0c oracle xff0c mysql 我没做过mysql 如果你懂一门数据库语言 xff0c 学习其他数据库是很容易的 只是不同的数据库针对不同的用户群体
  • oracle取年份方法,oracle时间函数(包括截取时间)

    oracle trunc 函数的用法 1 TRUNC for dates TRUNC函数为指定元素而截去的日期值 其具体的语法格式如下 xff1a TRUNC date fmt 其中 xff1a date 一个日期值 fmt 日期格式 xf
  • 电脑有网但是有的软件显示无网络连接服务器,有网络连接,但浏览器不能上网怎么办?电脑高手教你怎么解决...

    大家好 xff0c 欢迎来到我的头条号 xff1a 电脑故障我帮您 在日常生活中 xff0c 我们上网使用最多的就是浏览器 xff0c 可是你在使用浏览器的时候经常出现浏览器无法显示该网页 浏览器出现无法显示该网页 xff0c 首先要排除网
  • rpc协议微服务器,RPC协议及实现方式(分布式微服务治理的核心)

    分布式微服务治理的核心在于 微服务和分布式 微服务框架 微服务的最优技术实现目前是 SpringBoot RPC框架 分布式的最优技术实现目前是 Thrift Motan Dubbo Spring Cloud Netflix OSS Fin