Grpc的内部原理、优缺点

发布时间 2023-12-23 08:42:39作者: 李若盛开

  gRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。gRPC 默认使用protocol buffers,这是Google开源的一套成熟的结构数据序列化机制(也可使用其他数据格式如JSON)
  基于go的一种远程过程调用,RPC 框架的目标就是让远程服务调用更加简单、透明,RPC 框架负责屏蔽底层的传输方式(TCP或者UDP)、序列化方式(XML/Json/二进制)和通信细节。服务调用者可以像调用本地接口一样调用远程的服务提供者,而不需要关心底层通信细节和调用过程。

优点:
1)高效的远程过程调用(RPC):gRPC使用高效的远程过程调用协议,基于Protocol Buffers(protobuf)进行数据序列化和通信。通过使用二进制协议和高性能的序列化机制,gRPC可以实现快速、高效的跨网络通信。
2)强类型和接口定义语言(IDL):gRPC使用接口定义语言(IDL)来定义服务接口和消息格式。IDL提供了一种规范和标准,可以在客户端和服务器之间共享和交流。通过IDL,可以明确地定义服务接口和消息类型,提高跨平台和多语言的互操作性。
3)支持多种传输协议:gRPC支持多种传输协议,包括基于HTTP/2的传输和传统的TCP传输。HTTP/2作为底层协议,提供了多路复用、流控制和头部压缩等优点,可以提高性能和效率。
4)支持多种编程语言:gRPC支持多种编程语言,包括Java、C++、Python、Go等,可以满足不同语言和技术栈的需求。这使得开发人员可以使用自己熟悉的编程语言来实现和使用gRPC服务。
5)双向流式通信(Bidirectional Streaming):gRPC支持双向流式通信,即客户端和服务器可以同时发送和接收数据流。这使得实时的流式数据传输和通信成为可能,例如聊天应用、实时监控等场景。
6)拦截器和中间件(Interceptors and Middleware):gRPC提供拦截器和中间件的机制,可以在请求和响应的处理过程中插入自定义的逻辑。这样可以实现日志记录、认证授权、错误处理等通用的功能,提高代码复用性和可维护性。
7)可扩展性和服务发现:gRPC支持服务发现和负载均衡机制,可以根据需要动态地扩展服务。通过使用服务发现机制,可以自动发现和管理可用的服务实例,以实现高可用性和负载均衡。
8)自动生成的客户端和服务器代码:使用gRPC的IDL和相关工具,可以自动生成客户端和服务器的代码。这样可以简化开发过程,减少手动编写重复性代码的工作量。
缺点:
1)GRPC尚未提供连接池,需要自行实现
2)尚未提供“服务发现”、“负载均衡”机制
3)因为基于HTTP2,绝大部多数HTTP Server、Nginx都尚不支持,即Nginx不能将GRPC请求作为HTTP请求来负载均衡,而是作为普通的TCP请求。(nginx1.9版本已支持)
4)Protobuf二进制可读性差(貌似提供了Text_Fromat功能)默认不具备动态特性(可以通过动态定义生成消息类型或者动态编译支持)
5)难以调试和跟踪,在排查问题时,可能需要额外的工具和技术来解析和查看数据