微服务教程:定义、架构和示例
什么是微服务?
微服务是一种面向服务的架构模式,应用程序构建为各种最小独立的服务单元的集合。它是一种软件工程方法,专注于将应用程序分解为具有明确定义的接口的单功能模块。这些模块可以由拥有服务整个生命周期的小团队独立部署和运行。
“微”这个词指的是微服务的大小,必须由一个开发团队(5到10名开发人员)来管理。在这种方法中,大型应用程序被划分为最小的独立单元。
什么是单体架构?
通俗地说,您可以认为单体架构就像一个大容器,应用程序的所有软件组件都被捆绑在一个包中。
让我们以电子商务商店为例,讨论单体架构。

在任何电子商务应用程序中,都存在一些标准功能,例如搜索、评论和评分以及支付。客户可以通过浏览器或应用程序访问这些功能。当电子商务网站的开发人员部署应用程序时,它是一个单一的单体单元。搜索、评论和评分以及支付等不同功能的代码位于同一服务器上。要扩展应用程序,您需要运行这些应用程序的多个实例(服务器)。
什么是微服务架构?
微服务架构是一种架构开发风格,它允许将应用程序构建为针对业务领域开发的独立小服务的集合。它是结构化风格架构的一个变体,有助于将应用程序组织为松耦合的服务集合。微服务架构包含细粒度的服务和轻量级协议。
让我们以使用微服务架构开发的电子商务应用程序为例。在此微服务架构示例中,每个微服务都专注于单一业务功能。搜索、评分和评论以及支付都有自己的实例(服务器)并相互通信。
在单体架构中,所有组件都合并为一个模块。但在微服务架构中,它们分布在各个模块(微服务)中,这些模块会相互通信,如上面的微服务示例所示。
微服务之间的通信是一种无状态通信,其中每个请求和响应对都是独立的。因此,微服务可以轻松通信。在微服务架构中,数据是联邦化的。每个微服务都有自己的独立数据存储。接下来,在本 Java 微服务教程中,我们将了解微服务和单体架构之间的区别。
微服务与单体架构
微服务 | 单体架构 |
---|---|
整个应用程序的每个单元都应该是最小的,并且它应该能够交付一个特定的业务目标。 | 一个代码库实现所有业务目标 |
服务启动相对较快 | 服务启动耗时较长 |
故障隔离容易。即使一个服务出现故障,其他服务也可以继续运行。 | 故障隔离困难。如果某个特定功能不起作用,则整个系统都会崩溃。为了处理此问题,需要重新构建、重新测试和重新部署应用程序。 |
所有微服务都应松耦合,以便在一个微服务中所做的更改不会影响其他微服务。 | 单体架构是紧耦合的。代码模块中的更改会影响其他模块 |
企业可以将更多资源部署到产生更高投资回报率的服务上。 | 由于服务未隔离,因此无法进行单独的资源分配 |
可以将更多硬件资源分配给频繁使用的服务。在上面的电子商务示例中,与支付相比,有更多的用户查看产品列表和搜索。因此,可以为搜索和产品列表微服务分配更多资源。 | 应用程序扩展既具挑战性又浪费资源。 |
微服务始终保持一致并持续可用。 | 由于需要从头开始进行流程,开发工具会变得负担过重。 |
数据是联邦化的。这允许各个微服务采用最适合其需求的数据模型。 | 数据是集中的。 |
小型专注的团队。并行且更快的开发 | 需要庞大的团队和大量的团队管理工作 |
一个微服务的数据模型更改不会影响其他微服务。 | 数据模型更改会影响整个数据库 |
通过使用定义良好的接口与其他微服务进行交互 | 不适用 |
微服务遵循一种关注产品而非项目的原则 | 强调整个项目 |
代码库之间没有交叉依赖。您可以为不同的微服务使用不同的技术。 | 一个功能或程序依赖于其他功能或程序。 |
微服务挑战
- 微服务相互依赖,并且它们必须相互通信。
- 与单体系统相比,使用不同编程语言开发的要监控的服务更多。
- 由于这是一个分布式系统,因此它是一个固有的复杂模型。
- 不同的服务将有其单独的机制,导致非结构化数据需要大量内存。
- 需要有效的管理和团队协作来防止级联问题
- 当问题在一个版本中消失,又出现在最新版本中时,重现问题将是一项艰巨的任务。
- 使用微服务进行独立部署很复杂。
- 微服务架构带来了大量的操作开销。
- 当新服务添加到系统中时,管理应用程序很困难
- 需要广泛的专业人才来支持异构分布的微服务
- 微服务成本高昂,因为您需要为不同的业务任务维护不同的服务器空间。
SOA 与微服务
SOA服务由注册中心维护,该注册中心充当目录列表。应用程序需要查找注册中心中的服务并调用该服务。
换句话说,SOA 就像一个管弦乐队,每个艺术家都演奏自己的乐器,而乐团总监则向所有人发出指示。
另一方面,微服务是一种面向服务的架构风格,其中应用程序构建为各种较小服务的集合,而不是单个软件或应用程序。
微服务就像一个表演团,每个舞者都是独立的,并且知道他们需要做什么。所以,如果他们漏掉了一些舞步,他们就知道如何回到正确的顺序。现在,在本微服务架构教程中,让我们了解 SOA 和微服务之间的区别。
以下是 SOA 和微服务之间的详细比较
参数 | SOA | 微服务 |
---|---|---|
设计类型 | 在 SOA 中,软件组件以服务的形式暴露给外部世界以供使用。 | 微服务是 SOA 的一部分。它是 SOA 的一种实现。 |
依赖性 | 业务单元是相互依赖的。 | 它们是相互独立的。 |
软件大小 | 软件大小大于任何常规软件 | 微服务的软件大小始终很小 |
技术栈 | 与微服务相比,技术栈较低。 | 微服务技术栈可能非常庞大 |
应用程序的性质 | 本质上是单体的 | 本质上是全栈的 |
独立性和焦点 | SOA 应用程序构建用于执行多个业务任务。 | 它们是为执行单个业务任务而构建的。 |
部署 | 部署过程耗时较长。 | 部署简单直接,耗时更少。 |
成本效益 | 更具成本效益。 | 成本效益较低。 |
可扩展性 | 少于微服务。 | 高度可扩展。 |
业务逻辑 | 业务逻辑组件存储在单个服务域中。简单的线协议(HTTP 与 XML JSON)。API 由 SDK/客户端驱动。 | 业务逻辑可以跨域存在,企业服务总线等层位于服务之间。中间件 |
微服务工具
1) Wiremock:测试微服务
WireMock 是一个灵活的库,用于存根和模拟 Web 服务。当它收到特定请求时,它可以配置 HTTP API 返回的响应。它也用于测试微服务。
下载链接:http://wiremock.org/
2) Docker
Docker 是一个开源项目,允许我们使用容器创建、部署和运行应用程序。通过使用这些容器,开发人员可以将应用程序作为一个独立包运行。它允许您将库和其他依赖项打包在一个包中。
3) Hystrix
Hystrix 是一个容错 Java 库。此工具旨在分离对远程服务、系统和第三方库的访问点,这些在微服务等分布式环境中。它通过隔离失败的服务并防止故障的级联效应来改进整个系统。
下载链接:https://github.com/Netflix/Hystrix
微服务架构的最佳实践
- 每个微服务使用单独的数据存储
- 保持相似成熟度的代码。
- 每个微服务独立构建。
- 始终将无状态视为严重。
摘要
- 微服务是一种面向服务的架构模式,其中应用程序构建为各种最小独立的服务单元的集合。
- 微服务架构是一种架构开发风格,它允许将应用程序构建为针对业务领域开发的独立小服务的集合。
- 单体架构就像一个大容器,应用程序的所有软件组件都被捆绑在一个包中。
- 在微服务中,整个应用程序的每个单元都应该是最小的,并且它应该能够交付一个特定的业务目标。
- 在单体架构中,庞大的代码库会减慢整个开发过程。新版本可能需要数月时间。代码维护困难。
- 微服务有两种类型:1) 无状态 2) 有状态
- Java 中的微服务相互依赖,并且它们必须相互通信。帮助您专注于特定功能和业务需求。
- 面向服务的架构,简称 SOA,是分布式计算的一种演进,基于同步和异步应用程序的请求或响应设计模型。
- 在 SOA 中,软件组件以服务的形式暴露给外部世界以供使用,而微服务是 SOA 的一部分。它是 SOA 的一种实现。
- Wiremock、Docker 和 Hystrix是一些流行的微服务工具。