RPC(一)[概述]

文章目录

  • RPC-概述
  • 简介
  • 1.服务的调用过程
  • 2.RPC框架
    • 1.Dubbo–电商
    • 2.Motan–互联网
    • 3.Thrift
    • 4.gRPC
    • 5.RPCX
  • 3.RPC 和 RESTful
    • 1.RPC over HTTP 和 RESTful
    • 2.RPC over TCP 和 RESTful

RPC-概述

网络通讯协议图

简介

远程过程调用(Remote Procedure Call,缩写为 RPC)是一个计算机通信协议
该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程。
远程过程调用是一个分布式计算的客户端-服务器(Client/Server) ,简单而又广受欢迎。
远程过程调用总是由客户端对服务器发出一个执行若干过程请求,并用客户端提供的参数。执行结果将返回给客户端。
类似远程访问或者web请求差不多,都是一个client向远端服务器请求服务返回结果,但是web请求使用的网络协议是http高层协议,而rpc所使用的协议多为TCP,是网络层协议,减少了信息的包装,加快了处理速度。
由于存在各式各样的变体和细节差异,对应地派生了各式远程过程调用协议,而且它们并不互相兼容。为了允许不同的客户端均能访问服务器,许多标准化的 RPC 系统应运而生了。其中大部分采用接口描述语言(Interface Description Language,IDL),方便跨平台的远程过程调用。
RPC(远程过程调用)
RPC 本身是 client-server模型,也是一种request-response 协议【请求-应答】。

1.服务的调用过程

  • 1.client调用client stub,这是一次本地过程调用
  • 2.client stub将参数打包成一个消息,然后发送这个消息。打包过程也叫做 marshalling
  • 3.client所在的系统将消息发送给server
  • 4.server的的系统将收到的包传给server stub
  • 5.server stub解包得到参数。 解包也被称作 unmarshalling
  • 6.最后server stub调用服务过程. 返回结果按照相反的步骤传给client

注意:

  • 客户端(Client): 服务的调用方
  • 服务端(Server):真正的服务提供者
  • 客户端存根(client stub):存放服务端的地址消息,再将客户端的请求参数打包成网络消息,然后通过网络远程发送给服务方
  • 服务端存根(server stub):接收客户端发送过来的消息,将消息解包,并调用本地的方法

在这里插入图片描述

  1. 调用客户端句柄;执行传送参数;
  2. 调用本地系统内核发送网络消息;
  3. 消息传送到远程主机;
  4. 服务器句柄得到消息并取得参数;
  5. 执行远程过程;
  6. 执行的过程将结果返回服务器句柄;
  7. 服务器句柄返回结果,调用远程系统内核;
  8. 消息传回本地主机;
  9. 客户句柄由内核接收消息;
  10. 客户接收句柄返回的数据。

2.RPC框架

RPC只是描绘了 Client 与 Server 之间的点对点调用流程,包括 stub(存根)、通信、RPC 消息解析等部分,在实际应用中,还需要考虑服务的高可用、负载均衡等问题,所以产品级的 RPC 框架除了点对点的 RPC 协议的具体实现外,还应包括服务的发现与注销、提供服务的多台Server 的负载均衡、服务的高可用等更多的功能。
目前的 RPC 框架大致有两种不同的侧重方向,一种偏重于服务治理,另一种偏重于跨语言调用。

RPC侧重方向常见RPC特点缺点
服务治理型RPCAlibab DubboMotan功能丰富,提供高性能的远程调用以及服务发现和治理功能适用于大型服务的微服务化拆分以及管理对于特定语言(Java)的项目可以十分友好的透明化接入语言耦合度较高,跨语言支持难度较大
跨语言调用型RCPThriftgRPCrpcx关注于服务的跨语言调用,能够支持大部分的语言进行语言无关的调用,非常适合于为不同语言提供通用远程服务的场景没有服务发现相关机制,实际使用时一般需要代理层进行请求转发和负载均衡策略控制

1.Dubbo–电商

Dubbo 是阿里巴巴公司开源的一个Java高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。Dubbo由于跟淘宝另一个类似的框架HSF(非开源)有竞争关系,导致dubbo团队已经解散;在电商圈如当当 (dubbox)、京东、国美维护了自己的分支或者在dubbo的基础开发,但是官方的实现缺乏维护,其它电商虽然维护了自己的版本,但是还是不能做大的架构的改动和提升,相关的依赖类比如Spring,Netty还是很老的版本(Spring 3.2.16.RELEASE, netty3.2.5.Final),而且Dubbo的代码结构过于复杂

2.Motan–互联网

Motan是新浪微博开源的一个Java 框架。它诞生的比较晚,起于2013年,2016年5月开源。Motan 在微博平台中已经广泛应用,每天为数百个服务完成近千亿次的调用。Motan的架构相对简单,功能也能满足微博内部架构的要求,虽然Motan的架构的目的主要不是跨语言,但是目前也在开发支持php client和C server特性。

3.Thrift

Thrift是Apache的一个跨语言的高性能的服务框架,也得到了广泛的应用。它的功能类似 gRPC, 支持跨语言,不支持服务治理

4.gRPC

gRPC是Google开发的高性能、通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计基于ProtoBuf(Protocol Buffers)序列化协议开发,且支持众多开发语言。目标是跨语言开发,支持多种语言, 服务治理方面需要自行实现,所以实现一个综合的产品级的分布式RPC平台还需要扩展开发,Google内部使用的也不是gRPC,而是Stubby

5.RPCX

rpcx 是一个分布式的Go语言的 RPC 框架支持Zookepper、etcd、consul多种服务发现方式,多种服务路由方式, 是目前性能最好的 RPC 框架之一

3.RPC 和 RESTful

RPC 的消息传输可以通过 TCP、UDP 或者 HTTP等,所以称之为 RPC over TCP、 RPC over HTTP。RPC 通过 HTTP 传输消息的时候和 RESTful的架构是类似的,但也有不同。

1.RPC over HTTP 和 RESTful

RPC over HTTPRESTful
RPC 的客户端和服务器端是紧耦合的,客户端需要知道调用的过程的名字过程的参数以及它们的类型顺序等。一旦服务器更改了过程的实现,客户端的实现很容易出问题。RESTful基于HTTP的语义操作资源,参数的顺序一般没有关系,也很容易的通过代理转换链接和资源位置,故而RESTful 更灵活。
RPC 操作的是方法和过程,要操作的是方法对象RESTful 操作的是资源(resource),而不是方法
RPC提供方法调用,如果实现一个特定目的的操作,比如为名字姓张的学生的数学成绩都加上10这样的操作,可以实现一个 Student.Increment(Name, Score) 的方法供客户端调用。RESTful执行的是对资源的操作,增加、查找、修改和删除等,主要是CURD,如果实现一个特定目的的操作,比如为名字姓张的学生的数学成绩都加上10这样的操作,RESTful的API设计起来就不是那么直观或者有意义。

2.RPC over TCP 和 RESTful

RPC over TCPRESTful
通过长连接减少建立简介产生的资源消耗,高并发场合愈发重要。通过在请求头中设置Connection: keep-alive实现长连接**,request-response模型阻塞严重,必须等前一个请求发送并完成响应后,才能发送后续请求,即使在HTTP1.1中使用了Pipeline管线化技术,依然是一个串行化的方案,且服务器端开启Pipeline管线化很可能并不会带来大幅度的性能提升,而且服务器端和代理程序对管线化的支持并不好,非标配,除非升级到HTTP2, RPC的实现没有这个限制。
采用TCP通讯协议,是传输层的通信协议,效率和性能高于应用层协议,普遍用于微服务架构的服务之间的通讯RESTful基于HTTP,是应用层协议,基于传输层协议之上,效率和性能比传输层的协议要低

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

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

相关文章

epic登陆按钮一直在转_双剑合璧!GOG GALAXY 2.0官方支持Epic商店集成

2020年7月21日晚,GOG官方宣布提供与Epic商城的集成服务,这也是GOG GALAXY 2.0推出以来又一次与超大型游戏平台达成的合作。现在玩家可以通过GOG GALAXY 2.0管理、安装和启动来自Epic商城的游戏。需要注意的是,因为这次行为是完全官方的&#…

用 Java 实现人脸识别功能

引言 人脸识别SDK 人脸识别技术是很复杂的,自己用Java手撕一个识别算法有点不切实际,毕竟实力不允许我这么嚣张,还是借助三方的SDK吧! 找了一圈发现一个免费的人脸识别SDK: ArcSoft:,地址:ht…

有没有词匹配算法_Google Ads 再次扩展了关键字变量匹配

在过去的几年里,Google Ads已经扩大了使用相近的关键字变量。Google改变的匹配类型不仅包括拼写错误和复数,还包括功能词、修改和重新排序。日前,谷歌再次扩展了相近变量的使用。短语匹配和广泛匹配修饰语以下是2019年7月31日谷歌官方广告公告…

mysql 组合查询_MySQL组合查询教程

#MYSQL#这是我MySQL的第八篇教程。本篇主要介绍的是MySQL的组合查询的用法。在大多数的SQL查询中都只包含从一个或者多个表中返回数据的单条SELECT语句,MySQL其实也支持允许执行多条SELECT语句,并将结果作为单个结果集返回,这些组合查询通常称…

Java后端 + 百度SDK实现人脸识别

Java后端 百度SDK实现人脸识别 人工智能越来越贴近我们的生活,相信大家也经常接触到人脸识别,手机付款、app注册验证、门禁等等。 如果要用Java后台使用这些功能,那么需要怎么做呢?请看完下面这篇文章,就能轻松、简单…

路由器局域网设置_路由器基础介绍

路由器已经商用很多年了,但是一些SSID, DHCP, 这些名词都还没有搞懂,遇到路由器问题,不知所措,只能求助于网管。但是有些问题是很简单的,只要稍微去学习就可以解决问题。下面介绍路由器的一些简单问题。路由…

mysql主键设置after_mysql如何改变主键属性

mysql改变主键属性的方法:1、使用关键字modify,代码为【alter table tbl_name modify.....】;2、使用关键字change,代码为【alter table tbl_name change..】。本教程操作环境:windows7系统、mysql8.0.22版&#xff0c…

python打包成exe_Python打包成exe时,再犯这几个错误就说不过去了

大家好,我是今天的值班小编,不知道朋友们开工了没有,小编的公司已经远程办公好几天了。今天由于写游戏教程的那位小编弃坑不更新文章了,只好由本小编继续来解决粉丝朋友们的问题。 如果朋友们在使用python的过程中遇到了任何问题&…

机器视觉 光学工程专业_瑞士Idonus MEMS制造设备 创新技术 机器视觉测量(远心光学)...

机器视觉从图像处理算法到光学安装,idonus 提供部分或全部机器视觉解决方案。典型应用包括机械零件的高通量自动测量、表面质量检测、定位、质量控制或识别。我们定制开发的解决方案可与机器人化或手动设备相结合。我们的报价:定制硬件和软件&#xff0c…

vs 中使用32 位mysql_vs2010连接mysql数据库(含win32和x64两种平台)

数据库安装: 此处有两种安装方式,第一种使用xxx.msi图形化安装方式,和普通的exe软件安装方式一样,按照默认选项一直下一步就可以。mysql下载地址为http://dev.mysql.com/downloads/windows/installer/ 第二种是在mysql官网下载zip…

电脑时间校对器_笔记本电脑如何保养?华为教你五招轻松延长使用时间

集微网7月11日消息(文/数码控),近日华为花粉俱乐部官方微信公众号发表长文教用户如何保养笔记本电脑,具体有以下五招:

uvc能支持多大分辨率_华为手环B5测评:该有的功能一个不缺,甚至还能变身蓝牙耳机...

前阵子,华为召开nova5系列新品发布会的同时,也给用户们带来了华为手环B5的新配色--铅石青。华为手环B5在去年7月发布,分为三个版本:运动版999元、商务版1199元、时尚版1499元。​此次更新的是运动版,售价仍为999元&…

cf不能全屏win7的解决方法_win7系统局域网不能访问怎么办 win7局域网不能访问解决方法...

在局域网当中比较实用的功能要数共享文件了,局域网共享可以让用户们共享和管理资源更加便捷,可以大大提高工作效率,不过最近有位win7系统用户使用电脑的时候,发现电脑无法访问局域网中的其他任何一台电脑,这让用户不知…

CGLib动态代理原理

CGLib动态代理原理 CGLib动态代理是代理类去继承目标类,然后重写其中目标类的方法啊,这样也可以保证代理类拥有目标类的同名方法; 看一下CGLib的基本结构,下图所示,代理类去继承目标类,每次调用代理类的方…

sql读取excel数据_Python 读取 Excel 数据,并插入到MySQL

说实话,个人不建议用Python来读取Excel进行入库操作,有条件的话,可以尝试用 ETL 工具,快速导入到MySQL中,或者也可使用 SQL 的导入工具进行。写本文的目的在于:记录一下之前做过一次这个同类型的东西。也为…

无向图的深度优先遍历非递归_图算法总结

[TOC]图算法1、图的表示1.1、邻接矩阵(有向图、无向图、带权图、代码实现)1、无向图的邻接矩阵 2、有向图的邻接矩阵 3、带权值的图 有了上述的理解,我们可以设计数据结构,并实现了。C实现如下:#include1.…

华为ipd项目管理流程_IPD:一套卓越的产品开发经营体系

IPD全流程指的不仅仅是“产品开发流程”,而是如何实现产品“从机会到商业变现”的全流程。华为通过20年的全流程实践,才做到持续性推出高质量产品和解决方案。本期IPD全流程班,帮助企业研发管理者学习这套结构化流程,其中划下重点…

Springboot中@ComponentScan 注解

三个点: 1、工程中Application类的位置。默认情况下就不需要配置ComponentScan这个注解了。 因为Application类,在启动的时候,默认是加载和Application类所在同一个目录下的所有类,包括所有子目录下的类。所以一般情况下&#xff…

在react里写原生js_小程序原生开发与第三方框架选择

最近正在更新《微信小程序入门与实践》一书的第二版。书中有一章节谈到了”多样化的小程序开发“,摘取并加以整理分享给各位开发者。我一向不推荐也不提倡公众号阅读学习编程,文章更多的是列出小程序如今多样化的框架选择,并简单剖析它们之间…

springboot中service层注入的是实现类,但Controller层接收的是接口

我们习惯这样编写代码: 在service层写接口,然后用实现类去实现接口,并且将实现类注入到容器中 Service public class AccountServiceImpl implements AccountService {}在controller层却是用接口操作service的bean的方法, Auto…