试题: 论微服务架构及其应用

近年来, 随着互联网行业的迅猛发展, 公司或组织业务的不断扩张, 需求的快速变化以 及用户量的不断增加,传统的单块(Monolithic)软件架构面临着越来越多的挑战, 已逐渐无 法适应互联网时代对软件的要求 。在这一背景下, 微服务架构模式(Microservice Architecture Pattern)逐渐流行,它强调将单一业务功能开发成微服务的形式,每个微服务运行在一个进程 中; 采用 HTTP 等通用协议和轻量级 API 实现微服务之间的协作与通信。这些微服务可以使 用不同的开发语言以及不同数据存储技术, 能够通过自动化部署工具独立发布, 并保持最低 限制的集中式管理。

请围绕“论微服务架构及其应用 ”论题, 依次从以下三个方面进行论述。

1.概要叙述你参与管理和开发的、采用微服务架构的软件开发项目及在其中所担任 的主要工作。

2. 与单块架构相比较, 微服务架构有哪些特点?请列举至少 4 个特点并进行说明。

3.结合你参与管理和开发的软件开发项目,描述该软件的架构,说明该架构是如何 采用微服务架构模式的, 并说明在采用微服务架构后, 在软件开发过程中遇到的实际问题和 解决方案。

论证券云盘系统的微服务架构应用

摘要:

2022年4月,我作为系统架构师,参与了公司证券云盘系统建设项目。该项目旨在为中小券商提供符合金融监管要求的高性能且易用的云盘存储服务。本文聚焦云盘系统开发,阐述微服务架构的实践路径:我们将系统拆分成多个独立的微服务,每个服务实现独立业务功能。使用API网关管理客户端对微服务的访问,采用 RESTful API 进行服务间的通信,实现服务的解耦和灵活集成。同时,利用 Eureka 进行服务注册与发现,确保各服务的可靠感知与管理。部署方面,我们使用 Docker 容器化技术,结合持续集成与持续部署(CI/CD)方法,确保服务能够高效、快速地进行部署和迭代。最终该项目在2023年12月正式上线并对外提供服务,系统运行稳定,表现优异,得到了客户和公司领导的一致好评。

正文:

随着证券行业数字化转型加速,券商大量交易流水、客户资料等数据需要云存储管理,但中小券商自建云存储成本高,证券行业云存储需求大。2022年4月,公司启动证券云盘系统建设项目,总投资2000万元,建设周期12个月,我担任系统架构师,负责系统整体架构设计和中间件选型工作。

项目初期,我们全面评估了系统的性能、安全性和可用性,同时鉴于后期修改和新增需求较多,对可修改性要求高,因此决定采用微服务架构。借助Spring Cloud微服务框架实现业务解耦,将系统划分为API网关、权限控制、审计日志、文件存储、文件内容处理、智能检索、数据同步等多个微服务,并采用Kubernetes构建服务调度中心。业务支撑方面,权限控制服务融合基于角色控制(RBAC)与访问控制列表(ACL)模型增强系统安全性;通过Prometheus监控容器(节点)资源指标,ELK追踪业务审计日志,实现故障预警与全链路监控。该证券云盘系统既保障了金融数据安全合规,又为券商提供低成本、高性能云存储服务,满足了证券行业在数字化转型中对云存储的迫切需求。

微服务架构是一种将传统的单体应用拆分成多个小型、独立的服务单元,每个服务单元都运行在独立的进程中,并通过轻量级通信机制(如 HTTP/RESTful API)相互通信的架构模式。与传统的单块架构相比,具有以下几个显著特点:

  1. 灵活性(可扩展性)和可维护性:微服务架构将应用拆分成多独立服务。这种解耦设计使得每个服务可以独立开发、部署和升级,提高了系统的灵活性(可扩展性)和可维护性。
  2. 技术多样性:微服务允许使用不同的技术栈和编程语言开发各个服务,这种灵活性有助于提升开发效率和系统性能。
  3. 高弹性与可伸缩性:微服务架构允许服务根据需求独立扩展。例如,在业务高峰期,数据同步服务和数据处理服务可以独立扩展,无需对整个系统进行扩容,提升了资源利用率和系统的响应能力。
  4. 快速交付与迭代:微服务架构支持CI/CD流程,使得新功能可以快速上线,缩短了产品的市场响应时间,这对于快速变化的业务环境尤为重要。
  5. 故障隔离:微服务架构中,每个服务单元都是独立的进程,因此一个服务的故障不会影响到其他服务的正常运行。这种故障隔离的特性使得我们能够快速地定位和解决故障,降低了系统整体的故障率。

下文将结合项目实践从三个方面论述微服务架构对灵活性和可维护性、系统弹性和可伸缩性、产品快速交付和迭代的影响。

一、通过微服务架构提升系统的灵活性(可扩展性)和可维护性。我们采用 Spring Cloud 微服务框架,将系统划分为多个独立的微服务,并采用 RESTful API和消息队列(如 Kafka、RabbitMQ 等)实现服务间的松耦合通信。这种解耦设计使每个服务能够独立进行开发、部署和升级。服务注册与发现也是提升系统灵活性的关键组成部分,我们采用Eureka作为服务注册与发现框架,使得各微服务在启动时能够自动注册其信息,并实时获取其他服务的信息。这种动态感知能力使得我们能够及时了解每个服务的运行状态和健康状况,从而迅速发现和解决潜在问题。通过以上设计与实现,显著提升了系统灵活性和可维护性,使我们能够在不影响其他服务的前提下,灵活地添加、删除或修改某些微服务,以快速响应不断变化的业务需求。同时,将系统功能服务化,降低了功能模块间的耦合度,有效提升了软件模块的可重用性。

二、通过微服务架构提升系统弹性与可伸缩性。证券行业存在显著的时段性业务峰值(如开盘竞价时段数据存储请求激增),传统固定资源分配模式常导致服务响应延迟。为解决这一关键挑战,我们建立了多层弹性保障机制。在IaaS层依托OpenStack实现用户存储资源快速扩容,按需使用;在应用服务层利用Kubernetes实现服务实例秒级扩容。例如,在开盘竞价高峰期,将数据同步服务、文件解析服务1分钟内扩容到20个实例,大幅提升服务负载能力;在数据存储层采用分布式架构,充分利用服务器集群资源,确保高峰时段IO性能稳定。在 2024 年 9 月牛市的严峻考验下,该弹性体系展现出了卓越的应对能力。当时,在集合竞价期间,文件存储及数据同步负载飙升至以往峰值的 5 倍。然而,凭借系统强大的弹性和可伸缩性,系统始终保持稳定运行,未出现任何因负载过高而导致的服务中断或响应延迟问题,充分证明了该弹性体系在极端业务场景下的可靠性和有效性。此外,微服务架构通过天然的故障隔离机制,有利于降低系统的整体故障,提升了系统的可用性和可靠性,系统全年服务可用率高达 99.9%,达到了金融行业的高标准。

三、Docker结合CI/CD实现快速交付与迭代。在微服务架构下,系统被拆分成多个独立的服务,不同开发团队可并行开展工作,极大缩短了开发周期。而且每个微服务能依据自身需求选用最合适的技术栈,充分发挥各类技术优势,提升开发效率。为了简化服务的部署和运维过程,我们采用了Docker容器和 CI/CD方法。Docker是一个开源的应用容器引擎,它允许我们将应用程序及其依赖项打包成一个可移植的容器,并在任何支持Docker的环境中运行。通过采用 Docker 容器,我们实现了服务的快速部署和迭代。 CI/CD是一种软件开发实践,它强调在软件开发过程中不断地进行集成和部署,以确保软件的质量和稳定性。通过采用 CI/CD 方法,我们实现了服务的自动化构建、测试和部署。这使得我们能够在短时间内快速地交付高质量的服务,提高了系统的开发效率和交付速度。

通过上述微服务架构实践,构建了一个灵活、弹性、可快速迭代且安全稳定的证券云盘系统,并通过行业等保三级认证。最终系统2023年12月正式上线对外服务,目前系统成功接入50+家券商,日均处理85万份金融文件,总数据存量4.7PB,展现出强大的业务承载能力。

通过本项目实践,我总结出两项关键经验:在组织建设方面,组建融合开发、运维、安全的FinOps团队,建立敏捷响应机制,打破部门壁垒,实现高效协作;在系统运维方面,可观测性体系建设是保障金融业务连续性的基石,实时监控系统状态,提前化解潜在风险。项目实施过程也遇到一些问题,项目初期因团队云原生技术储备不足遭遇瓶颈,为此,我们引入金融科技公司联合研发、组织全员Kubernetes认证培训。通过这些举措成功破局,顺利推进项目。项目的成功凝聚着团队集体智慧,在此向所有参与者致以诚挚谢意。

更多推荐