Redian新闻
>
gRPC 真的比 REST 好吗?我分析了来自 1000 名开发者的真实反馈

gRPC 真的比 REST 好吗?我分析了来自 1000 名开发者的真实反馈

公众号新闻

作者 | Dylan Huang
译者 | 平川
策划 | Tina

本文最初发布于 Konfig 官方博客。

开发人员对于 gRPC 的真实看法是什么?

gRPC 在大型软件公司有着广泛的应用,这已经不是什么秘密了。谷歌最初是在 2010 年开发了 Stubby 作为内部 RPC 协议。2015 年,谷歌决定开源 Stubby,并将其改名为 gRPC。Uber 和 Netflix 都非常重视微服务,都广泛采用了 gRPC。虽然我个人没有用过 gRPC,但我的同事很喜欢它。那么,开发人员对 gRPC 的真实看法是什么?

为了弄清楚这个问题,我访问了开发者的聚集地:Reddit、Twitter、Hacker News 和 YouTube。在这篇文章中,我分析了 1000 个讨论,并进行了总结,尽力只提供一些发人深省的观点。

观点收集漏斗

接下来,我将这些讨论记录在白板上,并把它们分成三类:支持 gRPC、反对 gRPC 或中立,然后将它们聚合成不同的观点。这篇文章的每个部分都介绍了一种观点,并引用了相关的讨论。

观点白板

gPRC 工具非常适合服务间通信

gRPC 最值得称赞的地方在于其卓越的代码生成工具和高效的数据交换格式,它们显著提高了服务交互开发的体验和性能。

……定义良好的错误代码……更不用说跨平台支持和代码自动生成……(来自 Hacker News

我喜欢使用 gRPC 进行服务间通信。(来自 Reddit

……对于内部服务,代码生成是必须的……(来自 Hacker News

……用你使用的编程语言生成客户端和服务器端代码……对于 API 调用量大的特性,它可以介节省大约 30% 的开发时间……(来自 Hacker News

gRPC 在跨语言方面要优于许多其他格式……(来自 Reddit

……其庞大的代码生成生态系统可以为你生成任何东西,从标准的 gRPC 服务器到传统的 JSON API。该生态系统几乎支持所有流行的语言……(来自 Reddit )

要点

通常,工程团队要负责管理多个服务,同时还要与其他团队管理的服务进行交互。代码生成工具能够帮助开发人员缩短开发过程并使创建的服务更可靠。Protocol Buffers 鼓励工程师重点关注他们向其他团队开放的接口和数据模型,促进不同团体之间工作流的统一。

上面提到的 gRPC 的主要好处如下:

  • 客户端和服务器端存根代码生成工具

  • 数据治理

  • 架构语言无关

  • 运行时性能

  • 定义良好的错误代码

如果你的组织正在开发大量的内部微服务,那么 gRPC 可能是一个很好的选择。

gRPC 简单自然,
REST 相对更难理解

要正确地构建 REST 应用程序,开发人员需要了解底层协议 HTTP。相比之下,gRPC 将 HTTP 抽象了出来,使其更容易理解,可以加速应用程序的构建。

有谁能告诉我哪里不能用 gRPC 吗?(来自 Twitter

试过 gRPC 之后,我再也不想回到 REST 了……“我将按照我想的契约编写一个服务器,而你可以按照你想的契约编写一个客户端。”(来自 Reddit

要点

REST 使开发人员在定义和消费 API 时更容易犯错。

相比之下,gRPC 在设计时就考虑了大型软件系统的复杂性。这使得它一开始就非常注重代码生成和数据治理。而 REST 从根本上说是一种面向 Web 服务的软件架构风格,代码生成和数据治理等方面并不是其主要考虑的因素。OpenAPI(以前称为 Swagger)是 REST API 设计中使用最广泛的标准。它本质上是一个对底层协议没有严格要求的规范。这将导致 API 使用者可能无法接收到预期的数据模型,导致 API 定义和底层协议之间是一种松耦合的关系。这种脱节可能会成为开发人员的混乱和痛苦之源。因此,我们不禁要问:当 gRPC 提供了一个内聚性更好、可靠性更高的替代方案时,为什么还要选择 REST?

gRPC 将一些重要的功能复杂化了

一些重要的功能,比如负载平衡、缓存、调试、身份验证和浏览器支持,都被 gRPC 复杂化了。

为什么 gRPC 和 Node.js 如此之难?……(来自 Reddit

如果你想给浏览器发送响应,那么 gRPC 的工具并不算好……如果你自己构建,那么这个过程无疑是个不小的负担……(来自 Reddit

……我更喜欢 JSON。在线添加或扩展 JSON 端点,或者是使用基本的 gzip 压缩,从来都不是问题……(来自Hacker News

要点

表面上看,gRPC 似乎是构建高质量 API 的一个很好的解决方案。但与任何技术一样,当你开始使用它时,问题就开始显现了。特别是,添加 RPC 层会在系统的核心部分引入依赖关系。因此,当期望 API 提供某些功能时,你会受制于 gRPC。

很快,你就会发出下面这些疑问:

  • gRPC 服务如何负载均衡?

  • gRPC 服务如何缓存?

  • gRPC 服务如何调试?

  • gRPC 服务如何进行身份验证?

  • 如何在浏览器中支持 gRPC?

类似的问题还有很多。很快,你就会产生怀疑:为什么我不构建一个 REST API?

REST 是标准,用它就对了

世界构建于标准之上,REST 也不例外。

如果 REST 有效,我看出来为什么还要挖掘其他替代方案。这是一个广泛应用的标准……到目前为止,我参与的项目中还没有哪一个需要一个替代方案……(来自 Reddit

gRPC 源于错误……最糟糕的是,它不支持 null/undefined……不要充英雄,使用 REST With JSON-Schema/OPEN-API 就对了……(来自 Reddit

REST 经过了实战检验,坚持下去。(来自 Reddit

……失去 HTTP 意味着失去一个很大的工具世界……所有人都熟悉 HTTP 和 REST。(来自 Reddit

要点

不要充英雄,用 REST 就对了。

回想一下,gRPC 之所以诞生是因为谷歌需要构建一个高性能的服务间通信协议。所以实际上,如果你不是谷歌,可能就不需要 gRPC。工程师们在设计系统时经常会因过度设计而导致 复杂性 升高,而 gRPC 似乎就是一个对工程师们很有吸引力的新玩具。但与任何新技术一样,你需要考虑长期维护成本。

你不会希望自己负责引入的新技术给组织带来维护负担。REST 是经过实战检验的,因此,使用 REST,你可以获得标准带来的所有好处,例如工具和基础设施,而无需承担它的维护负担。大多数工程师也熟悉 REST,因此很容易引入新的团队成员。

   将 gRPC 用于内部服务,
REST 用于外部服务

gRPC 显著增强了内部服务的开发体验和性能。尽管如此,它可能并不是外部服务的理想选择。

gRPC 用于内部服务通信,REST/GraphQL 用于边缘。(来自 Reddit

……gRPC 适合于内部使用,REST 适合于外部使用……(来自YouTube

要点

gRPC 在内部服务之间的通信方面非常出色,并且为开发人员提供了出色的代码生成和高效的数据交换工具。忽视 gRPC 为开发人员带来的实际好处可能有些目光短浅,特别是在许多组织从采用 gRPC 中受益匪浅的情况下。

然而,需要注意的是,浏览器支持并不是 gRPC 设计的主要关注点。要实现浏览器端 gRPC 客户端就需要借助一个额外的组件 grpc-web。此外,外部服务通常有特定的需求,如缓存和负载平衡,这些 gRPC 都无法直接满足。采用 gRPC 开发外部服务可能需要自定义的解决方案来支持这些特性。

重要的是要认识到,并非每种技术都适用于所有情况。使用 gRPC 开发外部服务可能类似于试图将方钉塞进圆孔中。为正确的工作选择正确的工具是非常重要的。

gRPC 不成熟

gRPC 在 2015 年才开源(当时谷歌决定标准化其内部 RPC 协议),因此仍有许多开源工具需要构建。

……我们需要更多的 gPRC 原生工具。(来自YouTube

在 Python 中,gRPC 很慢……但 C++ 实现要快 100 倍……(来Hacker News

要点

cURL到 Postman,REST API 有各种各样的工具支持。这些工具都非常成熟,而且提供完整的文档。相比之下,gRPC 就相对较年轻。尽管它也有一些可用的工具,但它们并不像 REST 的工具那样成熟或文档完备。

不过,随着 gRPC 生态系统的日益普及,它正在迅速发展。Grpcurl 和 grpcui 等开源工具的开发就是这种增长的证明。此外,像 Buf 这样的公司也通过构建先进的工具来增强 gRPC 的开发体验,积极地为其发展做贡献。

小   结

gRPC 无疑是一种两极分化的技术。在开发内部服务间通信时,它的开发体验和性能表现都很出色,但还是有一些开发人员不相信它比 REST 好。

就我们而言,我们将 REST 用于外部 API,将 REST/GraphQL 组合用于内部服务。目前,我们并没有迫切的需求要将 gRPC 集成到我们的工作流中。不过,开发社区的某些部分对它的热情支持还是令人印象非常深刻。在未来几年里,观察 gRPC 生态系统的演变和扩张将是一件非常有趣的事情。

原文链接:

https://konfigthis.com/blog/grpc

声明:本文为 InfoQ 翻译,未经许可禁止转载。

今日好文推荐

谷歌裁掉整个 Python 团队!PyTorch 创始人急得直骂人:“WTF!核心语言团队无可替换”

德国再次拥抱Linux:数万系统从windows迁出,能否避开二十年前的“坑”?

系统 bug 致百人入狱,砸了 2.8 亿元仍上云失败!二十年了,这家大企业被日本软件坑惨了

Rust 生态纯属炒作?3 年写了 10 万行代码的开发者吐槽:当初用 Rust 是被忽悠了

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
围观京妞旧文, 看硅谷居士造假 (请勿推荐)绝境中盛开,一位独立开发者的故事“绩效降低一半还多啊,这一波也太狠了”,银行业降薪引热议,我们分析了42家A股上市银行年报发现……Schwab Platinum 兑现MR点数的比例将贬值【1.1 cpp的比例将有限额】字节跳动发布“豆包 MarsCode”智能开发工具,面向国内开发者免费Create 2024百度AI开发者大会:李彦宏带来三大AI开发工具,让人人都是开发者性瘾患者的真实世界——一句话打造Agent!李彦宏:人人都是开发者的时代到来GDC调查:70%游戏开发者承认,“做网游真的很慌”我在收拾房子,争取五月上市,正现金流 1000谈少年轻狂不如信女娲?!我分明看到的是一张恃强凌弱u型锁的脸!More Graduates Are Taking Jobs in Small Cities, Report Finds女生来!英国NatWest Group开放Women Program申请AI 辅助编码的开发者体验演进:Less Chat 到 More Auto,再到 Easy VerifyWork in Progress: The Changing Face of China’s Migrant Workforce该结婚则结婚,该生则生;不育不孕的烦恼;尹烨谈念头;浙里办相亲“再见,Terraform”! HashiCorp被收购后,开发者跪求 IBM:不要合并 Terraform 和 Ansible优势在我 | "What's your greatest strength?"2024年8款数据库数据分析能力(TPC-H)真实性能评测,真有100倍差距独游开发者广告投放复盘:3万元,如何获得4000个Steam预约玩家?被我恨了半辈子的妈妈,养老计划是和我分居【吉姆小屋】女神节的礼物The Firefighter Documenting Sichuan’s Plateau Forest FiresNvidia 股票上 1000 了!!!!!!公司解散,老板给出的理由是:“女友跟我分手,她撤资了”终于熬到了!Amazon Fresh 4000+生鲜价格下调!Walgreen 1500件商品降价!三大AI开发神器亮相!李彦宏:只要会说话,就可以成为一名开发者1人开发《庄园领主》2天爆卖百万套,神奇开发者接受Epic采访:“我真是新手”意见区里的风暴Kubernetes部署PostgreSQL集群这个暑假跟GRE说分手!25天平均增长21分!常青藤GRE全程冲分班再度起航!Rust 生态纯属炒作?3 年写了 10 万行代码的开发者吐槽:当初用 Rust 是被忽悠了Bun 为 JavaScript 和 TypeScript 开发者提供了一个跨平台的 Shell上海率先打响AI开发者争夺战!大咖云集,先锋毕至 | 2024全球开发者先锋大会Python程序因一个字符串被苹果App Store封杀?开发者:审核规则太黑了!来了来了!Target 周促开始了!收这些家居好物最超值!
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。