系统架构论文日常练习合集
相关阅读:系统架构设计师 复习指南-论文
1 范文
推荐博文:
1.1 论软件架构风格
Overall
【摘要】
我就职于杭州市一家互联网公司Hyperplasma,2024年1月,公司决定开发一套全新的业务绩效评估平台系统,我在此次系统开发项目中担任架构师,全面负责系统的架构设计工作。该平台旨在满足公司内部绩效管理的同时,为业务拓展及用户激励提供支持,是公司提升运营效率、推动业务增长的关键项目。本文以业务绩效评估平台系统与公司其他系统的集成为例,先对几种常用的软件架构风格及其特点展开介绍,接着结合项目实践,阐述项目在软件架构选择过程中采用数据流风格、调用返回风格、独立构件风格、虚拟机风格以及仓库风格组合的原因,最后总结在使用多种架构组合时遇到的问题及解决办法。通过合理选择和组合架构风格,项目开发取得成功。目前,系统已稳定运行1年多,获得公司管理层、员工的广泛认可。
【正文】
我所在的公司位于杭州市,在互联网行业深耕多年,业务范围覆盖多个领域。随着互联网行业竞争的日益激烈,公司为提升市场竞争力,决定优化内部管理体系,推动业务创新发展。在此背景下,公司提出建设全新的业务绩效评估平台,对现有的绩效管理体系进行全面升级,并融入互联网思维,搭建一个多维度、多渠道的绩效评估平台,以满足不同业务场景和用户群体的需求。
在进行架构风格选择前,我们对常见的5种架构风格进行了分析:
(一)数据流风格:包括批处理序列架构风格和管道/过滤器架构风格。
- 批处理序列架构风格:该风格的组件由一系列按固定顺序排列的计算单元组成,组件之间仅通过数据传递进行交互。每个处理步骤都是一个独立的程序,前一步骤完成后,后一步骤才能开始。数据需完整,以整体方式进行传递。
- 管道/过滤器架构风格:每个构件都有一组输入和输出,构件读取输入数据流,经过内部处理后,生成输出数据流。不过,这种风格不太适用于实时交互式设计,且由于缺乏统一的通信标准,数据传输效率可能较低。
(二)调用/返回风格:包括层次结构架构风格、主程序/子程序架构风格和面向对象架构风格。
- 主程序/子程序架构风格:采用单线程控制,将问题分解为若干处理步骤,构件包括主程序和子程序。子程序通常可整合为模块,过程调用作为交互机制,即连接件。调用关系具有层次性,子程序的正确性依赖于其调用的子程序的正确性。
- 面向对象架构风格:将数据的表示方法及其对应的操作方法封装在对象中。对象之间通过函数和过程调用进行交互,这种风格的构件为对象,连接件为函数和过程调用。该结构风格具有封装、交互、多态、继承和重用等特性。
- 层次架构风格:层次系统组织成层次结构,构件在某些层实现虚拟机。连接件通过定义层间交互协议确定,拓扑约束包括对相邻构件交互的约束。其特点是每层为上层提供服务,使用下层服务,仅能看到相邻层。大问题被分解为若干渐进的小问题,逐步解决,隐藏了许多复杂性。修改一层,最多影响两层,通常仅影响上层。上层需知晓下层身份,不能随意调整层次顺序。
(三)独立构件风格:包括进程通信架构风格和事件驱动架构风格。
- 进程通信架构风格:构件为独立的过程,连接件为消息传递。这种风格的构件通常为命名过程,消息传递方式有点到点、异步和同步方式以及远程过程调用等。
- 事件驱动架构风格:构件不直接调用过程,而是触发或广播一个或多个事件。系统中其他构件的过程在一个或多个事件中注册,当事件被触发时,系统自动调用在该事件中注册的所有过程。其主要优点是为软件重用提供强大支持,便于构件的维护和演化;缺点是构件放弃了对系统计算的控制。
(四)虚拟机风格:包括解释器架构风格和基于规则的系统架构风格。
- 解释器架构风格:一个解释器通常由完成解释工作的解释引擎、存储被解释代码的存储区、记录解释引擎当前工作状态的数据结构以及记录源代码解释执行进度的数据结构组成。具有解释器风格的软件含有虚拟机,可仿真硬件执行过程和一些关键应用,但执行效率较低。
- 基于规则的系统:由规则集、规则解释器、规则/数据选择器及工作内存组成。
(五)仓库风格:包括数据库架构风格和黑板架构风格。
- 数据库架构风格:这是最常见的形式,构件主要有两类,一是中央共享数据源,用于保存当前系统的数据状态;二是多个独立处理元素,对数据元素进行操作。
- 黑板架构风格:黑板架构由知识源、黑板和控制三部分组成。知识源包含若干独立计算的不同单元,提供解决问题的知识,知识源响应黑板上的变化,且仅修改黑板。黑板是全局数据库,包含解域的全部状态,是知识源相互作用的唯一媒介。黑板通常应用于没有确定性算法的系统,如信号处理、问题规划及编译器优化等软件系统的设计。
经研究,本次项目决定采用Spring Boot技术开发B/S架构的系统。业务绩效评估平台需要数据仓库提供相关业务指标数据,并采用微服务架构与公司多个业务系统进行集成。在架构风格选择上,最终我们采用了管道/过滤器架构、分层架构、进程通信架构、基于规则的系统架构和数据库系统几种架构风格的组合。下面阐述选择这几种架构风格的原因。
- 管道/过滤器架构风格和进程通信架构风格选择原因:业务绩效评估涉及的业务数据和用户数据需从数据仓库获取。我们使用Apache Sqoop工具,每天在业务低谷期从仓库批量抽取数据,通过一系列数据转换任务进行逻辑处理,每个转换任务都有输入流和输出流,多个转换任务协同完成每日的数据处理工作。业务绩效评估平台需与公司的用户管理系统、业务运营系统、数据分析平台等进行交互,涉及异构系统间的通信。业务模块通过远程调用其他服务和点到点异步消息通讯来实现数据交互。
- 分层架构风格和数据库系统风格选择原因:本次采用的Spring Boot框架具备分层架构的特性。我们采用表现层、业务逻辑层、数据持久层分离的架构开发B/S系统,每层仅为上层提供服务,属于典型的分层架构。数据持久层保存的数据和抽取的数据均存储在MySQL数据库中,业务逻辑层涉及数据操作时,通过MyBatis框架与中央数据库进行交互,实现对数据库的增、删、改、查操作。
- 基于规则的系统架构风格选择原因:业务绩效评估涉及的评估规则变化频繁,每次规则变化都需及时响应。绩效计算通常需将业务类型、用户行为、业务指标、奖励系数等通过规则不断组合、变换后进行解释计算。为满足复杂绩效计算的需求,使用传统硬编码方式显然不可行。因此,我们采用EasyRules规则引擎框架,通过规则引擎实现复杂的绩效计算。
在使用多种架构风格组合开发系统的过程中,我们也遇到了一些问题,并采取了相应的解决办法。使用EasyRules规则引擎时,由于计算数据量庞大,导致计算全公司绩效结果耗时较长,影响业务效率。经过测试分析,我们采用集群部署和并行计算技术,将绩效计算时间缩短至1小时以内。此外,EasyRules规则引擎的表达式通过配置文件编写,业务人员难以进行规则表达式的维护,限制了规则引擎的使用。针对这一问题,我们开发了一个可视化规则配置工具,方便业务人员进行规则配置和管理。
通过本次项目实践,我们认识到,现代信息系统结构复杂,需要集成的系统众多,多种架构风格融合是必然趋势。随着技术的不断发展,新型架构风格不断涌现,合理选择架构风格对系统开发和复用至关重要。经过7个月的开发,业务绩效评估平台顺利上线并稳定运行1年多,充分发挥了绩效激励、业务引导的作用,目前已在公司全面推广使用,得到了公司管理层和员工的一致好评。
1.2 论微服务架构
【摘要】
2024年1月,我任职于杭州市一家互联网公司Hyperplasma,被委以系统架构师的重任,参与公司电商业务系统的架构升级项目,主导架构设计工作。公司电商系统自推出限时秒杀活动后,订单量急剧攀升,月末订单量突破10万笔。公司计划开展更多营销活动以进一步提升业绩,并拓展业务范畴,但现有架构难以应对这一需求,因此启动了本次项目。
本文围绕该项目,阐述微服务架构在实际项目中的应用。首先梳理微服务架构的理念、优势及面临的挑战;接着分析项目中电商系统的现状,以及影响系统可靠性的风险因素,并简述应对可靠性问题的策略;随后重点探讨如何借助微服务架构实现架构升级的目标;最后制定本次架构升级的技术方案。经评审与实施,系统稳定运行一年多,成功达成设计目标,赢得公司及客户的高度赞誉。
【正文】
微服务属于面向服务架构的一种类型。在微服务架构体系下,服务粒度精细,每个服务聚焦于特定业务功能。该架构主张将系统拆解为一系列细粒度的服务,通过服务的编排组合来满足业务需求。服务之间采用轻量级通信协议进行交互,使得基于微服务架构的系统具备松耦合、组件化、高扩展、高弹性,以及易于修改和替换的特性,进而提升系统交付的速度与质量。
微服务架构具有诸多优势。其一,它为新技术的应用提供了良好的试验环境。每个服务相互独立,可以依据自身业务需求选择适配的技术,例如在处理用户社交关系时,图数据库更为适用,而处理结构化商品数据时,关系数据库则更为合适。其二,微服务系统对外提供丰富的服务接口,系统的可组合性强,在业务发生变化时,能够便捷地通过组合不同服务来响应变化。其三,微服务具备出色的可替代性、弹性和扩展性。单个服务可以独立进行替换,每个服务都能内置各自的降级限流策略,也可以根据实际需求独立扩展性能,便于灵活调整系统的整体处理能力。
尽管微服务架构优势显著,但也面临不少挑战。一方面,大多数业务需求需通过服务编排组合来实现,服务间的通信开销可能对系统性能产生影响,同时数据的一致性和可靠性也可能受到威胁。另一方面,运维成本较高。相较于单体应用,微服务数量众多,每个微服务都需要独立部署,这无疑增加了运维监控的难度和运行成本。此外,实现自动化部署、管理服务间依赖关系,以及开展服务依赖测试,都是在实施微服务架构时需要妥善解决的问题。
在落地微服务架构时,有多种技术框架可供选择。Tars 框架由腾讯开源,是一款高性能、一站式的服务开发框架,提供服务治理、配置管理、日志统计等丰富功能,能全方位支持微服务系统的开发。另外,Spring Cloud Alibaba同样是热门选择,它依托阿里巴巴在分布式领域的实践经验,整合了Nacos注册中心、Sentinel流量控制组件、Dubbo RPC框架等组件,为微服务开发提供全面的解决方案。
2017年10月,我作为系统架构师,参与公司电商业务系统的架构升级工作,负责制定架构升级方案,并组织实施。本次架构升级旨在提升系统的性能扩展能力和可靠性,为公司开展各类电商营销活动提供有力支撑。公司电商系统当前承载商品售卖、限时秒杀、满减优惠等业务,其中限时秒杀业务占据业务量的较大比例,月末秒杀活动期间,日订单量超过10万笔。公司计划开展更多创新营销活动,如红包雨、阶梯满减、限时抢购等,经评估,现有系统架构难以应对这些活动带来的流量冲击。
当前电商系统基于Spring Boot搭建,主要包含订单处理子系统和商品展示子系统。由于电商业务复杂,涉及多个外部系统,以商品售卖为例,一笔交易需要调用商品库存系统、支付系统等多个外部接口,订单处理子系统负责协调这些接口完成业务操作。两个子系统之间通过HTTP接口进行交互,订单处理子系统和商品展示子系统均为单体应用,分别部署3个和5个节点。数据库采用两台MySQL服务器进行主从复制,前端通过一台Nginx进行反向代理。
对系统现状进行分析后,我们梳理出影响系统可靠性和扩展性的薄弱环节:一是Nginx存在单点故障风险;二是数据库性能难以满足业务增长需求,存在性能瓶颈;三是单体应用中各服务间未进行有效隔离,一旦某个服务出现问题,容易引发服务雪崩,影响整个系统的正常运行;四是公司要求每周推出新的营销活动,在现有架构下,单体应用难以在短时间内完成充分测试,无法满足快速交付的要求。
针对上述问题,我们提出了相应的解决方案。为解决Nginx单点故障风险,增加Nginx节点数量,并在前端部署负载均衡器。对于数据库性能瓶颈,采用异步处理机制优化订单处理流程,这能在一定程度上缓解数据库压力,但仍无法彻底解决问题。而服务雪崩和快速交付问题,以及部分数据库性能瓶颈问题,我们认为可以通过引入微服务架构来解决。
微服务架构能够有效实现服务隔离,从物理层面隔离不同服务所占用的资源,结合降级机制,可以较好地应对服务雪崩风险。此外,借助成熟的DevOps工具链,微服务系统能够独立发布受影响的服务,将影响范围控制在最小。在开展营销活动时,通常只需开发一个或少数几个新服务,对整体业务逻辑影响较小,能够很好地满足快速交付的要求。最后,在微服务架构下,我们可以将热点业务的订单数据库独立出来,例如将限时秒杀业务的订单数据存储在单独的数据库中,并通过Debezium实现数据同步,将订单数据同步到总订单库。
确定采用微服务架构后,我们对多种微服务架构实现方案进行评估。综合考虑平滑过渡、保护现有投资以及项目工期等因素,最终决定采用Spring Cloud Alibaba方案。具体设计方案和迁移步骤如下:
- 框架升级:将系统从原生Spring Boot框架逐步迁移至Spring Cloud Alibaba框架,在测试环境进行全面测试,确保系统稳定后,再迁移至生产环境。
- 搭建容器环境:公司采用私有云平台,但云平台尚未提供容器服务。为此,我们向云平台申请资源,并与云平台团队协作,定制预装容器环境的虚拟机镜像,项目新申请的资源统一使用该镜像。
- 构建Jenkins工具链:部署Jenkins搭建自动化构建流水线,实现自动化部署,为运维与开发人员开展专项培训,使其精通基于Jenkins的DevOps开发部署流程,结合容器化环境达成系统性能的高效扩展。
- 商品展示子系统拆分:在完成上述基础设施搭建后,按照每个业务模块一个服务的原则对商品展示子系统进行拆分。为保障系统性能,每个服务内置超时处理和降级策略。由于商品展示服务直接面向用户,为提高用户体验,服务间采用HTTP/2协议进行交互。
- 订单处理子系统拆分:订单处理逻辑较为复杂,因此仅对热点业务进行拆分,在本次项目中,主要针对限时秒杀业务进行拆分,为其创建独立的服务和数据库。在订单处理过程中,采用异步处理机制,收单时先将订单数据存储到Redis中,并记录文件日志,以便在出现异常时进行补偿。订单处理过程通过Redis进行,同时启动同步线程池,将处理后的订单数据同步到订单库。处理完成后,及时从Redis中清理订单数据,降低Redis持久化开销。最后,利用Debezium将订单数据同步到总订单库。
依据上述思路制定设计方案后,我们组织公司内部专家、技术骨干以及相关客户进行评审。在充分讨论并完善部分细节后,经过近两个月的实施,新系统成功上线。上线两年来,系统运行稳定,在扩展性、可修改性、灵活性、可靠性和交付速度等方面均得到显著提升,得到公司及客户的一致认可。团队成员也通过此次项目积累了丰富的微服务架构实践经验,为后续微服务项目的实施奠定了坚实基础。
通过本次项目,我深刻体会到架构师的工作需要在各种技术方案中进行权衡。实现架构升级并非只有微服务架构这一种方案,采用线程池隔离、异步处理和数据库集群等技术,也能在一定程度上解决问题,且实施工期和风险相对较小。但这种方案无法从根本上解决问题,难以满足公司对快速交付的要求。然而,如果项目工期和成本有限,这种方案或许也是一种可行的选择。此次经历让我认识到,作为架构师,必须具备广阔的技术视野,持续学习,紧跟技术发展趋势,才能设计出更契合项目需求的架构,为公司创造更大价值。
2 历年论文题目
时间 | 题目 |
---|---|
2009 | 1. 论基于DSSA的软件架构设计与应用 2. 论信息系统建模方法 3. 论基于REST服务的Web应用系统设计 4. 论软件可靠性设计与应用 |
2010 | 1. 论软件的静态演化和动态演化及其应用 2. 论数据挖掘技术的应用 3. 论大规模分布式系统缓存设计策略 4. 论软件可靠性评价 |
2011 | 1. 论模型驱动架构在系统开发中的应用 2. 论企业集成平台的架构设计 3. 论企业架构管理与应用 4. 论软件需求获取技术及应用 |
2012 | 1. 论基于架构的软件设计方法及应用 2. 论企业应用系统的数据持久层架构设计 3. 论决策支持系统的开发与应用 4. 论企业信息化规划的实施与应用 |
2013 | 1. 论软件架构建模技术与应用 2. 论企业应用系统的分层架构风格 3. 论软件可靠性设计技术的应用 4. 论分布式存储系统架构设计 |
2014 | 1. 论软件需求管理 2. 论非功能性需求对企业应用架构设计的影响 3. 论软件的可靠性设计 4. 论网络安全体系设计 |
2015 | 1. 论应用服务器基础软件 2. 论软件系统架构风格 3. 论面向服务的架构及其应用 4. 企业集成平台的技术与应用 |
2016 | 1. 论体系系统架构评估其应用 2. 论软件设计模式及其应用 3. 论数据访问层设计技术及其应用 4. 论微服务架构及其应用 |
2017 | 1. 论软件系统建模方法及其应用 2. 论软件架构风格 3. 论无服务器架构及其应用 4. 论软件质量保证及其应用 |
2018 | 1. 论软件开发过程RUP及其应用 2. 论软件体系结构的演化 3. 论面向服务架构设计及其应用 4. 论NoSQL数据库技术及其应用 |
2019 | 1. 论软件设计方法及其应用 2. 论软件系统架构评估及其应用 3. 论数据湖技术及其应用 4. 论负载均衡技术在Web系统中的应用 |
2020 | 1. 论数据分片技术及其应用 2. 论云原生架构及其应用 3. 论软件测试中缺陷管理及其应用 4. 论企业集成架构设计及其应用 |
2021 | 1. 论面向方面的编程技术及其应用(AOP) 2. 论系统安全架构设计及其应用 3. 论企业集成平台的理解与应用 4. 论微服务架构及其应用 |
2022 | 1. 论基于构件的软件开发方法及其应用 2. 论软件维护方法及其应用 3. 论区块链技术及其应用 4. 论湖仓一体架构及其应用 |
2023 | 1. 论面向对象设计的应用与实现 2. 论多数据源集成的应用与实现 3. 论软件可靠性模型的设计与实现 4. 论边缘计算技术的设计与实现 |
2024上半年 | 1. 论大数据Lambda架构 2. 论模型驱动架构设计方法及其应用 3. 论单元测试方法及应用 4. 论云上自动化运维级其应用 |
2024下半年 | 1. 论面向服务的架构设计 2. 论软件维护及其应用 3. 论多源异构数据集成方法 4. 论分布式事务及其解决方案 |