微服务的优势与劣势
作者
Stephanie Susnjara
Staff Writer
IBM Think
Ian Smalley
Staff Editor
IBM Think
微服务架构已经改变了组织构建和部署软件应用程序的方式。微服务不再创建一个所有组件紧密连接的大型应用程序,而是将应用程序拆分为更小、独立的服务。每项服务均处理一项特定的业务功能,并且可以独立开发、部署和扩展。
像 Netflix、Uber、Amazon、Spotify 和 Airbnb 这样的公司都使用微服务来处理每日数以百万计的用户和交易。
微服务架构日益重要,因为它解决了企业在传统应用程序设计中面临的挑战。企业能够构建灵活的整体系统,轻松从故障中恢复,并更快地将新功能推向市场。
微服务已从一个新兴趋势发展成为企业 IT 战略的关键组成部分。根据 Gartner 的数据,74% 的受访组织目前使用微服务架构,另有 23% 计划这样做。1
尽管微服务带来了更高的复杂性,但其优势正推动各行业广泛采用。了解微服务的优势与劣势对于做出明智的采用决策至关重要。
行业时事通讯
辅以专家洞察分析的最新科技新闻
通过 Think 时事通讯,了解有关 AI、自动化、数据等方面最重要且最有趣的行业趋势。请参阅 IBM 隐私声明。
谢谢!您已订阅。
您的订阅将以英语提供。每份时事通讯都包含取消订阅链接。您可以在此管理您的订阅或取消订阅。更多相关信息,请参阅我们的 IBM 隐私声明。
什么是微服务?
微服务架构代表了应用程序设计与构建方式的根本转变——从紧密耦合的系统转向分布式架构。开发者不再将所有功能构建为一个互连系统,而是将功能拆分为独立、松散耦合的服务。每个可独立部署的模块专注于特定的业务能力,并拥有自己的数据存储、业务逻辑和通信接口。
微服务的概念可追溯至 2010 年代,它标志着面向服务架构 (SOA) 的转变。SOA 是一种通过称为服务的可复用软件组件构建业务应用程序的方法。
微服务基于 SOA 原则构建。服务规模更小,团队拥有更高自主权,同时减少集中控制。该架构随着云计算和云原生开发的兴起而获得广泛关注。Amazon 和 Netflix 等大型科技公司率先采用这种方法,因为他们需要更高的灵活性,并能够独立扩展应用程序的不同部分。
如今,微服务已成为主流,其健全的工具和平台生态系统使得各种规模的组织都能采用这一架构。2023 年全球微服务架构市场估值为 3760.8 亿美元。预计到 2030 年将达到 5,232 亿美元,2024 年至 2030 年间的复合年增长率为 4.9%。 2
微服务
什么是微服务?
在本视频中,Dan Bettinger 将简要介绍微服务。Dan 通过一个票务应用程序示例,比较了微服务应用程序架构和传统的单体架构,并阐述了微服务的众多优势,以及为应对单体架构所带来的挑战而提供的解决方案。
深入了解云解决方案
微服务与单体架构
了解微服务与单体应用程序之间的差异,可以解释为何众多组织正在进行架构转型。在单体应用程序中,所有功能作为一个单元构建在单一代码库中。例如,一个处理客户订单、库存管理和账单结算的企业级网络应用程序会将这些功能紧密集成。修改其中任何部分都需要了解其对其他所有部分的影响。
尽管这种简洁性使初始软件开发更为简单,但随着应用程序规模增长,它会引发问题。任何更改都需要重新构建并部署整个应用程序。若单体架构需要扩容,即使是不需要 提升性能的部分,也必须对整个应用程序进行扩展。
微服务通过将应用程序拆分为相互通过应用程序接口 (API) 通信的独立服务来解决这些问题。每个服务拥有独立的代码库和数据库,并可独立部署。
以全球拥有数亿用户的音乐平台 Spotify 为例。当重大专辑发布期间音乐流媒体需求激增时,Spotify 可以扩展其音频传输和播放列表服务,而不会影响用户身份验证或支付处理流程。这种方式使得不同团队能够同时处理各自服务且互不冲突。
微服务架构确实 增加了管理分布式系统的复杂性。许多组织采用混合架构方法,根据具体用例的最佳实践,将微服务与单体系统、无服务器函数及其他架构模式相结合。
微服务如何工作?
微服务通过架构模式、通信方式及支持技术的组合来实现运作。每个微服务作为独立进程运行,并通过 REST API、消息队列或 事件流 提供其 功能。服务通过网络进行通信,以共享数据并触发操作。
例如,当顾客通过优食订购餐食时,多个服务按顺序协同工作。系统可检查餐厅空位情况、处理付款、分配配送司机并向顾客发送更新信息。API 网关通常作为单一入口点管理此类通信,将请求路由至相应的微服务。
容器化技术(例如 Docker)已成为微服务的关键基础。容器将每个微服务与其运行所需的所有组件打包在一起,形成一个标准化的单元,确保在不同环境中以相同方式运行。
Kubernetes 及类似的云平台进一步 推动了这一发展,实现了对这些容器的自动化部署、扩展和管理。它们负责服务发现、负载均衡、运行状况监控以及在出现故障时自动恢复。
Microsoft Azure、IBM® Cloud 和 Google Cloud Platform 等主流云提供商均提供全面的工具和托管服务,用于部署和编排微服务。
除容器外,微服务还依赖其他技术,例如用于管理服务间通信的服务网格、用于监控请求的分布式追踪,以及用于控制访问的 API 管理工具。配置管理系统 允许服务动态获取设置,分布式日志平台则将所有服务的日志汇集至统一位置。
微服务的优势
微服务架构集成带来的优势影响深远。主要优势包括以下几项最显著的优势:
增强可扩展性
更高的敏捷性与更快的上市速度
故障隔离与系统弹性
成本效益
DevOps 集成与持续交付
技术灵活性与创新
增强可扩展性
采用微服务,组织能够按需精准扩展所需功能。例如,在旺季期间, 旅行住宿平台 Airbnb 会扩展搜索和预订服务,同时将房东消息和评价系统等其他服务保持在正常容量。
不同服务根据其需求采用不同的扩展策略。这种模块化方法相比扩展整个单体应用程序,降低了基础设施成本并提高了资源 效率。
更高的敏捷性与更快的上市速度
小型自治团队端到端负责特定服务。每个团队为其服务选择最佳技术,并按自身节奏推进,无需等待组织范围的协调或重新部署周期。
企业可以通过构建新服务等可接入现有系统的功能,快速测试想法、迅速迭代并更快响应市场变化。
故障隔离与系统弹性
如果推荐引擎崩溃,用户仍可浏览产品、将商品加入购物车并完成结算。断路器及类似模式使得服务在依赖项无响应时也能平稳处理故障。
这种弹性对于停机成本高达每分钟数千美元的企业至关重要。即使单个组件发生故障,整个应用程序也极少完全中断,因为故障被隔离在局部。
成本效益
企业通过高效的资源管理节省成本,仅扩展需要 更高容量的服务而非整个应用程序。开发团队可为每个服务的具体需求选择最合适的技术栈以优化成本,避免过度设计或统一采用企业级解决方案带来的开销。基于云的微服务按使用量付费的模式,使成本与实际用量直接对应。
IBM《2021 年企业微服务调研报告》显示,在超过 1,200 名 IT 高管、开发主管和开发者中,87% 同意采用微服务值得投入相应成本与精力。
DevOps 集成与持续交付
由于每个服务独立运行, DevOps 团队可在不导致停机的情况下无缝引入新组件。
自动化测试、部署流水线和基础设施即代码 (IaC) 与微服务良好契合,共同营造快速可靠发布的协作文化。
技术灵活性与创新
每个微服务可采用不同的技术,包括最适合其特定功能的编程语言(例如 Java、Python)、框架和数据库。团队无需为整个应用程序局限于单一技术栈。
组织能够逐步采用新技术、试验新兴工具 ,并 在价值最大的场景中应用专业解决方案。
微服务的劣势
尽管优势显著,微服务也存在一些组织需应对的不足:
测试复杂性
安全考虑因素
通信协调
数据管理
测试复杂性
测试基于微服务的应用需要采用与单体应用程序不同的方法。所有依赖项、缓存和数据访问均需验证以确保性能正常。测试环境涉及多个服务同时运行,且需配置与数据得当。
随着服务数量增长,测试场景也相应扩展。保持跨服务的测试数据一致性与数据完整性需要进行 战略性规划。
安全考虑因素
微服务间的网络通信 提高了安全要求。API 网关需要适当的身份验证和加密机制。
跨多个微服务管理凭证和访问令牌需周密协调,安全团队需要强大的可视化工具来监控分布式架构中的活动。
通信协调
在协调服务间通信时,设计考虑因素变得至关重要。与进程内函数调用相比,服务间的调用会增加网络延迟,且当请求流经多个服务时,这些延迟会累积叠加。
网络弹性功能,如重试机制、超时设置和故障处理,已成为标准实践。随着服务独立演进,管理 API 版本同样需要周密规划。
数据管理
每个微服务管理自身数据库的做法带来了数据管理挑战。当事务跨多个数据库时,保持一致性需要特定的模式;而当数据分布式存储而非集中时,报表生成也需采用不同的方法。
微服务最佳实践
微服务架构需要有意识的规划和细致的执行。最佳实践包括以下 主要策略:
定义清晰的服务边界
实现全面的可观测性
弹性规划
自动化基础设施管理
定义清晰的服务边界
服务边界应与业务能力而非技术功能对齐。每项服务需要有明确的归属和聚焦的职责。
这种方式能防止服务变得过于细碎或蔓延成臃肿的组件,从而违背微服务的初衷。
实现全面的可观测性
跨所有服务的分布式追踪、集中式日志记录和指标收集至关重要。若不具备这种可见性,当问题出现时,跨多个服务的调试将几乎无法进行。
API 网关有助于将身份验证、速率限制和路由等通用 功能整合于一处,避免在各服务中重复实现此逻辑。
弹性规划
将断路器、重试机制和降级策略内建于服务设计中。这些以及其他微服务设计模式为常见挑战提供了 可靠的解决途径。
自动化部署流水线 使团队能够独立交付服务,同时保持系统稳定性。当无需即时响应时,通过消息队列或事件流进行通信可保持服务间的松散耦合,避免紧密依赖。
自动化基础设施管理
随着服务数量增长,基础设施自动化变得至关重要。尽早实施容器编排、部署自动化和配置管理,以避免运维瓶颈。
复制链接