gRPC-shop:什么是 gRPC(一)

简介: gRPC-shop:什么是 gRPC(一)

在正式写grpc-shop之前,我们需要先花几篇文章介绍一些基础概念 在介绍gRPC之前我们先了解下什么是RPC


什么是 RPC?


RPCRemote Procedure Call的简称,中文叫远程过程调用

说的白话一点,可以这么理解:现在有两台服务器A和B。部署在A服务器上的应用,想调用部署在B服务器上的另一个应用提供的方法,由于不在一个内存空间,不能直接调用,需要通过网络来达到调用的效果。


现在,我们在A服务的一个本地方法中封装调用B的逻辑,然后只需要在本地使用这个方法,就达到了调用B的效果。


对使用者来说,屏蔽了细节。你只需要知道调用这个方法返回的结果,而无需关注底层逻辑。


那,从封装的那个方法角度来看,调用B之前我们需要知道什么?

当然是一些约定啊比如,

  • 调用的语义,也可以理解为接口规范。(比如RESTful)
  • 网络传输协议 (比如HTTP)
  • 数据序列化反序列化规范(比如JSON)

有了这些约定,我就知道如何给你发数据,发什么样的数据,你返回给我的又是什么样的数据。


1668507649251.jpg


从上图中可以看出RPC是一种客户端-服务端Client/Server模式

从某种角度来看,所有本身应用程序之外的调用都可以归类为RPC无论是微服务、第三方HTTP接口,还是读写数据库中间件MysqlRedis


HTTP 和 RPC 有什么区别?


我之前也问个这个问题。

首先这个问题本身不太严谨

HTTP只是一个通信协议工作在OSI第七层

RPC是一个完整的远程调用方案。它包含了:接口规范、传输协议、数据序列化反序列化规范

这样看RPCHTTP的关系只可能是包含关系为什么是可能因为RPC传输协议那块我可以不基于HTTP

所以这个问题应该改成:基于HTTP的远程调用方案 (如:HTTP+RESTful+JSON) 和直接使用RPC远程调用方案有什么区别


RPC 和 gRPC 有什么关系?


gRPC是由google开发的一个高性能、通用的开源RPC框架,主要面向移动应用开发且基于HTTP/2协议标准而设计同时支持大多数流行的编程语言

gRPC基于HTTP/2协议传输HTTP/2相比HTTP1.x有以下一些优势:


用于数据传输的二进制分帧


HTTP/2采用二进制格式传输协议而非HTTP/1.x的文本格式


1668507674557.jpg


多路复用


HTTP/2支持通过同一个连接发送多个并发的请求

HTTP/1.x虽然通过pipeline也能并发请求,但多个请求之间的响应依然会被阻塞。


image.png


服务端推送


服务端推送是一种在客户端请求之前发送数据的机制。在HTTP/2中,服务器可以对客户端的一个请求发送多个响应。而不像HTTP/1.X一样,只能通过客户端发起request,服务端才产生对应的response


减少网络流量的头部压缩。


HTTP/2对消息头进行了压缩传输,能够节省消息头占用的网络流量。至于如何压缩的,可以查看这篇HPACK: Header Compression for HTTP/2[1]

同时gRPC使用Protocol Buffers作为序列化协议。关于Protocol Buffers官网有一句介绍

Protocol buffers are Google’s language-neutral, platform-neutral, extensible mechanism for serializing structured data – think XML, but smaller, faster, and simpler.

它是一种与语言、平台无关 、可扩展的序列化结构数据。它的定位类似于JSONXML但是比他们更小、更快、更简单。更多关于Protocol Buffers介绍,我下一篇再写


gRPC 是如何进行远程调用的?


官网有一张图:


1668507754579.jpg


从上图和文档中可以看出,用gRPC来进行远程调用服务,客户端(client) 仅仅需要gRPC Stub(为啥叫存根?) ,通过Proto RequestgRPC Server发起服务调用,然后gRPC Server通过Proto Response(s)将调用结果返回给调用的client

至于上面这段逻辑gRPC里面做了啥,有哪些调用方式,介绍完pb再写


总结


第一篇文章主要介绍了RPC是什么,以及一些gRPC的基础概念


参考


相关文章
|
2天前
|
数据采集 人工智能 安全
|
11天前
|
云安全 监控 安全
|
3天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
1019 151
|
3天前
|
编解码 人工智能 机器人
通义万相2.6,模型使用指南
智能分镜 | 多镜头叙事 | 支持15秒视频生成 | 高品质声音生成 | 多人稳定对话
|
16天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1713 9
|
8天前
|
人工智能 自然语言处理 API
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸
一句话生成拓扑图!next-ai-draw-io 结合 AI 与 Draw.io,通过自然语言秒出架构图,支持私有部署、免费大模型接口,彻底解放生产力,绘图效率直接爆炸。
655 152
|
10天前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
620 12
|
10天前
|
人工智能 自然语言处理 API
Next AI Draw.io:当AI遇见Draw.io图表绘制
Next AI Draw.io 是一款融合AI与图表绘制的开源工具,基于Next.js实现,支持自然语言生成架构图、流程图等专业图表。集成多款主流大模型,提供智能绘图、图像识别优化、版本管理等功能,部署简单,安全可控,助力技术文档与系统设计高效创作。
691 151