Skip to content
🗂️ 文章分类: 软考  
🏷️ 文章标签: 软考  
📅 文章创建时间: 2026-08-28
🕘️ 文章最后更新时间:2026-08-28

[toc]

系统分析师笔记20_微服务系统分析与设计 ​

该笔记内容来自《系统分析师教程》第2版。

微服务系统概述 ​

微服务系统是一类基于微服务架构风格的分布式系统,它将应用程序拆分成多个独立的小型服务,每个服务都运行在独立的进程中,并采用轻量级通信协议进行通信。这些服务可以由不同的团队开发、不同的编程语言编写,并且可以按需部署。

微服务系统提供了高内聚、低耦合的特性,使得每个服务都可以独立进行维护和升级,提高了系统的可伸缩性和可靠性。同时,微服务系统还支持使用不同的数据库和存储系统,使得系统可以更灵活地适应不同的业务需求。

总之,微服务系统是一种灵活、可靠、可伸缩的分布式系统架构,适用于现代化应用程序的开发和部署。

微服务系统与单体式系统的区别 ​

ruankao_2026-08-28_233126_616.png

微服务系统实现方式及平台 ​

基于微服务的架构和组织方式来创建微服务系统的实现方式有很多种,以下是常见的几种实现方式。

基于容器化技术

使用容器化技术,如Docker或Kubernetes,将每个微服务打包成独立的容器,每个容器运行一个服务。容器化技术提供了隔离性、可移植性和弹性扩展的能力,使得微服务可以独立部署和管理。

RESTfulAPI

每个微服务通过RESTfulAPI暴露自己的功能,并通过HTTP或HTTPS进行通信。服务之间可以通过API进行数据交互和调用。

消息队列

使用消息队列系统,如Apache Kafka或RabbitMQ,实现微服务之间的异步通信。微服务可以通过发送和接收消息来进行解耦和协作,提高系统的弹性和可伸缩性。

服务注册与发现

使用服务注册与发现的机制,如NetflixEureka或Consul,实现微服务的动态发现和调用。每个微服务在启动时向注册中心注册自己的地址和元数据,其他服务通过查询注册中心来获取服务的位置信息。

服务网关

使用服务网关,如NetflixZuul或NGINX,作为微服务系统的入口和流量路由器。服务网关可以提供负载均衡、安全认证、请求转发和缓存等功能,简化客户端和服务之间的通信。

分布式数据库

微服务系统中的每个服务可以有自己的数据库,但在某些情况下,可能需要共享数据或进行数据一致性管理。使用分布式数据库,如Apache Cassandra或MongoDB,可以实现数据的分布式存储和管理。

微服务系统特征 ​

随着互联网技术的快速发展,新兴的系统和软件大多采用微服务架构成为首选。这主要也与微服务系统的特征有关,微服务系统具有以下特征,每个特征都在一定程度上定义了微服务系统的本质和核心思想。

服务自治性 ​

微服务系统中的每个服务都是自治的,即每个服务都有自己独立的代码库、数据库和团队。这种自治性使得每个服务能够独立开发、部署和运行,而不受其他服务的影响。

例如,在一个电子商务的微服务系统,其中包括订单服务、支付服务和库存服务。每个服务都是独立开发和部署的,订单服务可以独立处理订单相关的逻辑,支付服务可以独立处理支付相关的逻辑,库存服务可以独立处理库存相关的逻辑。

服务单一职责 ​

微服务系统中的每个服务应该专注于解决一个特定的业务问题,具有明确的职责范围。这种单一职责的原则有助于保持服务的内聚性和可维护性。

例如,在一个社交媒体的微服务系统中,可以有用户服务、消息服务和推送服务。用户服务负责用户注册、登录和个人资料管理,消息服务负责发送和接收消息,推送服务负责发送推送通知。

服务松耦合 ​

微服务系统中服务之间应该是松耦合的,即应尽量减少彼此之间的依赖关系。这种松耦合性使得服务能够独立演化和变更,而不会对整个系统造成波及。

例如,在一个电子商务的微服务系统中,订单服务和库存服务之间可以通过异步消息进行通信,订单服务不需要直接依赖库存服务的实现细节,从而实现松耦合。

分布式部署 ​

微服务系统中的服务可以独立部署在不同的服务器或容器中,甚至可以跨多个数据中心进行部署。这种分布式部署使得系统能够更好地应对高并发和大规模的需求。

例如,在一个在线游戏的微服务系统中,可以将用户认证服务部署在一个数据中心,游戏匹配服务部署在另一个数据中心,以提供更好的性能和容错性。

技术异构性 ​

微服务系统中的每个服务可以使用不同的技术栈和工具,选择适合自身需求的最佳技术。这种技术异构性使得团队可以灵活选择和使用最适合的技术,以满足各个服务的特定需求和技术要求。

例如,在一个电商的微服务系统中,可以使用Java编写用户服务,使用Python编写推荐服务,使用Go编写支付服务。每个服务可以选择最适合自己的编程语言和框架,以满足其性能、开发效率或特定领域的需求。

弹性和可伸缩性 ​

微服务系统具有弹性和可伸缩性,可以根据负载的变化自动调整和扩展服务的实例。这种弹性和可伸缩性使得系统能够应对高峰时段和大规模流量的需求。

例如,在一个电影订票的微服务系统中,可以根据实时的票务需求自动增加或减少座位服务的实例数量,以满足用户的订票请求。

独立演化和部署 ​

微服务系统中的每个服务都可以独立演化和部署,无须影响其他服务。这种独立演化和部署的能力使得系统能够更快速地推出新功能、修复错误和进行更新。

例如,在一个新闻发布的微服务系统中,可以独立更新新闻推荐服务的算法,而无须停止其他服务的运行。

微服务系统架构 ​

微服务系统架构原则 ​

下面将介绍微服务架构设计的主要原则。

单一职责原则 ​

每个微服务应该只关注一个业务领域,只提供一个明确的功能。这有助于避免微服务之间的耦合。每个微服务应该专注于自己的功能,不应该尝试去做太多事情。如果一个微服务过于复杂,它可能会成为系统中的瓶颈,导致系统性能下降。

单一职责原则有助于确保每个微服务都能够轻松地进行部署、测试和维护,并且可以在需要时进行快速扩展。如果一个微服务负责多个业务领域,那么它将需要处理更多的请求和数据,这会增加代码的复杂度,导致服务不可靠。

例如,一个电商网站可能包括多个微服务,如订单、库存、支付、客户等。每个微服务应该只关注一个业务领域,以确保它们不会相互干扰。订单服务只需要负责订单相关的功能,库存服务只需要负责库存相关的功能,支付服务只需要负责支付相关的功能,客户服务只需要负责客户相关的功能。

这样每个微服务都可以专注于自己的职责,而不会干扰其他微服务的运行。

隔离性原则 ​

微服务应该被设计为独立的进程,具有自己的数据库和其他资源。这可以确保一个服务的故障不会影响其他服务的正常运行。隔离性原则有助于确保每个微服务都能够独立运行,并且可以在需要时快速进行部署和替换。

隔离性原则可以通过使用容器技术来实现。每个微服务可以被封装在一个容器中,容器可以提供隔离的环境,确保每个微服务都可以独立运行,并且不会干扰其他微服务。例如,使用Docker等容器技术可以为每个微服务提供一个独立的虚拟机环境,并且能够在需要时快速创建或销毁这些容器。

隔离性原则还有助于确保微服务可以快速适应不断变化的业务需求。如果每个微服务都是独立的,那么在需要增加或修改功能时,只需要修改相应的微服务,而不需要影响其他微服务。

自治性原则 ​

每个微服务应该是自治的,具有自己的生命周期、状态和行为。自治性原则有助于确保每个微服务都能够自主地进行管理和维护,而不需要依赖其他微服务或中央管理。

自治性原则可以通过将微服务分解为更小的、独立的组件来实现。每个组件都具有自己的生命周期和状态,并且可以独立管理。

例如,一个微服务可以包括多个组件,每个组件都有自己的状态和行为,并且可以通过消息传递等机制进行通信。

如果每个微服务都是自治的,那么在需要修改或增加功能时,只需要修改相应的微服务,而不需要影响其他微服务。这可以帮助团队更快地响应业务需求,并减少开发和部署的复杂度。

弹性原则 ​

微服务应该是弹性的,可以快速适应不断变化的负载和需求。弹性原则有助于确保系统具有高可用性和高可靠性,并且可以快速恢复故障。弹性原则可以通过使用自动化的扩展和缩放机制来实现。

例如,使用自动化工具可以根据当前负载和需求来动态地增加或减少微服务实例的数量。这可以确保系统在高峰期仍然可以提供稳定的性能,并且在负载下降时能够节省资源和成本。

弹性原则还可以通过实现容错和故障恢复机制来实现。例如,使用负载均衡和故障转移机制可以确保一个微服务出现故障时,其他微服务可以继续提供服务。这可以提高系统的可用性,并减少系统停机时间。

可观察性原则 ​

微服务应该是可观察的,可以收集和分析有关其状态和行为的数据。可观察性原则有助于确保系统的健康状况和性能可以得到实时监控和调整,以满足业务需求。可观察性原则可以通过使用日志、指标和跟踪机制来实现。

例如,使用日志记录微服务的活动和错误信息可以帮助开发人员了解系统的运行情况,并快速解决问题。使用跟踪机制可以帮助开发人员了解请求的完整路径,以便更好地理解系统的行为和性能。

可观察性原则有助于确保团队可以快速检测和解决问题,并优化系统的性能和健康状况。这可以提高系统的可靠性和稳定性,并减少停机时间和修复时间。

可测试性原则 ​

微服务应该是可测试的,可以进行自动化测试和集成测试。可测试性原则有助于确保每个微服务的功能和性能可以得到充分测试和验证,以确保系统的稳定性和可靠性。可测试性原则可以通过使用自动化测试工具和技术来实现。

例如,使用单元测试和集成测试可以确保每个微服务的功能和性能得到充分测试和验证。使用持续集成和持续部署可以确保每次修改都能自动化地进行测试和部署。

可维护性原则 ​

微服务应该是可维护的,可以进行快速维护和修改。可维护性原则有助于确保每个微服务可以快速适应不断变化的业务需求,并且可以快速进行修复和修改。

可维护性原则可以通过使用标准化的API和文档来实现。例如,使用RESTful API和OpenAPI可以确保每个微服务都具有一致的接口和文档,并且可以快速理解和修改。使用规范化的命名和版本控制可以确保每个微服务的代码和配置都具有一致的结构和规范。

可维护性原则可以提高系统的可靠性和稳定性,并减少停机时间和修复时间。此外,可维护性原则还可以帮助团队提高代码的可读性和可维护性,从而提高开发人员的生产力和效率。

安全性原则 ​

微服务应该是安全的,可以提供足够的保护和安全措施,以确保数据和系统的安全性。安全性原则有助于确保每个微服务可以安全地处理和存储敏感信息,并且可以保护系统免受潜在的安全威胁。

安全性原则可以通过使用加密、认证和授权技术来实现。例如,使用TLS/SSL协议可以确保数据在传输过程中得到加密保护。使用OAuth2和OpenIDConnect 可以确保用户身份得到认证和授权,并且可以对不同级别的用户提供不同的权限和访问控制。

安全性原则有助于确保团队可以保护系统和数据免受潜在的安全威胁,并确保系统的稳定性和可靠性。这可以提高系统的可信度和用户的信任度,从而增加系统的价值和竞争力。

智能端点与简单消息传递原则 ​

在微服务系统中,服务之间的通信是不可避免的。传统的单体应用中,通常使用共享库或其他技术来实现代码的重用,但在微服务系统中,由于服务之间的隔离性和自治性,共享代码库变得不可行。因此,服务之间的通信成为了微服务系统中最重要的一环。

智能端点指的是服务端点应该尽可能智能和独立,不依赖于其他服务或中心化的组件,而简单消息传递指的是服务之间的通信应该是简单的消息传递,避免复杂的请求-响应交互。

通过使用智能端点和简单消息传递原则,可以实现服务之间的松耦合,并提高系统的可伸缩性和容错性。同时,使用智能端点可以避免服务之间的依赖关系,增加系统的灵活性和可移植性。使用简单消息传递可以减少服务之间的复杂性,简化服务的交互,从而提高系统的可维护性和可测试性。

例如,一个电子商务网站有一个订单服务和一个库存服务,订单服务需要查询库存服务来确认某件商品是否有足够的库存量。使用智能端点和简单消息传递原则,订单服务可以发送一个简单的查询请求给库存服务,然后等待库存服务的响应。库存服务可以独立处理请求,并返回一个简单的响应,指示是否有足够的库存量。这种简单的请求-响应模式可以降低服务之间的复杂性,并使系统更容易维护和扩展。

微服务系统架构模式 ​

微服务系统架构模式是一种针对分布式系统中的微服务架构设计的模式,它描述了如何将不同的微服务组合在一起来实现复杂的业务功能。

聚合器微服务架构模式 ​

聚合器可以理解为一个中心化的服务,它的主要功能是接收来自客户端的请求,按照业务逻辑将请求分发给后端的多个服务或数据源,最终将这些数据进行处理、聚合和转换,以生成需要的数据格式,并将其返回给客户端。

聚合器可以是一个简单的Web页面,只将从多个微服务中检索到的数据进行展示,也可以由一个更高层级的微服务扮演聚合器的角色。

聚合器微服务模式的示意图如图20-1所示。 ruankao_2026-08-29_000536_189.png

代理微服务架构模式 ​

代理微服务和聚合器微服务的区别在于,代理微服务中,代理仅委派请求,或者进行数据的转换工作,并不会从后端服务中聚合数据,但会根据业务需求的差别调用不同的微服务。

代理微服务模式的示意图如图20-2所示。 ruankao_2026-08-29_000715_751.png

链式微服务架构模式 ​

链式微服务将多个微服务连接在一起,形成一条微服务链。每个微服务负责完成特定的功能,同时将处理结果传递给下一个微服务,以实现复杂的业务逻辑。

链式微服务的示意图如20-3所示。 ruankao_2026-08-29_000837_313.png

分支微服务架构模式 ​

分支微服务是链式微服务的扩展。在分支微服务中,多个微服务将被组织在一起,形成不同的分支结构,每个分支代表一种可能的业务场景或决策路径,并通过链式调用相应请求。

这种模式使得应用程序可以根据不同的条件和事件来采取不同的行动,从而实现更灵活和个性化的业务逻辑。

分支微服务的示意图如图20-4所示。 ruankao_2026-08-29_000942_683.png

数据共享微服务架构模式 ​

数据共享微服务提供了一种在不同微服务之间共享数据的方法。通过共享数据,不同的微服务可以更加高效地协同工作,实现更强大的业务逻辑和功能。

数据共享微服务的示意图如20-5所示。 ruankao_2026-08-29_001055_877.png

异步消息微服务架构模式 ​

异步消息微服务是一种基于消息传递的微服务架构,其设计的目的是解决分布式系统中的异步通信需求。

在传统的同步通信模式中,当服务A向服务B发送请求时,服务A必须等待服务B的响应才能继续执行。这种模式的缺点是,如果服务B出现了故障或者响应时间过长,那么服务A就会一直处于等待状态,从而导致整个系统的性能下降。

相比之下,异步消息通信模式允许服务A向服务B发送消息,而不需要等待服务B的响应。当服务B处理完消息后,可以向服务A发送响应,也可以将响应发送给另一个服务,或者将响应写入数据库中,等等。

这种模式的好处是,由于请求发送后服务A不需要等待响应,因此可以立即继续执行其他任务,从而提高整个系统的性能和吞吐量。

异步消息微服务的示意图如20-6所示。 ruankao_2026-08-29_001220_966.png

微服务系统开发 ​

容器化和自动化部署 ​

容器化和自动化部署是微服务系统开发中非常重要的技术和工具,可以提高开发、测试、部署等方面的效率和可靠性。

常用的容器化技术有Docker和Kubernetes ​

常用的自动化部署技术有Ansible和Jenkins ​

服务注册和发现 ​

微服务架构中,服务的注册与发现是非常关键的一环。在一个分布式的系统中,服务的数量可能会很多,服务之间的依赖关系也可能很复杂,如果没有一个好的服务注册与发现机制,就会导致服务之间的相互调用变得非常麻烦,同时也不利于系统的扩展和维护。

服务注册与发现的基本原理是:服务提供者将自己的服务注册到注册中心,服务消费者从注册中心中获取服务的相关信息,然后通过该信息来调用服务提供者。这样就实现了服务提供者和服务消费者之间的解耦,同时也可以保证服务的高可用性和扩展性。

下面介绍常用的微服务服务注册和服务发现技术。

Consul ​

ZooKeeper ​

Eureka ​

Etcd ​

Eted 最初由 CoreOS 公司开发,是 CNCF(Cloud Native Computing Foundation,云原生计算基金会)的一个孵化项目,现在已经成为Kubernetes集群的默认数据存储和服务发现组件。

Eted是一个分布式的、高可用的键值存储系统,它主要用于分布式系统中的元数据管理和配置共享。在Eted中,数据是以键值对(key-value)的形式存储的,它支持基本的CRUD(增删改查)操作,同时还提供了一些高级的功能,如事务操作、监听机制等。

服务通信 ​

微服务通信技术是微服务系统中至关重要的一部分,它涉及微服务之间的通信方式、协议、数据格式等方面。

HTTP/REST ​

HTTP是一种用于在网络上进行数据通信的协议,常用于客户端和服务器之间的通信。REST是一种基于HTTP协议的软件架构风格,用于构建分布式系统。

在微服务架构中,HTTP/REST是一种常用的通信技术。

gRPC ​

gRPC是一个高性能、开源的远程过程调用(Remote Procedure Call,RPC)框架,最初由Google开发。

gRPC框架支持多种编程语言和平台,提供强类型、IDL驱动、基于消息的通信模型,以及多种编解码器,使得gRPC在微服务架构中广泛应用。

Thrift ​

ApacheThrif是一种可伸缩、跨语言的远程过程调用(RPC)框架,它允许不同语言编写的客户端和服务器进行无缝交互。

Thrift最初由Facebook开发并开源,现在是Apache软件基金会的顶级项目之一。

Kafka ​

Kafka是一种高吞吐量的分布式消息队列系统,最初由LinkedIn开发,现在由Apache维护。它被设计用于处理大量的数据流,可以在多个客户端之间进行可靠的数据传输。

Kafka使用发布订阅模型,消息发布者(producer)将消息发送到特定的主题(topic)中,而消息订阅者(consumer)则从主题中读取消息。

安全与权限管理 ​

微服务系统中的安全与权限问题是不可避免的,因此需要采取一些技术来确保系统的安全性和可靠性。下面是一些常用的微服务安全与权限技术。

OAuth2 ​

OAuth2是一种常用的授权协议,被广泛应用于互联网、移动应用等各种场景中。

它定义了一种授权机制,允许第三方应用通过代表用户向授权服务器申请访问资源的权限,而不需要直接获取用户的用户名和密码。这种机制提高了安全性和用户隐私保护,并使得多个应用之间可以方便地共享用户的资源。

OAuth2 协议还包括访问令牌的类型和范围的定义,如授权码、刷新令牌、访问令牌、令牌类型、过期时间等。这些机制使得OAuth2成为一种强大而灵活的授权协议,广泛应用于互联网、移动应用、API管理等各种场景中。

JWT ​

JWT(JSON WebToken)是一种基于JSON格式的轻量级的认证和授权机制。它可以在不同系统之间安全地传递信息并验证身份。

JWT在认证和授权方面具有广泛的应用,尤其是在微服务系统中常常被用作API鉴权和保护。

在微服务系统中,JWT通常被用于API鉴权和保护,可以作为一种轻量级的认证和授权机制。JWT可以在不同的服务之间传递用户信息,避免了Session等机制带来的复杂性。同时,由于JWT的无状态特性,使得它更适合微服务架构的无状态特点。

TLS/SSL ​

TLS 和 SSL 是一组用于保护网络通信的协议,TLS是SSL的升级版。它们通过加密通信内容和验证通信双方身份来保护网络通信的安全性。

API网关 ​

API网关是一个在微服务架构中非常重要的组件,它作为所有请求的入口,可以对请求进行验证、转发、路由、限流、负载均衡、缓存、监控等多种操作。API网关作为整个系统的入口,所有外部请求都会经过它。

API网关的主要作用是将请求转发到后端的微服务,同时对请求进行校验、鉴权、限流、缓存等操作,以保证系统的安全性和可靠性。

API网关通过配置路由表,将请求路由到不同的微服务上,并将请求进行转换和转发。同时,API网关还可以提供一些通用的功能,如缓存、负载均衡、服务发现和监控等。

运维监控 ​

微服务系统的运维与监控是保证系统稳定性和高可用性的重要方面,因此需要使用一些工具和技术来管理、监控和调试系统。

Prometheus ​

Prometheus是一款开源的监控和告警工具,最初由SoundCloud公司开发。它采用基于pull的方式,从被监控的应用中获取指标数据,并通过一系列规则进行聚合、存储和展示。

Grafana ​

Grafana是一款开源的数据可视化和监控平台,它支持多种数据源,通过数据查询和可视化的方式,帮助用户更好地理解数据和监控系统。

Grafana提供了丰富的面板和图表类型,支持用户自定义的查询语言,并提供了报警功能。用户可以通过配置数据源和仪表板,来监控和可视化各种指标,如CPU和内存使用率、网络流量、磁盘空间、应用程序性能等。

ELK Stack ​

ELKStack是一个开源的日志管理解决方案,它由三个独立的开源工具组成:Elasticsearch、Logstash和Kibana。这三个工具都由Elastic 公司维护和支持。

  • Elasticsearch是一个分布式的全文搜索和分析引擎,它可以存储和搜索大量的数据,并提供复杂的分析和搜索功能。
  • Logstash是一个用于收集、过滤、转换和输出日志数据的工具。它可以从不同的数据源中收集日志数据,并进行一系列的处理和转换,最终输出到目标存储或分析系统。
  • Kibana是一个用于可视化和分析数据的工具。它提供了直观的图形界面,用户可以通过它来查看、搜索、分析和分享数据,也可以创建自定义的可视化图表和仪表板。

Zipkin ​

Zipkin是一个分布式的应用程序追踪系统,可以帮助开发人员监测和解决复杂微服务应用中的问题。

Zipkin可以跟踪请求的路径,并显示请求在不同微服务之间的传递时间。它可以提供关于应用性能和行为的详细信息,包括请求的响应时间、错误率和吞吐量等。

微服务系统测试 ​

微服务系统测试是针对微服务架构的应用程序进行测试的过程,通过微服务系统测试能够提供重要的质量保证。

由于微服务系统的复杂性和分布式特性,需要针对微服务系统的特点设计针对性的、详尽的测试计划,并切实地使用合适的工具完成测试,以保证最大限度发挥测试的效能。

根据测试内容的不同,将微服务系统测试分为微服务系统测试特点、过程、功能测试、性能测试以及安全性测试几部分内容进行介绍。