题目
近年来,随着互联网行业的迅猛发展,公司或组织业务的不断扩张,需求的快速变化以及用户量的不断增加,传统的单块(Monolithic)软件架构面临着越来越多的挑战,已逐渐无法适应互联网时代对软件的要求。在这一背景下,微服务架构模式(Microservice Architecture Pattern)逐渐流行,它强调将单一业务功能开发成微服务的形式,每个微服务运行在一个进程中;采用HTTP等通用协议和轻量级API实现微服务之间的协作与通信。这些微服务可以使用不同的开发语言以及不同数据存储技术,能够通过自动化部署工具独立发布,并保持最低限制的集中式管理。 请围绕“论微服务架构及其应用”论题,依次从以下三个方面进行论述。
1.概要叙述你参与管理和开发的、采用微服务架构的软件开发项目及在其中所担任的主要工作。
2.与单块架构相比较,微服务架构有哪些特点?请列举至少4个特点并进行说明。
3.结合你参与管理和开发的软件开发项目,描述该软件的架构,说明该架构是如何采用微服务架构模式的,并说明在采用微服务架构后,在软件开发过程中遇到的实际问题和解决方案。
摘要
(时间、人物、内容)2022年1月起,我投身于公司智慧公交平台项目,主要参与了新平台整体框架的选型决策和核心调度模块的设计与研发工作。(项目架构)该项目整体采用微服务架构,业务层基于公交领域模型的深入分析,运用领域驱动设计(DDD)方法构建业务逻辑框架。在非功能性属性实现及二方库、三方库组件集成方面,如单点登录、地图服务和项目依赖库,我们主要依托公司中台层进行组件的定制或复用。物联网交互层则通过公司S17平台实现与各种设备交互信令的封装、解析与传输。(阐述内容)本文主要阐述了智慧公交平台采用微服务架构的特色、优势以及微服务架构下模块化设计的实践。(项目成功)智慧公交平台项目经过一年的打造,项目团队的不懈努力,于2022年12月份在首个城市成功上线。至今,智慧公交平台系统已拓展20多个城市,经过两年多的稳定运行和持续优化,不仅达到了预设目标,还展现了出色的性能和稳定性。
正文
(项目背景)在“互联网+”的时代背景下,城市公共交通作为一个传统行业,由于其业务复杂性,技术进步长期受限,行业整体技术水平相对较低。为应对公交行业在技术层面遇到的挑战,同时满足公众对高品质交通服务的期望,我们全新打造的公交智慧平台项目应运而生。智慧公交平台融合了物联网、大数据分析和云计算等先进信息技术,致力于对传统公交系统进行智能化升级。在政策引导和技术创新的合力作用下,公交智慧平台旨在通过实时调度、智能排班、小程序平台拓展等功能,推动公共交通系统向现代化、高效化和人性化方向发展,从而助力城市的可持续发展。
(项目模块架构)智慧公交平台采用微服务模块化架构,系统由五大核心模块构成,核心包括基础数据模块、调度模块、计划排班模块、设备交互Tap模块、报表模块。同时为适应公交智能化需求,我们还开发了主动安全模块、对外开放平台模块、客流模块等以全面覆盖公交业务的多场景业务处理。各模块采用渐进式迭代开发模式,并融入主流的敏捷开发理念。我们以小组为单位,以用户需求为核心,基于公司中台战略,实施RAD 快速开发方法开发每个微服务组件,确保了系统设计开发阶段的灵活性和高效性。
(微服务特性)(独立性)基于微服务架构的独立性特性,我们采用了组建小型团队的迭代敏捷开发方式。每个团队有一定的技术自主权,基于团队成员的技术视野和偏好。这种灵活性允许团队采用不同的编程语言和开发方法来构建各自负责的模块。通过同步协作和分别开发的方式,我们显著提高了整体项目的开发进度。
(故障隔离)微服务架构采用模块化设计,使得每个服务独立部署,这种设计在一定程度上实现了故障隔离。当一个服务出现问题时,它不会影响其他服务的正常运行,从而增强了系统的整体可靠性。此外,微服务架构还可以集成容错服务组件,如Spring Cloud中的Hystrix,通过服务降级或熔断等机制,进一步加强了故障隔离的特性,确保系统在面对异常情况时仍能保持稳定。
(技术栈多样)微服务的独立性意味着各个服务可以根据其功能需求灵活选择最合适的技术栈。由于不同的技术有其特定的适用场景,例如Java通常用于构建大型互联网软件框架,而Python则更适合于机器学习和人工智能(AI/CG)等场景,我们可以根据每个服务的具体功能和需求,选择最合适的技术来实现。这样的选择有助于提高服务效率,并确保整体服务的开发和整合工作能够高效且精准地完成。
(自动化、集中管理)尽管微服务架构确保了每个服务都是独立的,但为了简化管理和提高效率,我们仍需要实施自动化和集中化的管理策略。通过采用自动化部署等技术,我们可以显著降低微服务架构的复杂性。采用容器化技术如Docker,它是一种强大的工具,可以实现微服务的统一管理。此外,我们也可以编写程序部署脚本,以简化微服务程序的部署过程。
目前,市场上有很多先进的微服务管理工具包括DevOps管理平台、CI/CD自动化部署工具,如Kubernetes、Jenkins等,它们可以协同工作,帮助我们实现微服务架构的自动化集中管理。为了确保整个流程的顺畅和可重复性,我们还需要整理详细的文档,记录所有相关步骤和配置。通过这样的综合管理方案,我们能够更加高效地管理微服务架构,确保其稳定运行和持续发展。
(如何采用微服务架构模式的?)智慧公交平台采用Java的Spring Cloud Alibaba微服务架构,以Dubbo作为微服务间的通信协议组件,实现了高效的服务调用。我们使用Nacos作为服务注册中心和配置中心,通过其订阅与发布机制,实现了服务的动态上下线和参数的动态配置,大幅提升了项目的灵活性和可维护性。
在微服务的外部接口访问方面,我们成功对接了公司中台提供的GetWay网关,确保所有微服务通过统一端口进行访问,保障了服务的一致性和安全性。网关的流量控制、请求监控等功能,进一步增强了系统的稳定性和安全性,降低了网络风险。
在项目部署方面,我们初期编写了部署脚本,实现了服务的快速升级。随后,我们整合了公司的CI/CD自动化部署平台,将部署流程标准化,提高了部署效率。虽然目前部署平台仍在适配阶段,但我们已采用混合部署策略以满足当前需求。我们的项目部署方案包括两种服务模式:一是基于公交平台IT基础设施的本地化部署;二是基于我们提供的私有云服务,实现SaaS化服务。在实际运行过程中,虽然遇到了一些挑战,但我们不断优化和改进,确保了平台的稳定运行。
(实际问题1)在XX城市上线后,我们遇到了一个特殊挑战:该城市客户端使用的Windows系统版本较旧,且浏览器版本无法升级。这导致调度人员在使用我们的系统时,反馈操作响应缓慢。经过详细排查,我们发现问题的根源在于我们采用的微服务加React的前后端分离架构。特别是调度模拟图页面,由于其刷新频率较高,需要频繁接收后端WebSocket消息,这导致了用户接口请求常常处于等待状态。为解决这一问题,我们采取了以下优化措施:
- 减少接口调用频率:我们对页面调用后端接口的次数进行了优化,避免不必要的请求,减少服务器压力。
- 调整WebSocket请求速率:通过降低WebSocket消息的接收频率,我们减少了客户端的处理负担。
- 前端渲染逻辑优化:前端开发团队对页面渲染逻辑进行了重构,提高了渲染效率。
- 请求优先级管理:引入了fetch请求,并根据请求类型设置了优先级,确保用户操作请求(如点击、输入等)作为最高优先级处理,而WebSocket请求则作为较低优先级处理。
经过这些优化调整,我们的系统现在能够兼容Windows老版本系统和浏览器,操作流畅性得到了显著提升,从而为用户提供了满意的体验。
(实际问题2)在XX城市上线后,我们接到了调度人员关于系统操作缓慢的反馈。经过排查,我们发现该城市接口调用时间远远超过了正常水平的十倍以上。为了解决这个问题,我们启动了对后端服务的深入排查。
首先我们通过跟踪特定接口的traceId进行链路追踪,我们分析了该接口的整个请求流程。调查结果显示,虽然每个微服务模块的接口调用和响应时间都在正常范围内,但问题出现在微服务请求接口前的Web Filter过滤器阶段。特别是鉴权过滤器,它需要向中台服务发起请求以获取用户鉴权和权限信息,这一过程占据了大量时间,是导致接口响应缓慢的根本原因。
进一步分析发现,中台服务与应用微服务分别部署在不同的服务器上,而我们测试了两台服务器之间的ping值,发现了显著的延迟。因此,我们通知了XX城市的网络管理人员协助进行网络排查。同时我们发现中台服务器中的某个服务占用cpu 异常,查看日志发现该服务处于崩溃,频繁报错。在解决了中台服务的报错问题并重启服务器以释放资源后,接口请求时间过长的问题得到了解决,两台服务器之间的ping值也恢复了正常。
(总结)微服务架构作为当前互联网开发领域的主流选择之一,凭借其模块化、故障隔离、技术灵活性和集中化管理等优势,赢得了开发者的广泛青睐。微服务架构通过细粒度的服务单元,实现了功能的快速迭代和灵活扩展,同时有效降低了项目的技术风险,这也是项目管理者倾向于采用微服务架构的重要原因。然而,在享受微服务带来的便利的同时,我们必须采用恰当的策略来应对微服务架构可能存在的弱点,确保项目微服务架构的稳定性和可靠性。