GRPC一些基础介绍

2023-11-27 03:40:10 字數 2753 閱讀 2510

rpc(remote procedure call,远程过程调用)是一种计算机通信协议,它允许程序调用另一地址空间(通常是网络上的另一台机器上)的过程或函数,而不需要显式地处理网络细节。在rpc中,客户端调用远程服务器上的过程,就好像是调用本地的过程一样,而底层的网络通信细节由rpc框架来处理。这使得分布式系统中的不同模块能够透明地进行通信,使得开发者无需关心底层的网络通信细节。

#创作灵感中心#gprc是由google开源的一个高性能的prc框架,他是由stubby google内部的rpc演化。grpc核心设计:1. 网络通信:grpc自己封装了网络通信的部分,提供了多种语言的网络通信的封装。2. 协议:基于http2的协议,在传输数据的时候用的二进制内容,比传统的http1.0 、http1.1传输的文本、字符要快。http2.0是双工的连接的多路复用,在服务器里边设计好的http2都封装了,优选http2,grpc天生选用了这个。3. 序列化:网络是要传输数据的,数据传输成什么格式,就是序列化。序列化一种是基于文本json,另一种二进制,比如j**a原生的序列化。grpc在进行序列化的时用的是二进制,是它自己独立设计的,叫做protobuf(protocol buffers)google开源的一种二进制序列化方式。它仅仅是序列化的方式,可以在不同的分布式传输中使用,可以被多种语言共用。它的传输时间效率和空间效率是json的3-5倍。是一种标准的idl语言实现的,idl(接口定义语言)是一种用于描述软件组件之间接口的语言。它定义了组件对外提供的服务、数据结构和方法的规范,但并不涉及具体的实现细节。。4. *的创建:让调用者像调用本地方法那样,去调用远端的服务方法,也就是服务端、客户端存根。dubbo只不过是用到了gprc的通信和序列化,其他的还是dubbo。高效的进行通信。最最基本的功能,一个是协议用http2,一个是序列化二进制protobuf。支持多种语言,对使用的语言提供了原生的实现,j**a、go、c...支持多平台运行。请求相应模式,短链接协议,无状态协议。

无状态:服务器不会跟踪客户端的状态,因此每次客户端发送请求时都需要重新发送所有需要的信息。无连接:每次客户端发送请求时都需要建立一个新的 tcp 连接。这意味着如果客户端需要发送多个请求,则需要建立多个 tcp 连接。简单:http 1.0 协议的报文格式简单,易于理解和实现。无状态可以用httpsession和cookie来解决,这是一种妥协的做法。http/1.0协议中,每次请求都需要建立一个新的tcp连接。这就意味着每次短链接实际上就是一次tcp连接。这种方式虽然简单,但效率不高,因为建立tcp连接本身就需要消耗一定的时间和资源。tcp协议是长链接协议,http是基于tcp的,按道理来说http是长链接的,这是因为http在设计的过程中,主动断开tcp链接的。在早期资源差,不能一直占用链接,所以http1.0的时候是主动断开链接的。http1.x协议中,多余无用的字符太多了,比如回车符、换行符,这每一个字符都会占用一个字节,这些字节占用了网络带宽,降低了网络io的效率http1.x协议中,一条socket连接,一次只能发送一个http请求,因为如果连续发送两个http请求,然后收到了一个响应,那怎么知道这个响应对应的是哪个请求呢,这样导致socket连接的利用低,并发、吞吐量低。

因为服务相应完客户端的时候就把tcp给断开了,如果服务器要变相的实现推动,就需要客户端轮询,因为服务器是没办法找到客户端,所以客户端没秒或者每段时间就去服务器查询看有没有新的消息,这就会导致服务器压力,效率差。

也是请求相应,你不请求我不相应,它对比1.0,1.1的tcp有可能会保持一段时间,有限长链接,之后链接不会马上断,会保持一段时间。减少建立链接的三次握手和断开连接的四次挥手。

http1.0和1.x:

传输数据是文本格式,可读性好,但是效率低下,比如它的格式、空格都是字符等等。本质上没办法实现双工的。在资源请求的时候,需要发送多次请求,建立多个链接。就比如我要请求一个页面需要这个页面下的css、js需要发送很多请求才能产生一个完整的页面。在1.0中请求页面。

需要三次链接请求,三次tcp。在2.0中,一次相当于一个流,一个流相当于一个不同的请求功能。http/2.0中引入了流(stream)的概念,所有消息传输都在流上完成。具体来说,http/2.0中的流机制主要有以下一些特征:

每个请求/响应对应一个流(stream),一个流都有一个唯一编号。多个流可以多路复用(multiplexing)到一个tcp连接上,相互间不会阻塞。流可以承载请求信息、响应信息或推送资源等任意数据。头信息和body都是流的一部分。流的数据帧通过流标识符关联,数据帧是二进制格式并经过头压缩。可以为每个流设置优先级,来进行优先调度。控制流量和阻止垃圾流。发送或接收端都可以主动控制流。比如流水线控制。复用tcp连接减少延迟,优先级控制提高实时性。get是一帧,没有消息体。post是二帧,有消息题。

数据流的优先级,设置stream设置权重,限制不同流的传输顺序。流控,客户端发送的数据太快了,服务端处理不过来,可以通知客户端暂停数据的发送,tcp滑动窗口就是解决这个问题的。在一个链接中,可以发送多个请求,复用这个链接,对比http1.0一个链接对应一个请求,占用的资源就太少了。

protobuf是一种与编程语言无关的idl语言,它和平台语言无关,方便客户端和服务器中间数据的传输。两种版本,一个是proto2 和proto3,目前主要用的是proto3。需要安装protobuf的编译器,编译器主要用来将idl语言转换成我们用的开发语言。

箱变基础模具简介介绍!

箱变基础模具 箱变基础模具介绍,箱变基础模具主要用于生产箱式变压器 箱变 的外壳。箱式变压器是一种常见的高压电力设备,用于将高压电能转换为低压电能,通常用于供电系统中的变电站和工业设备中。箱变基础模具在生产箱变外壳时起着至关重要的作用。箱变基础模具的一般由上模和下模两部分构成,上模和下模的结构设计需...

风电基础模板简单介绍!

风电基础模板 风电基础模板介绍,在风力发电设备的施工中,有一种模具必须要用到,没有它就无法搭建风力风车,它就是风电基础模板。施工中该模具可以为风力发电设备提供坚实的支撑,保障上方的风力发电设备保持良好的稳定性,应对各种不同层级的大风,是构造风力发电水泥基础结构不可或缺的模具,接下来我将介绍风电基础模...

风电基础模板详细介绍!

风电基础模板 我这次要介绍的是风电基础模板,顾名思义,风电基础模板是一种用于辅助建造风力发电基础结构的模具,在风力发电工程的建设中发挥着重要作用。使用该模具浇筑风电基础,可以使风电基础具备较强的抗风能力,使得风力发电设备在各种强度等级的风力状况下,也能够安全稳定的运行,是保证风力发电设备持续进行发电...