当前位置: 首页 > 知识库问答 >
问题:

REST vs GRPC:我应该在什么时候选择一个而不是另一个?

牛景同
2023-03-14

我看到越来越多的软件组织在其面向服务的架构中使用gRPC,但人们也仍然在使用REST。在什么用例中使用gRPC是有意义的,什么时候使用REST进行服务间通信是有意义的?

有趣的是,我遇到过同时使用REST和GRPC的开源项目。例如,Kubernetes和Docker Swarm都在某种程度上使用gRPC来进行集群协调,但也公开了REST API来与主/主节点进行接口。为什么不上下使用gRPC?

共有1个答案

沈国安
2023-03-14

如果做得正确,REST以牺牲性能和增加复杂性为代价,提高了长期的可演化性和可伸缩性。REST对于必须独立开发和维护的服务非常理想,比如Web本身。客户机和服务器可以松散耦合,在不中断对方的情况下进行更改。

RPC服务可以更简单、性能更好,但代价是灵活性和独立性。RPC服务非常适合客户机和服务器紧密耦合并遵循相同开发周期的情况。

然而,大多数所谓的REST服务实际上根本不遵循REST,因为REST只是任何类型HTTP API的流行语。事实上,大多数所谓的REST API都是紧密耦合的,与RPC设计相比,它们没有任何优势。

 类似资料:
  • 问题内容: 流式XML解析器(例如SAX和StAX)比构建像DOM解析器之类的树结构的解析器更快,内存效率更高。SAX是推送分析器,这意味着它是观察者模式(也称为侦听器模式)的实例。SAX首先出现,然后是StAX- 拉式解析器,这意味着它基本上像迭代器一样工作。 您可以找到在任何地方都偏爱StAX而不是SAX的原因,但是通常可以归结为:“更易于使用”。 在JAXP上的Java教程中,StAX被模糊

  • 我目前正在学习做rosalind问题(基本上是一堆与生物信息学相关的代码)。 我目前正在用以下类型表示一条DNA链: 我最初的原因是封装字节片,这样我就知道它只包含代表核苷酸的字节:。我意识到这显然没有保护,因为我可以简单地做: 也不再保证我的dna链包含一个字节数组,其中只有来自这四个字节的元素。 因为我的结构只包含一个字节数组是更好/更理想的做法: 还是让类型包含dna链更好?对于何时使用这两

  • 我目前正在通过做rosalind问题(基本上是一堆生物信息学相关的代码katas)来学习Go。 我当前表示的DNA链类型为: 我最初的原因是封装字节片,这样我就知道它只包含代表核苷酸的字节:。我意识到这显然不是瓜分,因为我可以简单地做到: 由于我的结构只包含一个字节数组,这样做是否更好/更理想: 还是让类型包含dna链更好?对于何时使用这两种方法中的任何一种,有什么经验法则吗?

  • 问题内容: 在本文中, Nick Coghlan讨论了PEP 435类型的 一些设计决策,以及如何将其子类化以提供不同的体验。 但是,我给出的建议(我是stdlib的主要作者)关于使用元类的建议是,在没有充分好的理由的情况下不应该这样做- 例如,无法使用类装饰器或专用工具来完成所需的工作隐藏任何丑陋的功能;而在我自己的工作,我已经能够做到我需要什么简单的使用,在创建时,和/或正常类/实例方法类:

  • 问题内容: 我是一名C ++程序员,偶尔使用MySQL处理数据库,但是我的SQL知识非常有限。但是,我当然愿意改变这一点。 目前,我正尝试仅通过SQL查询对数据库中的数据进行分析(!)。但是我将放弃,而是将数据导入C 并使用C 代码进行分析。 我已经与同事讨论了这一点,他们也促使我使用C ++,他说SQL并不是用于复杂的分析,而是主要用于导入(从现有表中)和导出(到新表中)数据,还有更多内容。例如

  • 问题内容: 什么时候应该创建一个检查异常,什么时候应该创建一个运行时异常? 例如,假设我创建了以下类: 我应该如何创建我的?它应该扩展还是?还是我应该只使用它? 问题答案: 在这个话题上有很多分歧。在我的上一份工作中,我们遇到了一些实际问题,运行时异常被遗忘了,直到它们出现在生产环境中(在ageswards.com上),因此我们决定只使用已检查的异常。 在我目前的工作中,我发现在很多情况下都有很多