简介
在本节课中,我们将概览一下本章内容将带给你哪些收获!
微服务:定义
不幸的是,目前并没有一个被广泛认可的“微服务”定义。在本课程中,将采用以下定义:
微服务 是可独立部署的模块。
例如,一个电商系统可以划分为以下模块:
- 订单处理
- 用户注册
- 商品搜索
通常情况下,这些模块会作为一个整体应用进行开发。在这种模式下,任何一个模块的变更都必须通过发布整个应用的新版本才能上线。然而,当这些模块以微服务的形式实现时,订单处理模块不仅可以独立于其他模块进行修改,甚至可以独立部署上线。
这大大加快了部署速度,并减少了所需的测试工作量,因为只需部署单个模块即可。由于这种更高的解耦程度,大型项目可以拆分为多个小型项目,每个项目负责一个独立的微服务。
从技术层面实现这一点的关键是:每个微服务必须是一个独立的进程。更优的解耦方案是为每个微服务提供独立的虚拟机或 Docker 容器。
在这种架构下,部署操作仅替换某个微服务的 Docker 容器,用新版本的容器启动并处理其请求。其他微服务不受影响,从而实现了真正的独立性。
这一微服务定义的优势
将微服务定义为可独立部署的模块具有以下优势:
-
定义非常简洁。
-
具有高度的通用性,适用于各种常见的微服务系统。
-
该定义基于“模块”这一概念,而模块是广为人知且易于理解的。这使得我们可以借鉴大量关于模块化设计的思想。同时,该定义也强调了微服务是更大系统的一部分,无法完全独立运行,必须与其他微服务协同集成。
-
独立部署是微服务的核心特性,带来了诸多优势,因此至关重要。尽管定义简短,但它准确揭示了微服务最本质的特征。
部署单体架构
非微服务构成的系统只能整体部署,因此被称为 部署单体(deployment monolith)。当然,部署单体也可以划分为模块,但“部署单体”这一术语并不涉及系统的内部结构。
微服务的规模
上述微服务定义并未对微服务的大小做出规定。虽然“微服务”一词暗示了其应为小型服务,但在实际应用中,微服务的规模差异极大。有些微服务需要一个完整团队持续维护,而另一些可能仅由几百行代码组成。因此,微服务的大小并不适合作为定义的一部分。
本章概览
本章介绍了微服务的概念,并讨论了:
-
微服务的优点和缺点,帮助读者评估该架构在特定项目中的适用性和价值。
-
优点的讨论说明了微服务能够解决哪些问题,以及如何根据不同的场景灵活调整架构。
-
缺点的分析揭示了其中的技术挑战与风险,并提出应对策略。
-
准确识别优点与缺点,对于技术选型和架构决策至关重要——目标应是最大化收益,同时最小化潜在风险。
测 试
下一节课我们将探讨使用微服务的优势。
Quiz
微服务的代码长度不应超过几百行。