Why gRPC ?
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 ?的更多相关文章
- gRPC源码分析1-SSL/TLS
引子 前几天看到微信后台团队分享了TLS相关文章,正好gRPC里TLS数据加密是很重要的一块,于是整理出了这篇文章. 在gRPC里,如果仅仅是用来做后端微服务,可以考虑不加密.本文太长,先给个大纲. ...
- gRPC源码分析2-Server的建立
gRPC中,Server.Client共享的Class不是很多,所以我们可以单独的分别讲解Server和Client的源码. 通过第一篇,我们知道对于gRPC来说,建立Server是非常简单的,还记得 ...
- gRPC源码分析0-导读
gRPC是Google开源的新一代RPC框架,官网是http://www.grpc.io.正式发布于2016年8月,技术栈非常的新,基于HTTP/2,netty4.1,proto3.虽然目前在工程化方 ...
- 谷歌发布的首款基于HTTP/2和protobuf的RPC框架:GRPC
Google 刚刚开源了grpc, 一个基于HTTP2 和 Protobuf 的高性能.开源.通用的RPC框架.Protobuf 本身虽然提供了RPC 的定义语法,但是一直以来,Google 只开 ...
- gRPC .NET Core跨平台学习
前些天发布gRPC C# 学习,在.NET Framework 中使用gRPC ,今天来学习 .NET Core gRPC. gRPC 的.NET Core 包在NuGet 上发布了,结合.NET C ...
- gRPC C#学习
前些天gRPC 发布1.0 版本,代表着gRPC 已经正式进入稳定阶段. 今天我们就来学习gRPC C# .而且目前也已经支持.NET Core 可以实现完美跨平台. 传统的.NET 可以通过Mono ...
- .net core 用grpc实现微服务
GRPC 是Google发布的一个开源.高性能.通用RPC(Remote Procedure Call)框架.提供跨语言.跨平台支持.以下以.NET Core 使用控制台.docker中演示如何使用G ...
- rpc框架之gRPC 学习 - hello world
grpc是google在github于2015年开源的一款RPC框架,虽然protobuf很早google就开源了,但是google一直没推出正式的开源框架,导致github上基于protobuf的r ...
- Android开发笔记之《远程控制(MQTT|mosquitto) && (ProtocalBuffer | GRPC)》
Android推送方案分析(MQTT/XMPP/GCM): http://www.open-open.com/lib/view/open1410848945601.htmlMQTT官网: http:/ ...
- gRPC+etcd的优势分析
相比webService等可跨平台,跨语言的服务相比,gRPC更增加了以下优势 1.可以采用二进制传输,速度更快 (使用TCP传输层,而不是Http2应用层) 2.集群服务,统一注册,可靠性高( 好的 ...
随机推荐
- PPT 流星动画
https://www.bilibili.com/video/BV1w54y1Q7cZ?p=6 星空背景绘制 绘制矩形框 背景不再被拖动 处理前先复制一份,用于后面做激光效果 星星效果 再次组合 按S ...
- Spring Boot Admin 配置应用
Spring Boot Admin 监控SpringBoot 服务的运行情况 https://codecentric.github.io/spring-boot-admin/2.3.0/#spring ...
- coredump文件生成,以及GDB工具使用
一.core dump文件生成 Core文件其实就是内存的映像,当程序崩溃时,存储内存的相应信息,主用用于对程序进行调试.当程序崩溃时便会产生core文件,其实准确的应该说是core dump 文件, ...
- 【计算机网络】JWT token、Session
JWT token https://www.bilibili.com/video/BV1VM4y117qr/?spm_id_from=333.999.0.0&vd_source=d112766 ...
- 遇到 Request header is too large,你是如何解决的?
看到群里有小伙伴问,这个异常要怎么解决: java.lang.IllegalArgumentException: Request header is too large 异常原因 根据Exceptio ...
- 【Logging 日志库】Cpp 日志库 boost::log 以及 glog 的对比
日志能方便地诊断程序原因.统计程序运行数据,是大型软件系统必不可少的组件之一.本文将从设计上和功能上对比 C++ 语言常见的两款日志库: boost::log 和 google-glog . 设计 b ...
- P3574 [POI2014]FAR-FarmCraft (树形DP)
这题直接贪心显然不可行. 考虑树形dp,用 \(f_i\) 表示到 \(i\) 人后,以 \(i\) 为根的所有人安装完的最短时间. 对于一个节点 \(u\), 假设拜访子节点的顺序为 \(v_1,v ...
- 【转载】内存基本概念-slab算法
Linux内存管理之slab 2:slab API https://blog.csdn.net/lqy971966/article/details/119801912 1. 为什么有了Buddy(伙伴 ...
- docker 镜像管理之 overlay2 最佳实践
1. Docker 镜像 Docker 镜像是个只读的容器模板,它组成了 Docker 容器的静态文件系统运行环境 rootfs,是启动 Docker 容器的基础. Docker 镜像是容器的静态视角 ...
- STM32F429 实测基本数据类型占用空间
实测代码 1 void CalculateDataTypeSize(void) 2 { 3 printf("sizeof(char} = %u\r\n", sizeof(char) ...