API和微服务之间的真正区别是什么?

19

我正在学习微服务,但不理解创建 REST API 和创建 微服务 的真正区别是什么?
我在使用 Go 语言进行开发,但我的问题适用于所有编程语言。

6个回答

16

微服务的方法是将系统(“代码堆”)拆分为许多小型服务,每个服务通常具有以下特点:

  • 清晰的与业务相关的责任
  • 运行进程
  • 数据库
  • 代码版本控制(例如 git)仓库
  • API(其他服务/客户端将联系微服务的协议)
  • 用户界面

这些服务保持小型,因此随着系统增长,而不是更大的服务,会有更多的服务。

微服务可以使用REST、RPC或任何其他方法相互通信,因此REST或API与微服务的主题实际上是正交的...

参考资料:什么是API?请用简单易懂的语言解释


但在我创建三个API之前,我不明白如何修改它们以将其转换为微服务。 - fm433403
1
@fm433403,你应该首先问自己的问题是 - 微服务架构可以解决哪些问题?它是用于非常特定的一组挑战的工具。这是一种不免费的工具。因此,在使用之前,请确保您了解该工具。例如,请查看http://samnewman.io/books/building_microservices/。 - Lech Migdal

9

API = 应用程序编程接口

微服务 = 一种架构

简而言之

  • 微服务应该公开一个明确定义的API。
  • 微服务是您可能希望构建解决方案的方式。
  • API是您的消费者所看到的。
  • 您可以在后端公开API而无需使用微服务(实际上,大多数非培训场景不需要微服务)。

在决定使用微服务之前,您可能需要阅读http://samnewman.io/books/building_microservices/(除非这是为培训目的)。


1
那么对于一个Web应用程序来说,理想的情况是为我的内部问题创建微服务,并暴露API? - fm433403
1
如果我理解你的问题正确,答案是肯定的。您可以公开API,这些API可能是使用微服务架构创建的。请确保微服务对您来说是一个好的架构,并且您拥有正确大小的微服务(例如针对特定业务域)。您可能希望查看Netflix如何使用微服务的一些演示文稿,以了解他们使用的微服务大小,例如在此处https://www.nginx.com/blog/microservices-at-netflix-architectural-best-practices/。 - Lech Migdal

2

微服务是在实体/域级别上遵循SOC-关注点分离时定义良好的,其中每个实体/域都独立于任何其他服务。

例如用户服务只负责存储、更新和删除与用户相关的信息。

微服务后端和前端可以进一步分为两部分:

  1. 前端微服务,就像Web API一样公开REST端点
  2. 后端微服务实际执行所有操作。

Rest API更多地是向外界公开的端点,并且可以与微服务一起使用,如上所述。


1
大多数答案基于将API视为编程接口的老派理解。如今,这个意义已经融合了起来,并开始让人们感到困惑,因为一些开发人员开始(出于简单或错误)将应用程序的API解释为应用程序本身。在这种情况下,现代API和微服务之间是不可能区分的。尽管如此,我们可以说一个API应用程序可以包含许多微服务,其中大部分通过微服务的API在应用程序内部交互,而其他一些则可能将它们的API公开为应用程序的API。此外,微服务(作为服务)可能不包括其他微服务(服务),但可能通过基于API的调用编排微服务组合。应用程序可能包含微服务,但在最佳实践中,可能不包含其他应用程序。

1

微服务

微服务架构是将一个应用逻辑切片成小的部件或组件,它们可以在它们之间相互作用和/或通过API公开。

应用程序接口(API)

一个(web)应用程序需要使用一组对象实体(模型)和对它们进行可能的操作来设计业务逻辑。 应用程序编程接口(API)是一种通过公开特定入口点来请求应用程序并负责调用适当应用程序操作的方法。

ReST(ful) API(“ReST”代表表现层状态转换)是符合至少这5个约束条件的API:

  • 用户界面与数据存储和操作是不同的(客户端-服务器架构)
  • 服务器上不存储任何客户端上下文(“无状态”)
  • 服务器响应必须隐式或显式地定义为可缓存或不可缓存
  • 客户端不必意识到他和服务器之间的层
  • 响应/请求消息必须:自我描述;允许识别资源;使用表示形式允许操作资源;宣布可用的操作和资源(“统一接口”)。

“真正的区别”

因此,尽管这些概念显然相关,但它们是明显不同的概念:

  • 一个API(应用程序编程接口)无论是否符合ReST标准,都会暴露服务器提供的操作,这些操作可以被分割成更小的组件(微服务)。

  • 而在微服务架构中,虽然典型的Web(ReST)API使用HTTP协议在客户端和服务器之间通信,但是微服务内部的组件可能使用其他协议进行通信(例如WAMP, AMQP, JSON-RPC, XML-RPC, SOAP等)。


0
通俗来讲,如果你有一个Web API服务器,将其分成几个独立的迷你服务器,并使用代理服务器和负载均衡器进行群集化,(可选地,为每个服务器提供单独的数据库实体),那就是一种微服务架构。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接