微服务知识概览 | 青训营

93 阅读6分钟

前言 (微服务的诞生背景)

传统的单体应用架构中,所有功能模块都被打包在一个单独的应用程序中。随着业务规模的不断扩大,这种单体架构会导致以下问题:

  1. 难以维护和扩展: 单体应用程序随着时间的推移变得越来越庞大而复杂,其中一个小的改变可能会影响整个系统。维护和更新变得困难,开发团队无法同时独立进行部分修改或添加新功能。
  2. 高度耦合: 单体应用程序中的模块之间紧密耦合,一个模块的修改可能会影响其他模块,使得系统变得脆弱。此外,由于所有的功能都集中在一个应用中,跨团队的协作和并行开发也变得困难。
  3. 扩展性受限: 单体应用程序通常是以垂直方式进行扩展,即在增加更多的资源(例如服务器)来处理高负载。这种扩展模式的成本较高,且无法根据需求进行灵活的调整。

因此,为了应对这些问题,微服务Microservice架构应运而生。微服务架构将一个大型应用拆分成多个小的、相对独立的服务,每个服务都专注于特定的业务功能,并可以被独立部署和扩展。

微服务的基础概念

  1. 服务Service:服务是指一个独立的、可部署和可扩展的功能模块。它代表着一个小的、相对独立的应用程序。每个服务都有自己的职责和边界,并可以独立地进行开发、部署和维护。
  2. 实例Instance:实例是指运行中的特定服务的一个具体副本。当一个服务启动时,它会作为一个实例在某个服务器或容器中运行。同一个服务可以有多个实例,以提供高可用性和负载均衡。
  3. 集群Cluster:集群是指由多个相同类型的实例组成的组合。集群中的实例共享相同的服务代码和配置,但运行在不同的计算节点上。通过创建集群,可以实现服务的水平扩展和容错性。

在课程《微服务架构原理及特征》中(如下面的图片),生动地说明服务、实例、集群这三者之间的关系:服务是特定功能模块的抽象,实例是运行中的服务的具体副本,集群是由多个实例组成的集合。

image.png

微服务架构优势

  1. 可扩展性:进行微服务的拆分后,由于每个微服务都是独立运行的,我们就可以根据需要独立地进行横向扩展,从而提高系统的整体可扩展性。
  2. 可维护性:由于微服务的单一职责原则,每个服务都相对较小且易于理解和维护。这使得开发人员能够更快地定位和修复问题,并且更容易进行重构和持续改进。
  3. 独立部署:微服务的独立性使得可以单独为每个服务进行部署,这意味着可以根据需要更新或维护一个特定的微服务,而无需停止整个应用程序。
  4. 灵活性和敏捷性:微服务架构允许团队根据功能和业务逻辑将应用程序划分成更小的服务,从而提供更多的灵活性。不同的团队可以专注于开发和维护特定的微服务,可以更快地推出新功能和对市场做出反应。

微服务架构劣势

尽管微服务架构降低了系统的耦合,提高了系统的可扩展性和可维护性,但也存在一些挑战和潜在的问题。

微服务架构相较于单体架构,将系统功能拆分为若干微服务,这就会使得服务数量众多且变化频繁。这种分散性和组件化带来了更复杂的系统架构和技术栈,需要额外的努力来维护和管理整个生态系统。

由于微服务之间的通信是通过网络进行的,相较于单体架构,会产生大量的调用服务的开销,包括序列化、反序列化、网络延迟和数据传输等。这可能导致在高负载情况下性能下降。

微服务架构中的服务分布在不同的服务器或容器上,要处理分布式通信复杂性、系统的监控和故障排查、故障恢复和一致性等挑战。

微服务的核心机制

为了应对微服务架构拆分后所带来的问题和挑战,就需要:

  1. 提供管理和控制服务的生命周期的机制(通过使用服务注册与发现、负载均衡和熔断等机制,提高服务间通信的可靠性,并降低系统故障和延迟的可能性)。
  2. 选择适当的通信机制可以减少传输开销和网络延迟(使用轻量级的消息队列或异步通信来减少同步调用的耦合)。
  3. 实施全面的监控和日志记录。使用合适的工具和平台,可以实时跟踪和监测服务的性能、健康状态和错误日志,帮助定位问题并进行及时的故障排查。
  4. 使用自动化工具和平台来进行持续集成、持续交付和自动化运维。这可以降低部署和维护的复杂性,并提高整体的效率和可靠性。
  5. 采用认证、授权、加密以及其他安全机制。通过适当实施这些机制,可以确保微服务系统的安全性和保护用户的数据和隐私。

在课程《微服务架构原理及特征》中(如下面的图片),生动地说明了应对微服务拆分后挑战的方法:进行服务的治理、建立服务可观测机制、采用多种安全技术保障服务的安全等。

image.png

总结

传统单体架构有着难以维护、高度耦合等严重问题,我们可以采用微服务架构,将大型应用拆分为多个小的、相对独立的服务。每个服务都有自己的职责和边界,并可以独立进行开发、部署和维护。因此就可以提高系统的可扩展性、可维护性、灵活性和敏捷性,便于独立部署测试。

然而,微服务架构也存在一些挑战和劣势,如复杂性、通信开销和分布式系统管理的问题。为了应对这些问题,需要采取一些核心机制,包括管理和控制服务生命周期的服务治理机制、选择适当的通信机制、服务可观测机制、使用自动化工具和平台进行持续集成和运维、以及采用安全机制来确保系统的安全性。