gRPC(gRPC Remote Procedure Call)是由 Google 开发的开源 RPC 框架,它基于 HTTP/2 标准,使用 Protocol Buffers 作为接口定义语言(IDL)。gRPC 提供了一种高效、跨语言、跨平台的远程过程调用(RPC)解决方案,被广泛应用于构建分布式系统和微服务架构。以下是选择使用 gRPC 的一些主要原因:

1. 性能高效

  • HTTP/2 协议:gRPC 使用 HTTP/2 协议作为底层的传输协议,相比于 HTTP/1.x 具有更低的延迟、更高的效率和更好的性能。
  • 多路复用:HTTP/2 支持多路复用,允许多个请求同时在一个连接上进行,避免了 HTTP/1.x 中的线头阻塞(Head-of-line blocking)问题。
  • 二进制传输:使用 Protocol Buffers 作为默认的序列化格式,相较于 JSON 和 XML 具有更高的编解码效率,减小了数据传输的体积。

2. 跨语言和跨平台

  • gRPC 的接口定义语言(IDL)使用 Protocol Buffers,支持多种编程语言,如 Java、Go、C++、Python、Ruby 等,使得不同语言的服务能够无缝地进行通信。
  • gRPC 不仅可以在不同的编程语言中使用,还可以在不同的操作系统上运行,包括 Linux、Windows、macOS 等。

3. 接口定义简单

  • 使用 Protocol Buffers 进行接口定义,语法简洁清晰,易于阅读和维护。
  • 支持请求和响应中的复杂数据结构,并提供了方便的工具来生成客户端和服务端的代码。

4. 自动化工具支持

  • gRPC 提供了丰富的工具,如 Protocol Buffers 编译器、gRPC 插件等,使得接口的生成和维护更加方便。
  • 支持使用工具生成客户端和服务端的代码,避免手动编写重复性的代码。

5. 强大的生态系统

  • gRPC 不仅提供了核心的 RPC 功能,还支持服务发现、负载均衡、中间件等功能,使其成为构建微服务架构的理想选择。
  • 有丰富的社区支持,支持的语言和平台不断增加,相关工具和库也在不断完善。

6. 支持流式传输

  • gRPC 支持基于流的传输,允许客户端和服务端通过一个连接同时发送多个消息。
  • 支持单向流、双向流和请求-响应的多种通信模式,适用于各种复杂的应用场景。

7. 安全性

  • gRPC 支持基于 TLS 的安全连接,确保数据在传输过程中的机密性和完整性。
  • 支持多种身份验证机制,包括基于令牌的身份验证、SSL/TLS 证书身份验证等。

8. IDL-First 开发模式

  • gRPC 提倡 Interface Definition Language(IDL)优先的开发模式,通过定义接口的形式来约定服务的行为,确保客户端和服务端之间的一致性。
  • IDL-First 的开发方式使得服务的定义更加清晰,更容易进行版本管理和演化。

选择使用 gRPC 的公司和项目包括 Google、Netflix、Square 等,它在构建高性能、跨语言、分布式系统方面表现出色,成为了现代分布式架构中的一个重要组成部分。


声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。

Author: mengbin

blog: mengbin

Github: mengbin92

cnblogs: 恋水无意

腾讯云开发者社区:孟斯特


Why gRPC ?的更多相关文章

  1. gRPC源码分析1-SSL/TLS

    引子 前几天看到微信后台团队分享了TLS相关文章,正好gRPC里TLS数据加密是很重要的一块,于是整理出了这篇文章. 在gRPC里,如果仅仅是用来做后端微服务,可以考虑不加密.本文太长,先给个大纲. ...

  2. gRPC源码分析2-Server的建立

    gRPC中,Server.Client共享的Class不是很多,所以我们可以单独的分别讲解Server和Client的源码. 通过第一篇,我们知道对于gRPC来说,建立Server是非常简单的,还记得 ...

  3. gRPC源码分析0-导读

    gRPC是Google开源的新一代RPC框架,官网是http://www.grpc.io.正式发布于2016年8月,技术栈非常的新,基于HTTP/2,netty4.1,proto3.虽然目前在工程化方 ...

  4. 谷歌发布的首款基于HTTP/2和protobuf的RPC框架:GRPC

    Google 刚刚开源了grpc,  一个基于HTTP2 和 Protobuf 的高性能.开源.通用的RPC框架.Protobuf 本身虽然提供了RPC  的定义语法,但是一直以来,Google 只开 ...

  5. gRPC .NET Core跨平台学习

    前些天发布gRPC C# 学习,在.NET Framework 中使用gRPC ,今天来学习 .NET Core gRPC. gRPC 的.NET Core 包在NuGet 上发布了,结合.NET C ...

  6. gRPC C#学习

    前些天gRPC 发布1.0 版本,代表着gRPC 已经正式进入稳定阶段. 今天我们就来学习gRPC C# .而且目前也已经支持.NET Core 可以实现完美跨平台. 传统的.NET 可以通过Mono ...

  7. .net core 用grpc实现微服务

    GRPC 是Google发布的一个开源.高性能.通用RPC(Remote Procedure Call)框架.提供跨语言.跨平台支持.以下以.NET Core 使用控制台.docker中演示如何使用G ...

  8. rpc框架之gRPC 学习 - hello world

    grpc是google在github于2015年开源的一款RPC框架,虽然protobuf很早google就开源了,但是google一直没推出正式的开源框架,导致github上基于protobuf的r ...

  9. Android开发笔记之《远程控制(MQTT|mosquitto) && (ProtocalBuffer | GRPC)》

    Android推送方案分析(MQTT/XMPP/GCM): http://www.open-open.com/lib/view/open1410848945601.htmlMQTT官网: http:/ ...

  10. gRPC+etcd的优势分析

    相比webService等可跨平台,跨语言的服务相比,gRPC更增加了以下优势 1.可以采用二进制传输,速度更快 (使用TCP传输层,而不是Http2应用层) 2.集群服务,统一注册,可靠性高( 好的 ...

随机推荐

  1. 提升源代码安全性的C#和Java深度混淆工具——IpaGuard

    提升源代码安全性的C#和Java深度混淆工具--IpaGuard 摘要 Ipa Guard是一款功能强大的IPA混淆工具,通过对iOS IPA文件进行混淆加密,保护其代码.资源和配置文件,降低破解反编 ...

  2. Kubernetes(K8S) 常用命令

    Docker 常用命令 Docker 常用命令 # 查看API版本 [root@k8smaster ~]# kubectl api-versions # 重启 K8S [root@k8smaster ...

  3. Java 日志框架学习笔记

    日志概念 1. 日志文件 日志文件是用于记录系统操作事件的文件集合 1.1 调试日志 1.2 系统日志 系统日志是记录系统中硬件.软件和系统问题的信息,同时还可以监视系统中发生的事件.用户可以通过它来 ...

  4. 【主流技术】MongoTemplate 与 Spring Boot 项目集成分享(附CURD技巧)

    目录 前言 一.表结构特点 1.1Json格式 1.2实体映射 二.条件构造 2.1Criteria与Query的区别 2.2简单条件 2.3复杂条件 三.如何选用接口 3.1MongoReposit ...

  5. ChatExcel?

    大家好,我是章北海mlpy 最近在浅学LangChain,在大模型时代,感觉这玩意很有前途. LangChain是一个开源的应用开发框架,目前支持Python和TypeScript两种编程语言. 它赋 ...

  6. iview 将Modal抽取成组件并控制Modal的显示隐藏

    开发中遇到Modal弹出框的内容太多,就想把Modal单独分装成一个组件,但是发现封装成组件后Modal的关闭和打开有问题.如下方法可以解决这个问题. 父级页面: <PriceInfodModa ...

  7. FrameWork使用TraeFik连接Grpc的坑

    背景介绍:因为公司最近使用TraeFik来代替nginx做代理服务器.导致一些老项目访问Grpc的时候直接Status(StatusCode=Unavailable, Detail="fai ...

  8. 从头到尾创建一个vue项目

  9. RL 的探索策略 | Exploration for RL

    最近在草率地调研 RL 的 exploration. 这篇文章也比较草率,仅能起到辅助作用,不能代替读 review 或更精细的读 paper. 目录 0 总结写在最前面 1 主要参考资料 2 RL ...

  10. @RequestParam与@RequestBody使用对比

    转载请注明出处: @RequestParam 用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容. (Http协议中,如果不指定Con ...