什么是微服务?它们与 API 驱动的架构有何不同?
What are microservices and how do they differ from an API-driven architecture?
我想回答这个问题,"Do you use microservices?"我不知道'microservices'具体是什么意思。基本上我在 "What are microservices?" 上阅读的所有内容要么是一堆无用的术语,如 'loosely coupled'、'fine-grained' 和 'lightweight',要么听起来像是由商业管理顾问编写的高管,没有实际内容。
我目前的理解是:
- A
monolithic application
是一种将所有内容(数据库除外)集成到单个代码库中的方法。例如,我编写了一个 ASP.NET MVC 应用程序,其中包含模型、视图和控制器。它是 运行 在 IIS 之上并连接到 MSSQL 的单一代码库。
API-driven application
是业务逻辑与应用程序逻辑分离的一种方式; API defines/implements 业务逻辑,应用程序通过调用 API 与用户交互并执行业务逻辑。例如,我将 ASP.NET MVC 应用程序转换为 A) 在一个容器中 运行 的 API 和 B) 在一个容器中 运行 的单页应用程序 (SPA)单独的容器并执行 API 调用客户端。
稍后,当我开始编写其他应用程序时,每个应用程序都有自己的 SPA 和 API,我决定将身份验证和授权分解到它自己的 API 中。后来,我决定将一些对每个 API 通用但与 authn/authz 无关的业务逻辑分解到另一个 API 中。所以现在每个 SPA 都独立地与(至少)三个 API 进行通信。 (每个 API 是一个单独的容器,每个 SPA 是一个单独的容器。)
这些是微服务吗?什么是微服务?每个应用程序都有一个 API,在大多数情况下,我可以将它们分成多个较小的 API。那么这些单体 API 还是微服务?
我同意你的看法,似乎没有成熟的方法来实际衡量 "small"、"loosely coupled" 等目标。可能很难给出准确的定义,因为它取决于上下文和应用程序的工作方式。
但是,对于微服务架构的开发和部署过程有一些标准:
- 您应该能够相互独立地交付和部署服务。
- 开发团队应该能够独立于其他服务实施服务。
现在真正有趣的问题是如何为服务找到合适的边界。我喜欢这篇文章 How to break a Monolith into Microservices,其中有很好的陈述:
Finding the domain boundaries in a legacy monolith is both an art and
science.
听起来您已经对在单个服务中分离什么进行了很多思考,因此您显然至少在使用微服务的道路上进展顺利。
我想回答这个问题,"Do you use microservices?"我不知道'microservices'具体是什么意思。基本上我在 "What are microservices?" 上阅读的所有内容要么是一堆无用的术语,如 'loosely coupled'、'fine-grained' 和 'lightweight',要么听起来像是由商业管理顾问编写的高管,没有实际内容。
我目前的理解是:
- A
monolithic application
是一种将所有内容(数据库除外)集成到单个代码库中的方法。例如,我编写了一个 ASP.NET MVC 应用程序,其中包含模型、视图和控制器。它是 运行 在 IIS 之上并连接到 MSSQL 的单一代码库。 API-driven application
是业务逻辑与应用程序逻辑分离的一种方式; API defines/implements 业务逻辑,应用程序通过调用 API 与用户交互并执行业务逻辑。例如,我将 ASP.NET MVC 应用程序转换为 A) 在一个容器中 运行 的 API 和 B) 在一个容器中 运行 的单页应用程序 (SPA)单独的容器并执行 API 调用客户端。
稍后,当我开始编写其他应用程序时,每个应用程序都有自己的 SPA 和 API,我决定将身份验证和授权分解到它自己的 API 中。后来,我决定将一些对每个 API 通用但与 authn/authz 无关的业务逻辑分解到另一个 API 中。所以现在每个 SPA 都独立地与(至少)三个 API 进行通信。 (每个 API 是一个单独的容器,每个 SPA 是一个单独的容器。)
这些是微服务吗?什么是微服务?每个应用程序都有一个 API,在大多数情况下,我可以将它们分成多个较小的 API。那么这些单体 API 还是微服务?
我同意你的看法,似乎没有成熟的方法来实际衡量 "small"、"loosely coupled" 等目标。可能很难给出准确的定义,因为它取决于上下文和应用程序的工作方式。
但是,对于微服务架构的开发和部署过程有一些标准:
- 您应该能够相互独立地交付和部署服务。
- 开发团队应该能够独立于其他服务实施服务。
现在真正有趣的问题是如何为服务找到合适的边界。我喜欢这篇文章 How to break a Monolith into Microservices,其中有很好的陈述:
Finding the domain boundaries in a legacy monolith is both an art and science.
听起来您已经对在单个服务中分离什么进行了很多思考,因此您显然至少在使用微服务的道路上进展顺利。