专栏首页吴亲强的深夜食堂gRPC-shop:什么是 gRPC(一)
原创

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)。

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

从上图中可以看出,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的文本格式。

多路复用

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

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

服务端推送

服务端推送是一种在客户端请求之前发送数据的机制。在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 是如何进行远程调用的?

官网有一张图:

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

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

总结

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

参考

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Golang 语言 gRPC 到底是什么?

    我们上一篇文章「Golang 语言 gRPC 使用的接口设计语言 protobuf」介绍了 Golang 语言 gRPC 使用的接口设计语言 Protobuf,...

    frank.
  • 分布式高并发中,如何发挥gRPC的威力?来看看它的底层实现原理!

    A high-performance, open-source universal RPC framework

    架构师修行之路
  • 分布式高并发中,如何发挥gRPC的威力?来看看它的底层实现原理!

    A high-performance, open-source universal RPC framework

    李明成
  • Kubernetes无痛作gRPC负载平衡

    许多gRPC的新用户惊讶地发现,Kubernetes的默认负载平衡常常无法在gRPC上正常工作。例如,下面是一个简单的gRPC Node.js微服务应用,部署在...

    CNCF
  • 一个新实验:使用gRPC-Web从浏览器调用.NET gRPC服务

    无法在浏览器中实现gRPC HTTP / 2规范,因为没有浏览器API能够对HTTP请求进行足够的细粒度控制。gRPC-Web通过与HTTP / 1.1和HTT...

    依乐祝
  • gRPC Node.js快速开始

    本文翻译自gRPC官网的Node.js示例,链接地址为:https://www.grpc.io/docs/languages/node/和Quick start

    ccf19881030
  • gRPC在C#中的未来属于grpc-dotnet

    grpc-dotnet(Grpc.Net.Client[1]和Grpc.AspNetCore.Server[2] nuget 包)现在是.NET/C#中推荐的 ...

    CNCF
  • 【技术创作101训练营】剖析 gRPC

    各位好,今天的主题是剖析gRPC, 我们在实际工作中大量的应用gRPC做服务之间的调用。经常用写一些proto文件,用protoc把我们的proto文件生成相应...

    lpxxn
  • 【RPC】springcloud、grpc、dubbo 什么区别?

    https://github.com/grpc/grpc-java 由谷歌开发的一个高性能开源RPC框架,基于HTTp/2协议标准开发。利用ProtoBuf作...

    瑞新
  • 如何在 Nginx 中配置 gRPC 的代理

    Nginx 在 1.13.10 中,新增了对gRPC的原生支持,Nginx 1.14.0 主线版已经发布。本文将介绍,如何配置 Nginx 中的 gRPC 服务...

    Debian中国
  • Grpc介绍 — ProToBuf基本使用

    RPC(Remote Procedure Call)远程过程调用,关注笔者的同学应该知道之前笔者出过关于Thrift对应的问题,这次主要来说的是Google开源...

    喵了个咪233
  • Grpc — 整体性能测试

    当然最最最重要的就是性能,在使用RPC的场景下对于多个程序通讯完成业务所消耗的性能是有巨大挑战的,笔者也做了一套完整的性能测试大家可以继续往下看。

    喵了个咪233
  • Envoy和gRPC-Web:REST的鲜新替代方案

    gRPC-Web是一个JavaScript客户机库,它允许web应用程序使用Envoy来与后端gRPC服务交互,而不是使用自定义HTTP服务器作为中介。上周,经...

    CNCF
  • 链路追踪 SkyWalking 源码分析 —— Collector gRPC Server Manager

    本文主要分享 Collector gRPC Server Manager。Collector 通过该管理器,管理启动的多个 gRPC Server,例如 Age...

    芋道源码
  • 我们为什么从 REST 转向 gRPC

    服务间的通信方式是在采用微服务架构时需要做出一个最基本的决策。默认的选项是通过 HTTP 发送 JSON,也就是所谓的 REST API。我们也是从 REST ...

    Edison.Ma
  • Interceptor拦截器 -- gRPC生态里的中间件

    gRPC的拦截器(interceptor)类似各种Web框架里的请求中间件,请求中间件大家都知道是利用装饰器模式对最终处理请求的handler程序进行装饰,这样...

    KevinYan
  • Cpp(九) gRPC protobuf for C++ 基本使用

    Mac: https://github.com/Coxhuang/FKCpp/tree/master/gRPCDemo/macOS

    Coxhuang
  • .NET Core爱gRPC

    自2018年11月以来,微软的.NET团队一直与gRPC团队密切合作,为.NET Core开发新的完全托管的gRPC实现。

    CNCF
  • 开始食用grpc(之一)

    转载请注明出处:https://www.cnblogs.com/funnyzpc/p/9501353.html

    上帝

扫码关注云+社区

领取腾讯云代金券