使用gRPC微服务的内部通信优化

目录
  • 使用gRPC做微服务的内部通信
  • 什么是gRPC?
  • 服务之间如何使用gRPC通信?
  • 为什么gRPC是高效的?
  • 什么时候使用gRPC?
  • 总结Conclusion

使用gRPC做微服务的内部通信

gRPC是一个由Google开源的远程服务调用框架,具有多路复用和双向流式通信的特性。

大家好,在本文中将为大家介绍为什么我们应该使用gRPC代替RESTful或JSON,来开发微服务内部的通信接口。

什么是gRPC?

gRPC是一个高性能的、开源的、普遍通用的RPC框架。简单地说,它能够帮助我们建立透明的服务端和客户端通信系统。Google开发了GRPC并且将其开源。 通过它,一个客户端消费者服务可以像调用本地方法一样,调用另一台主机上面的服务端方法。

gRPC本质上仍然遵循常规的Remote Procedure Call (RPC) 技术,但是在实现上使用了HTTP2.0、协议缓冲区等更现代化的技术方案,从而最大程度上确保服务端和客户端的互操作性及性能上的提升。

服务之间如何使用gRPC通信?

当客户端向服务端发起请求的时候,客户端gRPC类库使用协议缓冲区并且封装远程过程调用(RPC),并且将其通过HTTP2发送到服务端。服务端将其拆封,并且使用协议缓冲区调用对应的程序。响应数据的过程和发送请求的过程是类似的,只不过一个是从客户端到服务端,一个是从服务端到客户端。

从开发的角度,在服务端和客户端使用gRPC最大的好处在于:你的服务端的代码和客户端的代码不需要担心它会影响你解析JSON或者其他类似的文本格式消息。gRPC虽然接收到的是二进制格式,但会并将其反序列化为对象。同样的我们可以通过IDL来定义服务接口,IDL是非常强大的一个特性,帮助我们处理多个微服务之间的互操作。

为什么gRPC是高效的?

  • 它基于HTTP2构建,既支持传统的请求-响应模型,也支持双向流模型。
  • 可以将JSON数据转换到协议缓冲区
  • 多路复用
  • 双向流模型
  • 网络传输的是二进制数据,相对于JSON等文本数据更加轻量级。
  • 多语言支持

什么时候使用gRPC?

最初,几乎所有的微服务之间都是通过JSON数据接口通信的,一个服务可能调用空一个服务或者多个服务,被调用的服务可能还调用其他服务。如果其中任何一个服务运行缓慢,将影响整个系统的运行速度,因为RESTful(JSON) API不支持HTTP2的多路复用和双向流模型。传统的RESTful接口使用JSON、XML或者其他的一些格式作为数据载体,使得服务运行缓慢,内存占用较高、并且传输过程没有压缩。

gRPC解决所有的这些问题,但是它仅仅用于系统应用微服务之间的通信的情况,系统的对外服务接口仍然使用HTTP-JSON接口。这样保证对外部用户的开发技术栈没有任何影响。

总结 Conclusion

与传统REST API相比,使用gRPC创建的API可以为你的应用带来令人难以置信的性能改进。

以上就是使用gRPC微服务的内部通信优化的详细内容,更多关于gRPC微服务内部通信的资料请关注我们其它相关文章!

(0)

相关推荐

  • .Net Core微服务rpc框架GRPC通信基础

    什么是rpc? rpc,全称Remote Procedure Call,通过它,你可以像调用本地方法一样调用远程服务.前端可以调用后端方法,后端也可以调用前端方法.其实这个概念并不陌生,上一篇关于web实时应用的文章也提到了这个概念,并实现了前后端互调的操作. 在正式开始使用grpc之前,我们还需要掌握protocol buffer的概念. 什么是grpc? grpc来自大名鼎鼎的谷歌,孵化于CNCF基金会(docker.k8s同样出自这个基金会).它是一款高性能.开源.通用的rpc框架,你可以

  • 提交gRPC-spring-boot-starter项目bug修复的pr说明

    目录 前言 gRPC-spring-boot-starter是什么? 选型gRPC-spring-boot-starter bug出现,grpc未优雅下线 定位bug,寻找真实原因 模拟环境,反复验证 验证定位的bug 验证修复后的效果 前言 为了更好的说明给gRPC-spring-boot-starter项目提交bug修复的pr的原因,解答作者的问题.以博文的形式记录了整个过程的上下文,目前pr未合并还在沟通处理中,希望此博文可以更清楚描述问题 pr地址:https://github.com/

  • SpringBoot集成gRPC微服务工程搭建实践的方法

    前言 本文将使用Maven.gRPC.Protocol buffers.Docker.Envoy等工具构建一个简单微服务工程,笔者所使用的示例工程是以前写的一个Java后端工程,因为最近都在 学习微服务相关的知识,所以利用起来慢慢的把这个工程做成微服务化应用.在实践过程踩过很多坑,主要是经验不足对微服务还是停留在萌新阶段,通过本文 记录创建微服务工程碰到一些问题,此次实践主要是解决以下问题: 如何解决.统一服务工程依赖管理 SpringBoot集成gRPC 管理Protocol buffers文

  • 教你在Spring Boot微服务中集成gRPC通讯的方法

    一.首先声明gRPC接口 这里引入的是最新的gRpc-core 1.37版本, 采用的grcp-spring-boot-starter封装的版本进行实现,github地址: https://github.com/yidongnan/grpc-spring-boot-starter 要实现gRpc通讯, 先定义接口以及入参出参信息 syntax = "proto3"; option java_multiple_files = true; option java_package = &qu

  • 使用gRPC微服务的内部通信优化

    目录 使用gRPC做微服务的内部通信 什么是gRPC? 服务之间如何使用gRPC通信? 为什么gRPC是高效的? 什么时候使用gRPC? 总结Conclusion 使用gRPC做微服务的内部通信 gRPC是一个由Google开源的远程服务调用框架,具有多路复用和双向流式通信的特性. 大家好,在本文中将为大家介绍为什么我们应该使用gRPC代替RESTful或JSON,来开发微服务内部的通信接口. 什么是gRPC? gRPC是一个高性能的.开源的.普遍通用的RPC框架.简单地说,它能够帮助我们建立透

  • 使用Spring Boot+gRPC构建微服务并部署的案例详解

    目录 1.  为什么要用Istio? 1.1.  为什么要使用gRPC作为通信框架? 1.2. 编写业务代码 1.3、 编写Dockerfile 2. 编写部署文件 3. 部署应用到Istio 大家好,搞微服务也有好几年时间,从16年开始就一直关注微服务,到现在一直在使用的还是SpringCloud原生那套,虽然后来出现了SpringCloud Alibaba,但由于前面的所有系统框架都已定,就没有在变化,而在微服务的实施过程,为了降运维的服务度,先后使用了jenkins,docker, kub

  • golang 微服务之gRPC与Protobuf的使用

    RPC是什么? 所谓RPC(remote procedure call 远程过程调用)框架实际是提供了一套机制,使得应用程序之间可以进行通信,而且也遵从server/client模型.使用的时候客户端调用server端提供的接口就像是调用本地的函数一样. gRPC是什么? 与许多RPC系统一样,gRPC基于定义服务的思想,指定可以使用其参数和返回类型远程调用的方法.默认情况下,gRPC使用协议缓冲区作为接口定义语言(IDL)来描述服务接口和有效负载消息的结构. gRPC有什么好处以及在什么场景下

  • .Net Core微服务rpc框架GRPC通信实际运用

    序 上一篇博客把grpc的概念说了个大概,介绍了proto的数据类型,基本语法,也写了个小demo,是不是没那么难? 今天要从理论到实际,写两个微服务,并利用grpc完成两者之间的通信.只是作为demo写的话会十分简单,毕竟理解为主. 服务端 首先要拿出之前写好的proto文件,然后修改两个属性: Build Action => Protobuf compiler gRpc Stub Classes => Server only 如图: 当然也可以在项目文件里看到它: 然后重新生成项目 ,会自

  • 基于微服务框架go-micro开发gRPC应用程序

    go-micro是golang的一个微服务框架.这篇文章将介绍使用go-micro最新版本v4开发gRPC服务的方式. 1.安装protoc 这个工具也称为proto编译器,可以用来生成各种开发语言使用proto协议的代码. 下载地址:https://github.com/protocolbuffers/protobuf/releases 一般下载最新版本就行,注意要符合自己当前的操作系统. 解压后里边有个 protoc.exe ,拷贝到 GOPATH 的 bin 目录下,我这里就是 C:/Us

  • 详解多云架构下的JAVA微服务技术解析

    微服务生态 微服务生态本质上是一种微服务架构模式的实现,包括微服务开发SDK,以及微服务基础设施. 目前比较成熟的 JAVA 微服务生态包括 servicecomb(华为), spring-cloud (Pivotal), dubbo(阿里), tsf(腾讯)等.gRPC.Thrift 等也用于内部服务之间的通信,但是微服务基础设施比较欠缺. 核心的微服务基础设施包括:注册中心.配置中心.应用网关.此外,分布式事物管理.计划任务.调用链跟踪系统等也是微服务基础设施的组成部分.完整的微服务基础实施

  • 详解Rainbond内置ServiceMesh微服务架构

    目录 ServiceMesh 微服务架构对比 为何使用ServiceMesh ServiceMesh相对其他微服务架构优势 最大层度透明 学习成本低 架构灵活 ServiceMesh架构性能 ServiceMesh只对网络进行治理么? Rainbond与ServiceMesh ServiceMesh 一般的字面解释是“服务网格”,作为时下最流行的分布式系统架构微服务的动态链接器,处于服务到服务的通信的专用基础设施层,该层独立于应用程序为服务之间的通信提供轻量级的可靠传递. 如果简单的描述的话,可

  • Go微服务网关的实现

    目录 Go微服务网关 网络基础大纲 OSI七层网络协议 三次握手 与 四次挥手 为啥会出现大量的close_wait TCP 为啥需要拥塞控制 TCP 拥塞控制 为啥会出现粘包,拆包,如何处理 产生tcp粘包和拆包的原因 如何解决拆包粘包 如何获取完整应用数据报文 基于golang 实现TCP,UDP,Http服务端与客户端 Go微服务网关 从核心原理理解网关的本质 网关具备的基本功能: 支持多种协议代理:tcp/http/ websocket/grpc 支持多种负载均衡策略:轮询,权重轮询,h

随机推荐