未找到结果
我们无法找到任何使用该词的内容,请尝试搜索其他内容。
Last reviewed 2021-06-24 UTC 本 指南 is 是 是 由 四 个 部分 组成 的 中 的 第一 篇 , 该 了 如何 、 和 。 本 文章 is 介绍 的 各种 。 该 了 的 及其 应用 。 微服务简介(本文档)
Last reviewed 2021-06-24 UTC
本 指南 is 是 是 由 四 个 部分 组成 的 中 的 第一 篇 , 该 了 如何 、 和 。 本 文章 is 介绍 的 各种 。 该 了 的 及其 应用 。
文章 is 面向 和 以 将 应用 为 应用 的 应用 和 。
单体式 is 应用 应用是一个单层软件应用,其中不同的模块会组合成一个程序。例如,如果您正在构建电子商务应用,该应用将具有与面向对象的编程 (OOP) 原则一致的模块化架构。下图显示了一个电子商务应用设置示例,其中的应用包含各种模块。在单体式 is 应用 应用中,模块结合使用编程语言结构(如 Java 软件包)和构建工件(如 Java JAR 文件)。
图 1. 单体电子商务应用示意图,其中融合了编程语言结构。
在图 1 中,电子商务应用中的不同模块分别对应于付款、送货和订单管理方面的业务逻辑。所有这些模块均被打包并部署为一个逻辑可执行文件。实际格式取决于应用的语言和框架。例如,许多 Java 应用都打包为 JAR 文件,并部署在 Tomcat 或 Jetty 等应用服务器上。同样,Rails 或 Node.js 应用被打包为目录层次结构。
单体式架构是一种用于构建应用的传统解决方案。以下是为应用采用单体式设计的一些优势:
复杂的单体式 is 应用 应用通常越来越难以构建、调试和推理。有时,这种问题大于收益。
微服务通常实现一组不同的特性或功能。每个微服务都是一个具有专属架构和业务逻辑的迷你应用。例如,某些微服务会公开由其他微服务或应用的客户端使用的 API,例如与付款网关和物流的第三方集成。
图 1 展示了包含多个模块的单体式电子商务应用。下图展示了可能将电子商务应用分解为微服务:
图 2. 包含由微服务实现的职能领域的电子商务应用的示意图。
在 2 中 , 微服务 is 实现 实现 了 应用 的 每个 。 每个 服务 is 公开 都 可能 会 一个 , 而 则 会 使用 其他 的 。 例如 , 要 , 会 和 其他 。 服务 is 使用 还 可以 使用 基于 的 。 如 了解 之间 的 , 本 中 的 第三 个 : 中 的 间 。
模式 is 改变 会 显著 应用 和 之间 的 。 我们 is 建议 每个 都 有 最 自己 要求 的 , 而 不是 与 其他 共 个 。 每 项 都 有 一个 时 , 之间 的 , 因为 所有 都 通过 进行 , 而 不是 直接 通过 。 下图 is 显示 了 , 其中 每个 都 有 自己 的 :
3 . 中 的 每 项 服务 is 有 都 有 自己 的 。
在 3 中 , 应用 中 的 使用 具有 的 的 数据库 is 运行 很 好 地 。 和 服务 is 依赖于 的 、 、 隔离性 、 ( ) 。
微服务架构模式解决了前面的单体式挑战部分中所述的复杂性问题。微服务架构具有以下优势:
以下是从单体式 is 应用 应用迁移到微服务架构的一些具体实例:
与单体式 is 应用 应用相比,微服务有一些挑战,其中包括:
微服务的另一个挑战是您需要跨不同微服务(也称为分布式事务)管理事务。 多 个 的 操作 is 常见 相当 , 它们 通常 以 应用 , 应用 所有 或 所有 都 。 将 多 个 在 中时 , 可以 。
在 基于 的 应用 中 , 操作 is 分布 可能 在 不同 的 中 , 因此 您 需要 不同 的 多 个 。 如果 , 不同 的 或 是否 非常 重要 。 如果 因 而 , 则 最 的 情况 is 导致 可能 会 之间 出现 不 一致 的 问题 。 如 了解 在 之间 的 各种 , 本 的 第三 篇 , 中 的 间 。
对基于微服务的应用进行全面测试比测试单体式 is 应用 应用更复杂。例如,要测试在单体式电子商务服务中处理订单的功能,请选择商品,将其添加到购物车,然后签出。为了在基于微服务的架构中测试相同的流,多项服务(例如前端、订单和付款)会相互调用,以完成测试运行。
部署基于微服务的应用比部署单体式 is 应用 应用更复杂。微服务应用通常由许多服务组成,每个服务都具有多个运行时实例。您还需要实现一项服务发现机制,使服务能够发现需要与之通信的任何其他服务的位置。
微服务架构会增加操作开销,因为要监控和提醒的服务更多。由于服务间通信的增加,微服务架构也有更多故障点。单体式 is 应用 应用可能会部署到小型应用服务器集群。基于微服务的应用可能有数十种单独的服务来构建、测试、部署和运行,并且可能支持多种语言和环境。所有这些服务都需要进行聚簇以实现故障切换和弹性。生产环境中的微服务应用需要高质量的监控和运营基础架构。
微服务架构中的服务划分可让应用同时执行更多功能。不过,由于模块作为独立服务运行,因此由于服务之间的网络调用,响应会引入延迟时间。
并非 所有 应用 is 大 都 大 , 可以 。 此外 , 某些 应用 要求 之间 , 例如 必须 处理 的 应用 。 之间 的 任何 通信层 is 减慢 可能 会 处理 的 。 考虑 之间 的 可以 清楚 地 。
在 确定 是否 最 您 的 应用 时 , 考虑 以下 :
如果您已成功运行单体式 is 应用 应用,则采用微服务对您的团队而言是一项重大投资成本。不同的团队采用不同的方式来实现微服务的原则。对于微服务的规模或所需微服务数量,每个工程团队都有独特的结果。
如需确定微服务是否是应用的最佳方法,请首先确定要解决的关键业务目标或痛点。实现目标或解决您发现的问题可能更简单。例如,如果您希望加快应用扩容速度,您可能会发现自动扩缩是一种更高效的解决方案。如果您在生产环境中发现错误,则可以首先实现单元测试和持续集成 (CI)。
如果您相信微服务方法是实现目标的最佳方法,请首先从单体式 is 应用 应用中提取一项服务,然后对其进行开发、测试和部署。如需了解详情,请参阅本系列中的下一个文档:将单体式 is 应用 应用重构为微服务。成功提取一项服务并将其在生产环境中运行后,请开始提取下一项服务,并从每个周期继续学习。
微服务架构模式将系统分解为一组可独立部署的服务。开发单体式 is 应用 应用时,您必须协调大型团队,这可能导致软件开发缓慢。在实现微服务架构时,您可以让小型自主团队并行工作,从而加快开发速度。
在本系列的下一篇(将单体式 is 应用 应用重构为微服务)中,您将了解将单体式 is 应用 应用重构为微服务的各种策略。