Golang 微服务为什么选择使用 gRPC 作为通信协议?

简介: Golang 微服务为什么选择使用 gRPC 作为通信协议?

介绍

我们在之前的文章中,连续使用四篇文章的篇幅介绍过 gRPC 的相关知识,如果有读者朋友还未阅读,可以按需翻阅一下前面的四篇关于 gRPC 的文章。

本文我们介绍 Golang 语言微服务架构的软件系统为什么选择使用 gRPC  作为分布式应用之间的通信协议。

进程间通信

微服务架构的软件系统由多个分布式应用组成,进程间通信技术将分布式应用相互连接。进程间通信一般包含两种实现方式,其中一种是同步的请求和响应,另外一种是异步的消息传递。

在我们微服务项目开发中,进程间通信的传统方式是使用 RESTful 服务的方式实现同步的请求和响应。实际上,通过 HTTP 和 JSON 将应用程序构建为 RESTful 服务已经是构建微服务的标准方法。

但是随着微服务数量增多,RESTful 服务的方式实现进程间通信越来越低效,因为 RESTful 服务使用文本传输,微服务之间缺乏强类型接口,并且 REST 架构不能强制应用程序使用等问题,所以 RESTful 服务的方式已经不能满足需求。

基于以上原因,gRPC 进程间通信应运而生,gRPC 扩展性强、松耦合,比 RESTful 服务更高效,所以越来越多的公司将进程间通信协议替换为 gRPC。

03

gRPC 的优点和缺点

优点:

gRPC 进程间通信与 RESTful 服务不同的是,它没有使用文本传输,而是使用基于 protocol buffers 的二进制协议,二进制传输的效率远远高于文本传输的效率,并且 gRPC 是基于 HTTP/2 实现的 protocol buffers 协议,从而使进程间通信更加高效。

gRPC 与 RESTful 服务不同的是,gRPC 先要定义服务接口,然后再去实现细节。因此,gRPC 可以约束多语言开发的分布式应用程序,使分布式应用程序更加可靠,可扩展。

gRPC 使用 protocol buffers 定义服务接口,可以支持多种语言,并且强制约束了不同语言的分布式应用程序之间进程间通信使用的类型,可以使分布式应用程序更加稳定。

缺点:

gRPC 也不是十全十美,在项目开发中,有时需要给三方提供接口服务,尤其是外部公司的三方,因为 gRPC 具有接口契约和强类型等特点,会限制面向外部服务的灵活性,所以 gRPC 可能不适合面向外部的服务。

在面向浏览器和 APP 应用等客户端接口开发时,因为它们对 gRPC 的支持还处于初级阶段,大部分公司还是选择使用 REST 接口进行通信,所以我们在选择进程间通信协议时,还是要根据实际使用场景做出最佳选择。

04

总结

本文我们介绍目前进程间通信使用比较多的 RESTful 服务方式和 gRPC 方式,随着微服务架构的服务中,分布式服务数量越来越多的背景下,RESTful 服务的方式已经不能满足需求。

我们通过简述 RESTful 服务方式的局限性,和 gRPC 的优势,介绍了微服务架构选择 gRPC 通信协议的原因。

推荐阅读:

Golang 语言怎么高效排序数据?

参考资料:

https://grpc.io/docs/what-is-grpc/faq/ 


目录
相关文章
|
6月前
|
监控 网络协议 Go
应用监控 eBPF 版:实现 Golang 微服务的无侵入应用监控
应用监控 eBPF 版:实现 Golang 微服务的无侵入应用监控
109786 128
|
12月前
|
Cloud Native Go 微服务
golang 微服务中的断路器 hystrix
golang 微服务中的断路器 hystrix
|
2月前
|
Go
Golang语言之gRPC程序设计示例
这篇文章是关于Golang语言使用gRPC进行程序设计的详细教程,涵盖了RPC协议的介绍、gRPC环境的搭建、Protocol Buffers的使用、gRPC服务的编写和通信示例。
93 3
Golang语言之gRPC程序设计示例
|
3月前
|
存储 设计模式 前端开发
|
3月前
|
Prometheus 负载均衡 算法
如何让gRPC具备微服务治理能力
如何让gRPC具备微服务治理能力
|
4月前
|
消息中间件 API 数据库
在微服务架构中,每个服务通常都是一个独立运行、独立部署、独立扩展的组件,它们之间通过轻量级的通信机制(如HTTP/RESTful API、gRPC等)进行通信。
在微服务架构中,每个服务通常都是一个独立运行、独立部署、独立扩展的组件,它们之间通过轻量级的通信机制(如HTTP/RESTful API、gRPC等)进行通信。
|
12月前
|
负载均衡 算法 网络协议
golang 微服务的负载均衡
golang 微服务的负载均衡
|
12月前
|
Cloud Native 安全 Go
golang 微服务容错处理是如何做的?
golang 微服务容错处理是如何做的?
|
6月前
|
消息中间件 Go API
Golang深入浅出之-Go语言中的微服务架构设计与实践
【5月更文挑战第4天】本文探讨了Go语言在微服务架构中的应用,强调了单一职责、标准化API、服务自治和容错设计等原则。同时,指出了过度拆分、服务通信复杂性、数据一致性和部署复杂性等常见问题,并提出了DDD拆分、使用成熟框架、事件驱动和配置管理与CI/CD的解决方案。文中还提供了使用Gin构建HTTP服务和gRPC进行服务间通信的示例。
291 0
|
6月前
|
Cloud Native Dubbo 应用服务中间件
【Dubbo3技术专题】拥有新时代的通信协议,引领云原生迈向更高的舞台 | 解密Dubbo3是如何从微服务升华到云原生领域
【Dubbo3技术专题】拥有新时代的通信协议,引领云原生迈向更高的舞台 | 解密Dubbo3是如何从微服务升华到云原生领域
119 1