微服务教程:定义、架构和示例

什么是微服务?

微服务是一种面向服务的架构模式,应用程序构建为各种最小独立的服务单元的集合。它是一种软件工程方法,专注于将应用程序分解为具有明确定义的接口的单功能模块。这些模块可以由拥有服务整个生命周期的小团队独立部署和运行。

“微”这个词指的是微服务的大小,必须由一个开发团队(5到10名开发人员)来管理。在这种方法中,大型应用程序被划分为最小的独立单元。

什么是单体架构?

通俗地说,您可以认为单体架构就像一个大容器,应用程序的所有软件组件都被捆绑在一个包中。

让我们以电子商务商店为例,讨论单体架构。

Monolithic Architecture
电子商务应用程序的单体架构

在任何电子商务应用程序中,都存在一些标准功能,例如搜索、评论和评分以及支付。客户可以通过浏览器或应用程序访问这些功能。当电子商务网站的开发人员部署应用程序时,它是一个单一的单体单元。搜索、评论和评分以及支付等不同功能的代码位于同一服务器上。要扩展应用程序,您需要运行这些应用程序的多个实例(服务器)。

什么是微服务架构?

微服务架构是一种架构开发风格,它允许将应用程序构建为针对业务领域开发的独立小服务的集合。它是结构化风格架构的一个变体,有助于将应用程序组织为松耦合的服务集合。微服务架构包含细粒度的服务和轻量级协议。

让我们以使用微服务架构开发的电子商务应用程序为例。在此微服务架构示例中,每个微服务都专注于单一业务功能。搜索、评分和评论以及支付都有自己的实例(服务器)并相互通信。

Microservices Architecture
微服务架构

在单体架构中,所有组件都合并为一个模块。但在微服务架构中,它们分布在各个模块(微服务)中,这些模块会相互通信,如上面的微服务示例所示。

微服务之间的通信是一种无状态通信,其中每个请求和响应对都是独立的。因此,微服务可以轻松通信。在微服务架构中,数据是联邦化的。每个微服务都有自己的独立数据存储。接下来,在本 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 是一个开源项目,允许我们使用容器创建、部署和运行应用程序。通过使用这些容器,开发人员可以将应用程序作为一个独立包运行。它允许您将库和其他依赖项打包在一个包中。

下载链接:https://dockerd.com.cn/

3) Hystrix

Hystrix 是一个容错 Java 库。此工具旨在分离对远程服务、系统和第三方库的访问点,这些在微服务等分布式环境中。它通过隔离失败的服务并防止故障的级联效应来改进整个系统。

下载链接:https://github.com/Netflix/Hystrix

微服务架构的最佳实践

  • 每个微服务使用单独的数据存储
  • 保持相似成熟度的代码。
  • 每个微服务独立构建。
  • 始终将无状态视为严重。

摘要

  • 微服务是一种面向服务的架构模式,其中应用程序构建为各种最小独立的服务单元的集合。
  • 微服务架构是一种架构开发风格,它允许将应用程序构建为针对业务领域开发的独立小服务的集合。
  • 单体架构就像一个大容器,应用程序的所有软件组件都被捆绑在一个包中。
  • 在微服务中,整个应用程序的每个单元都应该是最小的,并且它应该能够交付一个特定的业务目标。
  • 在单体架构中,庞大的代码库会减慢整个开发过程。新版本可能需要数月时间。代码维护困难。
  • 微服务有两种类型:1) 无状态 2) 有状态
  • Java 中的微服务相互依赖,并且它们必须相互通信。帮助您专注于特定功能和业务需求。
  • 面向服务的架构,简称 SOA,是分布式计算的一种演进,基于同步和异步应用程序的请求或响应设计模型。
  • 在 SOA 中,软件组件以服务的形式暴露给外部世界以供使用,而微服务是 SOA 的一部分。它是 SOA 的一种实现。
  • Wiremock、Docker 和 Hystrix是一些流行的微服务工具。