第二十章|微服务系统分析与设计(上)

微服务系统是一类基于微服务架构风格的分布式系统,它将应用程序拆分成多个独立的小 型服务,每个服务都运行在独立的进程中,并采用轻量级通信协议进行通信。这些服务可以由 不同的团队开发、不同的编程语言编写,并且可以按需部署。微服务系统提供了高内聚、低耦 合的特性,使得每个服务都可以独立进行维护和升级,提高了系统的可伸缩性和可靠性。同时, 微服务系统还支持使用不同的数据库和存储系统,使得系统可以更灵活地适应不同的业务需求。 总之,微服务系统是一种灵活、可靠、可伸缩的分布式系统架构,适用于现代化应用程序的开 发和部署。本章主要从大数据处理系统的架构、开发框架、开发过程、系统测试等方面对微服务系统 的分析和设计进行全面介绍。20.1 微服务系统概述20.1.1 微服务系统简介微服务是一种开发软件的架构和组织方法,它将大型应用程序拆分为一系列小型、自治的 服务,每个服务都有自己的独立部署、运行和维护,并通过轻量级通信机制相互协作,从而形 成一个整体的系统。随着国内外软件开发技术和软件架构的飞速发展以及高可用性通信网络的更新换代,大多 数IT 应用程序都在向着分布式发展。分布式软件系统的发展在过去十年中迅速增长,随后出现 的SOA(Service-Oriented Architecture, 面向服务的架构)成为客户端-服务器体系结构最成功 的表示形式之一,它提供可重用的服务。虽然SOA 致力于解决传统单体架构中系统庞大导致的 开发效率、扩展性问题,但是由于它仍然依赖于单片系统,抽取的粒度较大,系统间耦合性依 然较高,并不能很好地满足业务期望。微服务架构在2011年左右逐渐兴起,打破了传统软件架构开发的模式,其借鉴了一些分布 式系统和领域驱动设计的理念,注重将系统按业务领域进行划分,从而实现松耦合、可扩展和 可维护的架构。微服务系统拥有众多优势,越来越多的大型应用采用微服务架构开发。以下是采用微服务 系统的一些常见优势。1)独立性和自治性微服务系统将大型应用拆分为多个小型服务,每个服务都是独立的,可以对其中的每个组 件服务进行开发、部署、运营和扩展,而不影响其他服务的功能。这种独立性和自治性使得团 队可以独立开发、测试和部署各个服务,提高开发速度和灵活性。第20章 微服务系统分析与设计 685 2)弹性和可伸缩性微服务系统可以根据需求进行水平扩展,只需增加特定服务的实例数量,而不需要整体扩 展。这种弹性和可伸缩性使得系统能够更好地应对负载的变化,提供更好的性能和用户体验。3)技术多样性微服务系统中的每个服务都可以使用不同的技术栈和编程语言进行开发,选择最适合特定 服务需求的工具和技术。这种技术多样性使得团队可以更灵活地选择和应用新技术,提高开发 效率和创新能力。4) 专用性微服务系统中的每项服务都是针对一组功能设计的,并专注于解决特定的问题。如果开发 人员逐渐将更多代码增加到一项服务中使得这项服务变得复杂,那么可以将其拆分成多项更小 的服务。这使得系统中的每个服务都能提供专用的能力,提供更好的性能。5)可组合性和可扩展性微服务系统的每个服务都可以独立开发和部署,可以通过组合不同的服务来构建不同的应用场 景和功能。这种可组合性和可扩展性使得系统更易于扩展和演化,能够快速响应业务需求的变化。6)容错性和可恢复性微服务系统中的每个服务都是自治的,即使某个服务发生故障,整个系统仍然可以继续运 行。通过适当的设计和实施容错机制,可以提高系统的可靠性和可恢复性,减少单点故障的影响。1. 微服务系统与单体式系统在微服务架构被提出之前,传统的Web开发方式为单体式开发。单体式系统表示一个应用 程序内包含了所有需要的业务功能,并且使用像主从式架构( Client/Server) 或是多层次架构(N-tier) 实现,虽然它也能以分布式应用程序来实现,但是在单体式系统内,每个业务功能都 是不可分割的。通过单体式架构,单体式系统中的所有进程紧密耦合,并可作为单项服务运行,这样的优 点是开发简单、基本不会重复开发并且没有分布式管理和调用的消耗。但这也意味着,如果应 用程序的一个进程遇到需求峰值,则必须扩展整个架构。随着代码库的增长,添加或改进单体 式应用程序的功能变得更加复杂。这种复杂性限制了试验的可行性,并使实施新技术和试验变 得困难。单体式架构增加了应用程序可用性的风险,因为许多依赖且紧密耦合的进程会扩大单 个进程故障的影响。因此,使用微服务架构可以解决单体式系统的部分问题,表20-1总结了单 体式系统与微服务系统之间的区别。表20-1 单体式系统与微服务系统区别表维 度单体式系统微服务系统 架构粒度一个整体的应用程序,所有功能和模块 都集中在一起多个小而自治的服务,每个服务负责特 定的业务功能部署和扩展粒度整体部署和扩展每个服务独立部署和扩展技术异构性不支持支持686 系统分析师教程(第2版)(续表)维 度单体式系统微服务系统数据管理共享一个数据库每个服务有自己的数据库 团队组织和协作 适合一个开发团队共同开发和维护适合多团队协作,每个团队独立负责一 个或多个服务可靠性和容错性不支持支持开发难度简单复杂微服务系统与单体式系统各有优缺点,在实际应用中应根据应用场景的不同进行权衡选择。2. 微服务系统实现方式及平台微服务可以用不同的编程语言实现,也可以使用不同的基础设施。因此,最重要的技术 选择是微服务之间的通信方式(同步、异步、UI 集成)以及用于通信的协议( RESTful API、 HTTP/HTTPS、消息队列、GraphQL等)。基于微服务的架构和组织方式来创建微服务系统的实 现方式有很多种,以下是常见的几种实现方式。1)基于容器化技术使用容器化技术,如Docker 或Kubernetes, 将每个微服务打包成独立的容器,每个容器运 行一个服务。容器化技术提供了隔离性、可移植性和弹性扩展的能力,使得微服务可以独立部 署和管理。2)RESTful API每个微服务通过RESTful API暴露自己的功能,并通过HTTP 或HTTPS 进行通信。服务之 间可以通过API 进行数据交互和调用。3)消息队列使用消息队列系统,如Apache Kafka 或RabbitMQ, 实现微服务之间的异步通信。微服务 可以通过发送和接收消息来进行解耦和协作,提高系统的弹性和可伸缩性。4)服务注册与发现使用服务注册与发现的机制,如Netflix Eureka或 Consul, 实现微服务的动态发现和调用。 每个微服务在启动时向注册中心注册自己的地址和元数据,其他服务通过查询注册中心来获取 服务的位置信息。5)服务网关使用服务网关,如Netflix Zuul或NGINX, 作为微服务系统的入口和流量路由器。服务网 关可以提供负载均衡、安全认证、请求转发和缓存等功能,简化客户端和服务之间的通信。6)分布式数据库微服务系统中的每个服务可以有自己的数据库,但在某些情况下,可能需要共享数据或进 行数据一致性管理。使用分布式数据库,如 Apache Cassandra或 MongoDB, 可以实现数据的分 布式存储和管理。第20章 微服务系统分析与设计 687 需要注意的是,微服务系统的实现方式可以根据具体需求和技术栈的选择而有所不同。不 同的组织和团队可能会选择不同的技术和工具来实现微服务系统,因此在实施时需要根据具 体情况进行评估和选择。目前,一些平台和框架可以帮助微服务系统的实现,主流的两个分 别是Spring Cloud生态中的微服务框架Netflix OSS和Kubernetes 生态系统。表20-2显示了 Kubernetes生态系统与Spring Cloud生态中的微服务功能的比较。表20-2 单体式系统与微服务系统区别表微服务功能Spring Cloud&Netflix OSSKubernetes配置管理Spring Config Server、Netflix ArchaiusKubernetes ConfigMaps服务发现Spring Cloud EurekaKubernetes Services和Ingress负载平衡Spring Cloud RibbonKubernetes Service API网关 Spring Cloud ZuulKubernetes Service和Ingress resources、Istio、 Ambassador提供API网关功能的解决方案 安全问题Spring Cloud Security通过Spring Cloud Zuul解决安全问题 Istio能够通过API网关机制提供安全性 集中化日志记录ELK技术栈(Elasticsearch、LogStash、 Kibana) EFK技术栈(Elasticsearch、Fluentd、Kibana)集中的度量Spring Spectator和AtlasHeapster、Prometheus和Grafana分布式跟踪Spring Cloud SleuthHawkular、Jaeger弹性和容错性Spring Hystrix、Turbine、RibbonHealth check、service meshes自动伸缩和自我修复无健康检查、自我修复和自动缩放 打包、部署和调度Spring Boot、Apache Maven。Spring Cloud系统没有真正的调度程序Docker、Rkt、Kubernetes Scheduler和 Deployment、Helm作业管理Spring BatchKubernetes Jobs和Scheduled Jobs单例应用程序Spring Cloud ClusterKubernetes Pods20.1.2 微服务系统特征随着互联网技术的快速发展,新兴的系统和软件大多为分布式大型系统,为了满足大型系 统的需要,采用微服务架构的微服务系统成为首选。这主要也与微服务系统的特征有关,微服 务系统具有以下特征,每个特征都在一定程度上定义了微服务系统的本质和核心思想。1. 服务自治性微服务系统中的每个服务都是自治的,即每个服务都有自己独立的代码库、数据库和团队。 这种自治性使得每个服务能够独立开发、部署和运行,而不受其他服务的影响。例如,在一个 电子商务的微服务系统,其中包括订单服务、支付服务和库存服务。每个服务都是独立开发和 部署的,订单服务可以独立处理订单相关的逻辑,支付服务可以独立处理支付相关的逻辑,库 存服务可以独立处理库存相关的逻辑。 688 系统分析师教程(第2版)2. 服务单一职责微服务系统中的每个服务应该专注于解决一个特定的业务问题,具有明确的职责范围。这 种单一职责的原则有助于保持服务的内聚性和可维护性。例如,在一个社交媒体的微服务系统 中,可以有用户服务、消息服务和推送服务。用户服务负责用户注册、登录和个人资料管理, 消息服务负责发送和接收消息,推送服务负责发送推送通知。3. 服务松耦合微服务系统中服务之间应该是松耦合的,即应尽量减少彼此之间的依赖关系。这种松耦合 性使得服务能够独立演化和变更,而不会对整个系统造成波及。例如,在一个电子商务的微服 务系统中,订单服务和库存服务之间可以通过异步消息进行通信,订单服务不需要直接依赖库 存服务的实现细节,从而实现松耦合。4. 分布式部署微服务系统中的服务可以独立部署在不同的服务器或容器中,甚至可以跨多个数据中心进 行部署。这种分布式部署使得系统能够更好地应对高并发和大规模的需求。例如,在一个在线 游戏的微服务系统中,可以将用户认证服务部署在一个数据中心,游戏匹配服务部署在另一个 数据中心,以提供更好的性能和容错性。5. 技术异构性微服务系统中的每个服务可以使用不同的技术栈和工具,选择适合自身需求的最佳技术。 这种技术异构性使得团队可以灵活选择和使用最适合的技术,以满足各个服务的特定需求和技 术要求。例如,在一个电商的微服务系统中,可以使用Java 编写用户服务,使用Python 编写推 荐服务,使用Go 编写支付服务。每个服务可以选择最适合自己的编程语言和框架,以满足其 性能、开发效率或特定领域的需求。6. 弹性和可伸缩性微服务系统具有弹性和可伸缩性,可以根据负载的变化自动调整和扩展服务的实例。这种 弹性和可伸缩性使得系统能够应对高峰时段和大规模流量的需求。例如,在一个电影订票的微 服务系统中,可以根据实时的票务需求自动增加或减少座位服务的实例数量,以满足用户的订 票请求。7. 独立演化和部署微服务系统中的每个服务都可以独立演化和部署,无须影响其他服务。这种独立演化和部 署的能力使得系统能够更快速地推出新功能、修复错误和进行更新。例如,在一个新闻发布的 微服务系统中,可以独立更新新闻推荐服务的算法,而无须停止其他服务的运行。这些特征共同定义了微服务系统的本质和核心思想,它们使得微服务系统具备高度的灵活 性、可扩展性、可维护性和可靠性,适应了快速变化和复杂的业务需求。然而,也需要注意在 设计和实施微服务系统时,充分考虑每个特征的权衡和挑战,以确保系统能够最大程度地发挥 优势并避免潜在的问题。第20章 微服务系统分析与设计20.2 微服务系统架构20.2.1 微服务系统架构原则微服务架构设计是一种新兴的软件架构设计,已经在很多公司和组织中得到广泛应用。它 通过将一个大型系统分解成小型、自治、独立的服务来降低系统的复杂度,提高开发效率和部 署效率。微服务的优势在于它们能够扩展和维护,保持可靠性和高可用性,并且可以快速适应 不断变化的业务需求。在微服务架构设计中,有一些重要的原则需要遵循,以确保系统的可靠性、可维护性、可 伸缩性和高可用性。这些原则可以帮助团队设计出一个高效、稳定和安全的微服务系统,并确 保系统能够快速适应不断变化的业务需求。当设计微服务系统时,应该始终思考如何实现这些 原则,并在实践中不断优化和改进。这可以帮助团队更好地理解系统的需求和行为,并更好地 满足业务需求。下面将介绍微服务架构设计的主要原则。1. 单一职责原则每个微服务应该只关注一个业务领域,只提供一个明确的功能。这有助于避免微服务之间 的耦合。每个微服务应该专注于自己的功能,不应该尝试去做太多事情。如果一个微服务过于 复杂,它可能会成为系统中的瓶颈,导致系统性能下降。单一职责原则有助于确保每个微服务都能够轻松地进行部署、测试和维护,并且可以在需 要时进行快速扩展。如果一个微服务负责多个业务领域,那么它将需要处理更多的请求和数据, 这会增加代码的复杂度,导致服务不可靠。例如,一个电商网站可能包括多个微服务,如订单、库存、支付、客户等。每个微服务 应该只关注一个业务领域,以确保它们不会相互干扰。订单服务只需要负责订单相关的功能, 库存服务只需要负责库存相关的功能,支付服务只需要负责支付相关的功能,客户服务只需 要负责客户相关的功能。这样每个微服务都可以专注于自己的职责,而不会干扰其他微服务 的运行。2. 隔离性原则微服务应该被设计为独立的进程,具有自己的数据库和其他资源。这可以确保一个服务的 故障不会影响其他服务的正常运行。隔离性原则有助于确保每个微服务都能够独立运行,并且 可以在需要时快速进行部署和替换。隔离性原则可以通过使用容器技术来实现。每个微服务可以被封装在一个容器中,容器可 以提供隔离的环境,确保每个微服务都可以独立运行,并且不会干扰其他微服务。例如,使用 Docker等容器技术可以为每个微服务提供一个独立的虚拟机环境,并且能够在需要时快速创建 或销毁这些容器。隔离性原则还有助于确保微服务可以快速适应不断变化的业务需求。如果每个微服务都是 独立的,那么在需要增加或修改功能时,只需要修改相应的微服务,而不需要影响其他微服务。这可以帮助团队更快地响应业务需求,并减少开发和部署的复杂度。3. 自治性原则每个微服务应该是自治的,具有自己的生命周期、状态和行为。自治性原则有助于确保每 个微服务都能够自主地进行管理和维护,而不需要依赖其他微服务或中央管理。自治性原则可 以通过将微服务分解为更小的、独立的组件来实现。每个组件都具有自己的生命周期和状态, 并且可以独立管理。例如,一个微服务可以包括多个组件,每个组件都有自己的状态和行为, 并且可以通过消息传递等机制进行通信。自治性原则有助于确保微服务可以快速适应不断变化的业务需求,并且可以在需要时快速 进行部署和替换。如果每个微服务都是自治的,那么在需要修改或增加功能时,只需要修改相 应的微服务,而不需要影响其他微服务。这可以帮助团队更快地响应业务需求,并减少开发和 部署的复杂度。4. 弹性原则微服务应该是弹性的,可以快速适应不断变化的负载和需求。弹性原则有助于确保系统具 有高可用性和高可靠性,并且可以快速恢复故障。弹性原则可以通过使用自动化的扩展和缩放机制来实现。例如,使用自动化工具可以根据 当前负载和需求来动态地增加或减少微服务实例的数量。这可以确保系统在高峰期仍然可以提 供稳定的性能,并且在负载下降时能够节省资源和成本。弹性原则还可以通过实现容错和故障恢复机制来实现。例如,使用负载均衡和故障转移机 制可以确保一个微服务出现故障时,其他微服务可以继续提供服务。这可以提高系统的可用性, 并减少系统停机时间。5. 可观察性原则微服务应该是可观察的,可以收集和分析有关其状态和行为的数据。可观察性原则有助于 确保系统的健康状况和性能可以得到实时监控和调整,以满足业务需求。可观察性原则可以通过使用日志、指标和跟踪机制来实现。例如,使用日志记录微服务的 活动和错误信息可以帮助开发人员了解系统的运行情况,并快速解决问题。使用指标收集系统 的性能数据可以帮助团队了解系统的健康状况,并根据需要进行优化。使用跟踪机制可以帮助 开发人员了解请求的完整路径,以便更好地理解系统的行为和性能。可观察性原则有助于确保团队可以快速检测和解决问题,并优化系统的性能和健康状况。 这可以提高系统的可靠性和稳定性,并减少停机时间和修复时间。6.可测试性原则微服务应该是可测试的,可以进行自动化测试和集成测试。可测试性原则有助于确保每个 微服务的功能和性能可以得到充分测试和验证,以确保系统的稳定性和可靠性。可测试性原则可以通过使用自动化测试工具和技术来实现。例如,使用单元测试和集成测 试可以确保每个微服务的功能和性能得到充分测试和验证。使用持续集成和持续部署可以确保 每次修改都能自动化地进行测试和部署。第20章 微服务系统分析与设计 691 可测试性原则有助于确保系统的稳定性和可靠性,并减少开发和部署的复杂度。这可以帮 助团队更快地响应业务需求,并提高开发人员的生产率和质量。7. 可维护性原则微服务应该是可维护的,可以进行快速维护和修改。可维护性原则有助于确保每个微服务 可以快速适应不断变化的业务需求,并且可以快速进行修复和修改。可维护性原则可以通过使用标准化的API 和文档来实现。例如,使用RESTful API和 OpenAPI 可以确保每个微服务都具有一致的接口和文档,并且可以快速理解和修改。使用规范 化的命名和版本控制可以确保每个微服务的代码和配置都具有一致的结构和规范。可维护性原则有助于确保团队可以快速响应业务需求,并快速进行修复和修改。这可以提 高系统的可靠性和稳定性,并减少停机时间和修复时间。此外,可维护性原则还可以帮助团队 提高代码的可读性和可维护性,从而提高开发人员的生产力和效率。8.安全性原则微服务应该是安全的,可以提供足够的保护和安全措施,以确保数据和系统的安全性。安 全性原则有助于确保每个微服务可以安全地处理和存储敏感信息,并且可以保护系统免受潜在 的安全威胁。安全性原则可以通过使用加密、认证和授权技术来实现。例如,使用TLS/SSL 协议可以确 保数据在传输过程中得到加密保护。使用OAuth2 和 OpenID Connect可以确保用户身份得到认 证和授权,并且可以对不同级别的用户提供不同的权限和访问控制。安全性原则有助于确保团队可以保护系统和数据免受潜在的安全威胁,并确保系统的稳定 性和可靠性。这可以提高系统的可信度和用户的信任度,从而增加系统的价值和竞争力。9. 智能端点与简单消息传递原则在微服务系统中,服务之间的通信是不可避免的。传统的单体应用中,通常使用共享库或 其他技术来实现代码的重用,但在微服务系统中,由于服务之间的隔离性和自治性,共享代码 库变得不可行。因此,服务之间的通信成为了微服务系统中最重要的一环。智能端点与简单消息传递是微服务系统设计中的重要原则,用于处理服务之间的通信。智 能端点指的是服务端点应该尽可能智能和独立,不依赖于其他服务或中心化的组件,而简单消 息传递指的是服务之间的通信应该是简单的消息传递,避免复杂的请求-响应交互。通过使用智能端点和简单消息传递原则,可以实现服务之间的松耦合,并提高系统的可伸 缩性和容错性。同时,使用智能端点可以避免服务之间的依赖关系,增加系统的灵活性和可移 植性。使用简单消息传递可以减少服务之间的复杂性,简化服务的交互,从而提高系统的可维 护性和可测试性。例如,一个电子商务网站有一个订单服务和一个库存服务,订单服务需要查询库存服务来 确认某件商品是否有足够的库存量。使用智能端点和简单消息传递原则,订单服务可以发送一 个简单的查询请求给库存服务,然后等待库存服务的响应。库存服务可以独立处理请求,并返 回一个简单的响应,指示是否有足够的库存量。这种简单的请求-响应模式可以降低服务之间 692 系统分析师教程(第2版)的复杂性,并使系统更容易维护和扩展。20.2.2 微服务系统架构模式微服务系统架构模式是一种针对分布式系统中的微服务架构设计的模式,它描述了如何将 不同的微服务组合在一起来实现复杂的业务功能。在微服务架构中,每个微服务都是独立的、 自治的,可以独立开发、部署和运行。使用不同模式开发的好处是可以根据实际业务场景进行 系统设计,实现高度的可伸缩性和灵活性,从而满足不同的业务需求。以下将介绍聚合器微服务( Aggregator Microservice)、代理微服务( Proxy Microservice)、 链式微服务( Chained Microservice)、分支微服务( Branch Microservice)、数据共享微服务 (Shared Data Microservice) 和异步消息微服务( Asynchronous Messaging Microservice)6种模式。1. 聚合器微服务随着微服务架构的流行,系统中的服务数量越来越多,服务之间的通信和数据处理变得越 来越复杂。在这种情况下,聚合器微服务成为了一个重要的设计模式。它的主要目标是从多个 服务或数据源中收集、处理和聚合信息,并将其转换为需要的数据格式。这种模式可以协调多个 服务之间的通信和数据处理流程,提高系统的可扩展性和可维护性。聚合器微服务中的关键角色是聚合器 ( Aggregator) 。 聚合器可以是一个简单的Web 页面, 只将从多个微服务中检索到的数据进行展示,也可以由一个更高层级的微服务扮演聚合器的角 色。聚合器可以理解为一个中心化的服务,它的主要功能是接收来自客户端的请求,按照业务 逻辑将请求分发给后端的多个服务或数据源,最终将这些数据进行处理、聚合和转换,以生成 需要的数据格式,并将其返回给客户端。聚合器微服务模式的示意图如图20-1所示。图20-1 聚合器微服务模式示意图从图20-1可以看出,聚合器微服务模式的关键在于聚合器的设计,它将作为用户与系统中 其他微服务交互的桥梁。在设计聚合器时,通常需要具备以下几个功能:(1)消息转发。聚合器作为消息处理的中心,负责接收请求并将其转发给后端服务,同时 返回的数据也将由聚合器进行统一传递。第20章 微服务系统分析与设计 693 (2)数据聚合。在聚合器中,需要能够根据业务需求对来自多个服务或数据源返回的数据 进行聚合和转换,以生成需要的数据格式。(3)数据缓存。为了提高性能,聚合器通常会使用缓存技术缓存聚合后的数据,以减少后 续重复请求的响应时间,避免对于多个服务的高频调用。在聚合器微服务模式下,聚合器成为了服务调用的中心,这样设计可以带来以下几个 优点:(1)减少网络延迟。通过将多个微服务的调用聚合在一起,可以减少网络传输和延迟时间。 这意味着客户端可以更快地获得结果,提高系统的响应速度和用户体验。(2)减少微服务之间的依赖。在传统的微服务架构中,一个服务可能需要调用多个其他服 务才能完成一个请求,这增加了服务之间的依赖关系和复杂性。聚合器微服务可以减少这种依 赖性,使每个服务更加独立和可复用。(3)提高系统可靠性。聚合器微服务可以通过负载均衡和容错机制来提高系统的可靠性和稳定性,保证系统在高负载和异常情况下的正常运行。(4)提高开发效率。聚合器微服务的设计可以使服务之间的通信和数据处理更加统一和直 观,从而减少开发人员的开发工作量,提高开发效率和代码质量。2. 代理微服务代理微服务是一种微服务架构的设计模式,它提供了一种将客户端请求转发到后端服务的 中间层,同时还可以实现一些常见的服务治理功能,如负载均衡、故障熔断、限流等。代理微 服务可以有效地解耦客户端和后端服务之间的依赖关系,提高系统的可伸缩性和可维护性。代理微服务通常由两部分组成:代理网关和后端服务。代理网关是客户端和后端服务之间 的中间层,负责接收和转发客户端请求,并在请求到达后端服务之前进行一些服务治理的操作。 后端服务是实际处理请求的服务,它们可以是单独的微服务、容器、虚拟机或物理机器。代理 微服务和聚合器微服务的区别在于,代理微服务中,代理仅委派请求,或者进行数据的转换工 作,并不会从后端服务中聚合数据,但会根据业务需求的差别调用不同的微服务。代理微服务模式的示意图如图20-2所示。图20-2 代理微服务模式示意图694 系统分析师教程(第2版)代理微服务通常采用HTTP 或TCP 协议进行通信,其中HTTP 协议更加常见。代理网关可 以支持多种HTTP 协议,如HTTP/1.1、HTTP/2和 WebSocket等。客户端通过向代理网关发送 HTTP 请求来访问后端服务,代理网关则将请求转发到对应的后端服务。代理网关通常支持多 种负载均衡算法,如轮询、随机、加权轮询等,以提高系统的可伸缩性和可用性。代理微服务的另一个重要功能是服务治理。服务治理是一种管理分布式系统中各个微服务 的方法,它包括负载均衡、故障熔断、限流、服务发现等功能。代理网关通常可以通过配置文 件或API 接口来实现服务治理的功能。例如,可以通过配置文件设置各个后端服务的权重,实 现负载均衡;也可以通过API 接口监控后端服务的健康状态,实现故障熔断;还可以通过限流 算法限制客户端请求的速率,防止系统被过度请求而崩溃。3. 链式微服务链式微服务将多个微服务连接在一起,形成一条微服务链。每个微服务负责完成特定的功 能,同时将处理结果传递给下一个微服务,以实现复杂的业务逻辑。链式微服务模式可以使系 统具有高可扩展性和灵活性,并促进了代码重用和模块化。在链式微服务模式中,每个微服务都是一个独立的服务单元,它们可以通过API 调用相互 通信。每个微服务都处理特定的任务,然后将结果传递给下一个微服务。每个微服务都可以有 自己的独立数据存储,但是也可以共享数据存储。在链式微服务中,收到请求后会在微服务中产生调用链,使后续服务进行下一步处理并等 待返回结果。在后续的服务请求回传结果前,客户端会一直阻塞等待链式调用完成。链式微服务的示意图如20-3所示。图20-3 链式微服务模式示意图链式微服务可以实现多种不同的应用程序场景。例如,它可以用于实现工作流程,将不同 的微服务连接在一起,以处理工作流程中的各个阶段。它还可以用于实现电子商务网站, 其 中 订单处理、库存管理和支付处理等任务可以由不同的微服务完成。链式微服务还可以用于实现 大型数据分析应用程序,其中数据处理和分析任务可以由多个微服务完成,这些微服务可以按 需进行动态扩展。4. 分支微服务分支微服务是链式微服务的扩展。在分支微服务中,多个微服务将被组织在一起,形成不 同的分支结构,每个分支代表一种可能的业务场景或决策路径,并通过链式调用相应请求。这 种模式使得应用程序可以根据不同的条件和事件来采取不同的行动,从而实现更灵活和个性化 的业务逻辑。在分支微服务模式中,每个分支都是一个独立的微服务单元,它们根据输入数据和条件来 确定应该采取的下一步行动。每个分支可以选择执行一个或多个微服务,或者跳转到另一个分 支,以响应不同的业务场景或决策路径。分支微服务可以是串联的,也可以是并行的,具体取 决于应用程序的设计和需求。分支微服务的示意图如20-4所示。图20-4 分支微服务模式示意图分支微服务可以用于实现多种不同的应用程序场景。例如,在电子商务网站中,可以使用 分支微服务来处理订单流程,根据不同的付款方式或送货地址选择不同的流程。在金融服务应 用程序中,可以使用分支微服务来决定是否批准贷款或投资申请,根据不同的信用评分和风险 评估。在物流和运输应用程序中,可以使用分支微服务来确定最佳路线和交通方式,以根据不 同的货物和目的地确定最佳的路线选择。5. 数据共享微服务数据共享微服务提供了一种在不同微服务之间共享数据的方法。通过共享数据,不同的微 服务可以更加高效地协同工作,实现更强大的业务逻辑和功能。在传统的单体应用程序中,数据通常是在应用程序内部共享的,因为应用程序内部的所有 组件都可以访问相同的数据。但是,在微服务架构中,每个微服务都是独立的,并且有自己的 数据库和数据模型,因此实现数据共享变得更加复杂。数据共享微服务模式解决了这个问题,通 过将数据访问和管理集中在一个或多个微服务中,来实现在不同微服务之间共享数据的目的。数据共享微服务的示意图如20-5所示。图20-5 数据共享微服务模式示意图数据共享微服务可以使用多种技术和方法来实现。其中一种方法是使用共享数据库,即 将数据存储在单独的数据库中,并让多个微服务共享该数据库,如图20-5中的Service C和 Service D。这种方法可能会导致并发问题和数据一致性问题,因此需要采取一些措施来确保数 据的安全性和正确性,如使用事务和锁定机制。另一种方法是使用数据代理服务,即在微服务 之间添加一个代理层,用于管理和协调数据的共享。这个代理层可以是一个专门的数据代理微 服务,也可以是一个数据共享框架,如Apache Kafka或Apache Flink等。这种方法可以更好地 控制数据的共享和访问,同时也可以提供更好的性能和可扩展性。数据共享微服务可以用于实现多种不同的应用程序场景。例如,在电子商务网站中,可以 使用数据共享微服务来共享产品信息和库存数据,以便多个微服务可以共享相同的数据源,并 保持数据的一致性。在金融服务应用程序中,可以使用数据共享微服务来共享客户和账户信息, 以便多个微服务可以共享相同的客户数据,并实现更复杂的业务逻辑。6. 异步消息微服务异步消息微服务是一种基于消息传递的微服务架构,其设计的目的是解决分布式系统中的 异步通信需求。在传统的同步通信模式中,当服务A 向服务B 发送请求时,服务A 必须等待服 务B 的响应才能继续执行。这种模式的缺点是,如果服务B 出现了故障或者响应时间过长,那 么服务A 就会一直处于等待状态,从而导致整个系统的性能下降。相比之下,异步消息通信模式允许服务A 向服务B 发送消息,而不需要等待服务B 的 响 应。当服务B 处理完消息后,可以向服务A 发送响应,也可以将响应发送给另一个服务,或者 将响应写入数据库中,等等。这种模式的好处是,由于请求发送后服务A 不需要等待响应,因 此可以立即继续执行其他任务,从而提高整个系统的性能和吞吐量。异步消息微服务的示意图如20-6所示。第20章 微服务系统分析与设计 697图20-6 异步消息微服务模式示意图在异步消息微服务架构中,每个微服务都可以充当消息的生产者和消费者。当一个微服务 需要处理某些任务时,它可以将消息发送到消息队列中,然后另一个微服务从队列中获取消息 并处理。这种模式的好处是,可以将不同的任务分配给不同的微服务处理,从而提高系统的可 伸缩性和灵活性。为了实现异步消息通信模式,异步消息微服务通常使用消息队列作为消息传递的中介。消 息队列是一种支持异步通信模式的消息传递机制,它允许发送者将消息发送到队列中,而不需 要等待接收者的响应。接收者可以随时从队列中获取消息并进行处理。消息队列还具有许多高 级功能,如消息持久化、消息过期、消息重试、消息路由等,这些功能都可以更好地管理和处 理消息。异步消息微服务架构的另一个核心概念是事件驱动架构 (Event-Driven Architecture,EDA)。 在事件驱动架构中,系统中的各个组件都可以充当事件的生产者和消费者,它们之间通过消息 队列进行通信。当一个事件发生时,它会被发送到消息队列中,然后订阅了该事件的组件会从 队列中获取事件并进行处理。这种架构可以实现高度松耦合的系统设计,从而提高系统的可维 护性和扩展性。总的来说,异步消息微服务是一种基于消息传递和事件驱动的微服务架构,它可以实现 高性能、可伸缩和可靠的分布式系统。通过使用消息队列作为消息传递的中介,异步消息微 服务架构可以实现异步通信模式,从而提高系统的性能和吞吐量。同时,事件驱动架构可以实 现高度松耦合的系统设计,从而提高系统的可维护性和扩展性。异步消息微服务已经被广泛 应用于各种场景,如电子商务、金融、物联网等领域,它是构建现代分布式系统的重要技术 之一。

相关推荐
小洁忘了怎么分身3 小时前
多样本空间转录组 Harmony 整合与标签转移指南
网络·r语言·生信分析
发光小北4 小时前
PLC 私有协议采集网关如何应用?
网络协议
三言老师5 小时前
CentOS8 Firewalld 高级规则中级实操教程
linux·运维·服务器·网络·centos
rcms152702692186 小时前
TEL 3308-000065-13 印刷电路板
网络
xywww1687 小时前
Claude Opus 5 企业使用怎么选:场景分层、成本测算和接入风险清单
网络
望安认证7 小时前
CRA 与 CE、RED、EUCC、NIS2、GDPR、AI Act、Data Act、DORA 等欧盟法规的关系:从法案结构看数字产品出海合规
网络·欧盟·cra·网络弹性法案·cra认证
Hrain-AI8 小时前
2026企业AI Agent本地化落地:6平台横评+搭建步骤+成本模板
服务器·网络·人工智能
便利店10248 小时前
企业远程办公如何打通内网?网络层隧道与封装直觉
运维·服务器·网络·vpn·隧道
00后程序员张9 小时前
抓包鹰 电脑本机网络连接表怎么看?哪些程序在联网 进程归属与可疑 IP 追溯
网络协议·计算机网络·网络安全·ios·adb·https·udp
砚凝霜9 小时前
软考网络工程师|第 6 章 网络安全基础、攻击、等保完整备考笔记
网络·笔记·web安全