系统架构论文日常练习合集
相关阅读:系统架构设计师 复习指南-论文
推荐博文:
Hyplus目录
1 历年论文题目
时间 | 题目 |
---|---|
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. 论分布式事务及其解决方案 |
2 通用范文:微服务架构
适用论题:
- 微服务架构:突出设计原则、治理机制、服务拆分方法论;
- 可靠性/扩展性:细化容错、限流、弹性扩展等技术方案;
- 分布式数据管理:深入分布式事务、数据同步、一致性协议;
- DevOps:详述自动化工具链、CI/CD流程、团队协作优化。
【摘要】
2024年5月,我任职于杭州市一家互联网公司,被委以系统架构师的重任,参与公司电商业务系统的架构升级项目,主导架构设计工作。公司电商系统自推出限时秒杀活动后,订单量急剧攀升,月末订单量突破10万笔。公司计划开展更多营销活动以进一步提升业绩,并拓展业务范畴,但现有架构难以应对这一需求,因此启动了本次项目。
本文围绕该项目,阐述微服务架构在实际项目中的应用。首先梳理微服务架构的理念、优势及面临的挑战;接着分析项目中电商系统的现状,以及影响系统可靠性的风险因素,并简述应对可靠性问题的策略;随后重点探讨如何借助微服务架构实现架构升级的目标;最后制定本次架构升级的技术方案。经评审与实施,系统稳定运行一年多,成功达成设计目标,赢得公司及客户的高度赞誉。
【正文】
2.1 核心理念与技术现状概述
优先回答各问题,再视需求选用一节
2.1.1 微服务/电商系统
【微服务架构概述】
微服务属于面向服务架构的一种类型。在微服务架构体系下,服务粒度精细,每个服务聚焦于特定业务功能。该架构主张将系统拆解为一系列细粒度的服务,通过服务的编排组合来满足业务需求。服务之间采用轻量级通信协议进行交互,使得基于微服务架构的系统具备松耦合、组件化、高扩展、高弹性,以及易于修改和替换的特性,进而提升系统交付的速度与质量。
【论微服务架构在电商系统中的设计与应用】
在服务拆分过程中,引入领域驱动设计(DDD),以“商品展示”“订单处理”“库存管理”等限界上下文为边界划分服务。例如,商品展示子系统按业务模块拆分为“商品详情服务”“促销活动服务”“搜索推荐服务”,每个服务对应独立的领域模型,避免跨领域逻辑耦合。服务间通信根据场景选择协议:面向用户的前端服务基于技术栈兼容性采用HTTP/2协议提升传输效率,后台服务间敏感数据交互则使用Dubbo RPC框架保障调用性能,核心交易链路通过RocketMQ实现异步解耦,确保高并发下的系统稳定性。
【微服务面临的挑战】
尽管微服务架构优势显著,但也面临不少挑战。一方面,大多数业务需求需通过服务编排组合来实现,服务间的通信开销可能对系统性能产生影响,同时数据的一致性和可靠性也可能受到威胁。另一方面,运维成本较高。相较于单体应用,微服务数量众多,每个微服务都需要独立部署,这无疑增加了运维监控的难度和运行成本。此外,实现自动化部署、管理服务间依赖关系,以及开展服务依赖测试,都是在实施微服务架构时需要妥善解决的问题。
【微服务的实现框架】
在落地微服务架构时,有多种技术框架可供选择。Tars框架由腾讯开源,是一款高性能、一站式的服务开发框架,提供服务治理、配置管理、日志统计等丰富功能,能全方位支持微服务系统的开发。此外,Spring Cloud Alibaba同样是热门选择,它依托阿里巴巴在分布式领域的实践经验,整合了Nacos注册中心、Sentinel流量控制组件、Dubbo RPC框架等组件,为微服务开发提供全面的解决方案。
2.1.2 软件架构风格/质量属性评估
【软件架构设计的核心原则与实践】
软件架构设计是对系统结构、组件交互、技术选型的高层规划,其核心是通过合理的抽象与分层,满足功能需求与质量属性(性能、可靠性、可扩展性等)。常见架构模式包括分层架构(前端-应用-数据层解耦)、微服务架构(细粒度服务拆分实现独立演进)、事件驱动架构(通过消息队列解耦异步流程)。架构设计需遵循关注点分离(单一职责原则)、演进式设计(避免过度设计,支持增量迭代)、技术适配性(根据业务场景选择合适技术栈,如OLTP场景用关系型数据库,OLAP用分布式数仓)。在实践中,架构师需通过架构评估(如ATAM方法)识别关键质量属性,通过模式复用(如熔断模式解决服务雪崩)与定制化设计(如电商系统的库存扣减优化),平衡短期实现成本与长期演进需求。
【软件质量属性驱动的架构设计】
软件质量属性(如性能、可靠性、安全性、可扩展性、可维护性)是架构设计的核心约束条件,直接决定系统架构的选型与组件设计。性能要求通过缓存、异步处理、分布式计算提升吞吐量;可靠性依赖冗余部署、故障隔离、自动恢复机制;可维护性通过模块化设计、清晰的接口定义、标准化开发规范实现。这些属性常存在权衡关系(如强一致性与高性能难以兼得),需通过质量属性场景(如“用户下单时,订单服务在500ms内响应”)明确具体需求,再选择合适的架构策略(如最终一致性解决分布式事务性能瓶颈)。实践中,架构师需建立质量属性优先级矩阵,通过分层架构、微服务拆分、弹性伸缩等技术,确保系统在功能迭代中持续满足非功能需求,避免因质量属性缺失导致的架构重构风险。
【可靠性与扩展性设计】
软件系统的可靠性与扩展性是架构设计的核心质量属性。可靠性要求系统在故障(如服务超时、硬件失效)时保持功能稳定,通过容错机制(熔断降级、冗余部署)、故障恢复(自动重试、补偿事务)、监控报警(全链路追踪、异常指标预警)实现,目标是提升系统可用性(如从99.9%到99.99%)。扩展性则关注系统应对负载增长的能力,通过水平扩展(微服务独立扩容、分布式缓存分担压力)、弹性伸缩(基于流量的动态资源调度)、无状态设计(消除节点依赖以支持横向扩展),确保吞吐量与并发量随业务增长线性提升。两者常需协同设计:例如,微服务架构通过服务隔离提升可靠性,同时通过细粒度拆分实现灵活扩展;分布式锁与限流组件在保障可靠性的同时,避免资源过载影响扩展能力。
2.1.3 分布式系统与数据管理
【分布式系统概述】
在分布式系统架构中,数据管理是核心技术维度,其目标是解决数据在多节点、多服务间的高效存储、可靠交互与一致性保障。随着业务规模扩大,数据量激增与访问复杂度提升,传统单体数据库难以满足性能与可用性需求,分布式数据管理通过数据分片(如按业务场景拆分数据库)、复制策略(主从复制、多副本同步)、一致性协议(CAP定理指导下的最终一致性实现)等技术,将数据分散到多个节点,同时确保跨节点操作的可靠性。然而,其面临的挑战包括跨库事务处理(如2PC/TCC模式的选择)、数据同步延迟(Binlog监听与消息队列解耦)、分片键设计(避免热点数据倾斜)等。高效的分布式数据管理策略需在数据一致性、可用性、性能之间取得平衡,支撑高并发场景下的稳定数据交互。
2.1.4 DevOps/软件测试
【DevOps在软件架构升级中的实践】
DevOps理念通过打通开发(Development)与运维(Operations)流程,实现软件交付的高效化、自动化与可靠化,成为微服务架构落地的关键支撑。其核心包括持续集成/持续部署(CI/CD)(代码提交自动触发构建、测试、部署)、容器化技术(Docker镜像封装环境依赖,Kubernetes实现服务编排)、基础设施即代码(IaC)(通过配置文件管理服务器资源),以及监控与反馈闭环(实时采集日志与指标,驱动快速故障定位)。在架构升级中,DevOps解决了微服务数量激增带来的部署复杂度问题,将单体应用的手动部署转化为自动化流水线,使服务发布频率从“周级”提升至“分钟级”,同时通过灰度发布、蓝绿部署等策略降低变更风险。其核心目标是缩短价值交付周期,提升系统可维护性,支撑业务的高频迭代与敏捷响应。
【软件测试在DevOps中的核心价值】
在DevOps体系中,软件测试是保障交付质量的关键环节,通过持续测试(Continuous Testing)将测试活动融入整个CI/CD流水线,实现“测试左移”(Shift Left Testing),提前发现需求歧义、代码缺陷及集成风险。其核心包括:
- 自动化测试策略:覆盖单元测试(验证模块功能)、集成测试(验证服务间交互)、接口测试(保障API契约一致性)、性能测试(模拟高并发场景)及安全测试(扫描注入漏洞、数据加密合规性);
- 测试环境管理:通过容器化技术(Docker)实现测试环境与生产环境的一致性,避免“环境不一致导致的故障”;
- 测试数据管理:使用数据脱敏工具(如Apache DataSketches)生成合规的测试数据集,保障敏感数据安全的同时满足业务场景覆盖。
DevOps中的测试不再是独立阶段,而是与开发、部署环节深度耦合,通过自动化工具链(如Jenkins插件、TestNG框架)实现测试用例的自动触发、执行与结果反馈,确保每次代码变更都经过充分验证,最终提升系统的可测试性与交付质量。
2.2 案例核心问题分析与解决方案
通用内容必写,其余视需求选用一节
2.2.1 微服务/电商系统(通用)
2024年5月,我作为系统架构师,参与公司电商业务系统的架构升级工作,负责制定架构升级方案,并组织实施。本次架构升级旨在提升系统的性能扩展能力和可靠性,为公司开展各类电商营销活动提供有力支撑。公司电商系统当前承载商品售卖、限时秒杀、满减优惠等业务,其中限时秒杀业务占据业务量的较大比例,月末秒杀活动期间,日订单量超过10万笔。公司计划开展更多创新营销活动,如红包雨、阶梯满减、限时抢购等,经评估,现有系统架构难以应对这些活动带来的流量冲击。
当前电商系统基于Spring Boot搭建,主要包含订单处理、商品展示等子系统。由于电商业务复杂,涉及多个外部系统,以商品售卖为例,一笔交易需要调用商品库存系统、支付系统等多个外部接口,订单处理子系统负责协调这些接口完成业务操作。多个子系统之间通过HTTP接口进行交互,且这些子系统均为单体应用。数据库采用两台MySQL服务器进行主从复制,前端通过一台Nginx进行反向代理。
【问题总结】
对系统现状进行分析后,我们梳理出影响系统可靠性和扩展性的薄弱环节:一是Nginx存在单点故障风险;二是数据库性能难以满足业务增长需求,存在性能瓶颈;三是单体应用中各服务间未进行有效隔离,一旦某个服务出现问题,容易引发服务雪崩,影响整个系统的正常运行;四是公司要求每周推出新的营销活动,在现有架构下,单体应用难以在短时间内完成充分测试,无法满足快速交付的要求。
2.2.2 软件架构风格/质量属性评估
【软件架构设计中的可靠性保障】
在电商系统的高并发场景中,可靠性是核心诉求:过往促销活动中,曾因订单处理子系统依赖的库存服务超时,引发级联故障,导致整个交易链路中断30分钟,影响数万用户下单。现有单体架构缺乏服务隔离机制,单个服务的异常易扩散至全局,且故障定位依赖人工日志排查,效率低下。作为架构师,我需要从服务容错、链路监控、故障恢复三个维度设计可靠性保障方案。本文将结合微服务架构实践,详述如何通过熔断降级(Sentinel)、全链路追踪(SkyWalking)、异步补偿机制等技术,将系统可用性从99.5%提升至99.95%,确保在秒杀等高压力场景下核心交易流程的稳定运行。
【软件架构设计中的可扩展性设计】
2024年5月,我作为系统架构师主导公司电商业务系统的架构升级项目。随着限时秒杀、红包雨等营销活动的高频开展,系统日订单量从5万笔飙升至10万笔,且预计未来半年内业务量将呈3倍增长。然而,现有单体架构暴露出显著短板:商品展示、订单处理等子系统均为单体应用,横向扩展时需整体扩容,资源利用率低下;数据库采用主从复制,写入性能瓶颈导致订单创建延迟超过2秒,无法满足“30分钟内承载10万并发订单”的业务目标。如何通过架构设计实现系统的弹性扩展,成为项目的核心挑战。本文将围绕可扩展性目标,阐述微服务拆分、分布式资源调度、动态负载均衡等策略的实践过程,以及如何通过技术方案让系统吞吐量提升5倍,支撑业务的持续增长。
【可靠性解决方案】
针对服务雪崩风险,我们在订单处理服务中集成Sentinel流量控制组件,设置QPS阈值为2000次/秒,并发线程数限制为500,当错误率超过50%时自动触发熔断,熔断时长设为10秒。同时,为商品展示服务配置Hystrix降级策略,当库存服务调用超时(超过500ms)时,返回预定义的降级页面,确保核心流程不中断。在监控层面,搭建Prometheus+Grafana监控平台,实时采集服务调用成功率、响应时间、数据库连接数等指标,设置钉钉报警规则:当服务成功率低于99%或响应时间超过1s时,自动触发多级报警,运维团队可通过SkyWalking进行全链路追踪,快速定位故障节点。
2.2.3 分布式系统与数据管理
【分布式系统的数据管理策略】
在公司电商系统的架构升级中,分布式数据管理成为核心难题:随着订单量突破10万笔/月,单一MySQL数据库实例的写入QPS接近瓶颈(达800次/秒),且跨服务调用(如订单创建需同步扣减库存)引发的分布式事务问题频发,导致数据不一致率高达0.1%。此外,限时秒杀场景下的热点数据访问(如爆款商品库存)常引发锁竞争,严重影响交易链路的稳定性。作为架构师,我需要设计一套覆盖数据分片、异步同步、最终一致性的管理策略,解决分布式环境下的数据存储、访问与一致性问题。本文将结合电商交易场景,详述如何通过分库分表、Debezium数据同步、本地消息表等技术,实现订单数据的高效存储与可靠交互,确保系统在高并发下的数据完整性与可用性。
【分布式数据管理解决方案】
在数据库拆分与数据一致性处理上,我们将限时秒杀业务的订单数据存储在独立的MySQL分库(秒杀订单库),通过Debezium监听binlog日志,将数据实时同步到总订单库。针对跨库事务问题(如“秒杀扣库存与订单创建”),采用本地消息表方案:订单服务生成订单时,同时向MQ发送消息,库存服务接收到消息后执行扣减操作,并通过数据库事务保证消息与业务操作的一致性。若库存扣减失败,通过定时任务扫描未确认的消息进行重试,最终实现数据的最终一致性。此外,商品展示服务采用读写分离架构,通过MyCat中间件将读请求路由到从库,降低主库压力,写请求则通过主库保障事务性。
2.2.4 DevOps/软件测试
【DevOps在软件架构升级中的实践】
2024年,公司电商业务进入快速迭代期,要求每周推出2-3场新营销活动,传统单体架构的交付流程已难以满足需求:单体应用编译打包耗时30分钟,测试环境部署需人工介入,每次发布伴随的全链路回归测试耗时超过4小时,且曾因配置不一致导致3次生产事故。作为架构师,我意识到必须通过DevOps理念重构研发流程,解决微服务架构下的持续集成、自动化部署与运维监控问题。本文将围绕“提升交付效率与质量”的目标,阐述如何搭建Jenkins流水线、容器化部署平台及全链路监控体系,实现服务部署时间从30分钟缩短至5分钟,故障恢复时间从2小时压缩至15分钟,支撑业务的高频迭代与稳定运行。
【DevOps/软件测试解决方案】
为支撑微服务的高效部署与运维,我们构建了基于Jenkins的CI/CD流水线,并且流水线中构建了多层级自动化测试体系,确保微服务架构的可靠性与稳定性:代码提交后自动触发单元测试(使用JUnit与Mockito),通过SonarQube进行代码质量扫描(要求代码覆盖率≥80%),测试通过后自动构建Docker镜像并推送到Harbor仓库,最后通过Kubernetes进行滚动更新部署,确保服务无中断发布。容器化环境采用定制化虚拟机镜像,预装JDK 11、Docker Runtime及公司自研监控Agent,单个服务部署时间从传统虚拟机的30分钟缩短至5分钟。开发、测试、运维团队通过GitOps管理配置文件,统一使用Nacos进行配置中心管理,实现环境配置的版本化和动态更新,显著提升协作效率。
2.5 实施与验证(通用)
我决定采用微服务架构,对多种微服务架构实现及运维方案进行评估。综合考虑平滑过渡、保护现有投资以及项目工期等因素,最终决定采用Spring Cloud Alibaba方案。具体设计方案和迁移步骤如下:
- 框架升级:将系统从原生Spring Boot框架逐步迁移至Spring Cloud Alibaba框架。使用Nacos作为服务注册与发现中心,利用Sentinel进行流量控制和熔断降级,Hystrix作为辅助进行部分非核心链路的柔性降级。服务间通信方面,前端服务采用HTTP/2协议,后台服务使用Dubbo RPC框架,异步场景借助RocketMQ实现消息传递。先在测试环境对新框架进行全面测试,确保系统稳定后,通过灰度发布逐步迁移至生产环境。
- 搭建容器环境:因公司私有云平台未提供容器服务,与云平台团队协作,基于Kubernetes定制预装JDK、SkyWalking Agent及Docker Runtime的虚拟机镜像。采用NFS和PVC实现配置文件持久化,通过Kubernetes Secret管理敏感配置。为微服务设置资源配额,并利用Kubernetes的HPA实现资源的弹性伸缩。
- 构建Jenkins工具链:部署Jenkins搭建自动化构建流水线,实现从代码提交到生产部署的自动化流程。包含单元测试(使用JUnit和Mockito)、代码质量扫描(SonarQube)、Docker镜像构建与推送(Harbor仓库)、Kubernetes滚动更新部署等环节。同时引入GitOps管理配置文件,使用Nacos作为配置中心,实现环境配置的版本化和动态更新。为运维与开发人员开展专项培训,使其熟悉基于Jenkins的DevOps开发部署流程,结合容器化环境提升系统性能扩展能力。
- 商品展示子系统拆分:在完成基础设施搭建后,按照每个业务模块一个服务的原则对商品展示子系统进行拆分,形成商品详情、促销活动、搜索推荐等服务。每个服务内置超时处理和降级策略,服务间采用HTTP/2协议交互。商品详情服务集成本地缓存,促销活动服务对接Redis集群,搜索推荐服务基于Elasticsearch构建索引。服务间添加JWT令牌校验,敏感接口设置IP白名单。
- 订单处理子系统拆分:鉴于订单处理逻辑复杂,仅对限时秒杀等热点业务进行拆分,创建独立的服务和数据库。采用“Redis队列削峰+本地消息表”的异步处理机制,收单时将订单数据存入Redis,同时记录文件日志。启动线程池处理订单,处理完成后将数据同步到订单库,并清理Redis中的数据。利用Debezium监听数据库binlog,将订单数据同步到总订单库。库存扣减采用“乐观锁+CAS”机制,避免超卖。
依据上述思路制定设计方案后,我们组织公司内部专家、技术骨干以及相关客户进行评审。在充分讨论并完善部分细节后,经过近两个月的实施,新系统成功上线。上线两年来,系统运行稳定,在扩展性、可修改性、灵活性、可靠性和交付速度等方面均得到显著提升——QPS从单体架构的500提升至8000,服务部署频率从每周1次提升至每天5次,故障恢复时间从2小时缩短至15分钟,得到公司及客户的一致认可。团队成员也通过此次项目积累了丰富的微服务架构实践经验,为后续微服务项目的实施奠定了坚实基础。
2.6 经验总结
总结上文
【示例】
通过本次项目,我深刻体会到架构师的工作需要在各种技术方案中进行权衡。实现架构升级并非只有微服务架构这一种方案,采用线程池隔离、异步处理和数据库集群等技术,也能在一定程度上解决问题,且实施工期和风险相对较小。但这种方案无法从根本上解决问题,难以满足公司对快速交付的要求。然而,如果项目工期和成本有限,这种方案或许也是一种可行的选择。此次经历让我认识到,作为架构师,必须具备广阔的技术视野,持续学习,紧跟技术发展趋势,才能设计出更契合项目需求的架构,为公司创造更大价值。
3 通用范文:论软件架构风格
Overall
【摘要】
我就职于杭州市一家互联网公司Hyperplasma,2024年1月,公司决定开发一套全新的业务绩效评估平台系统,我在此次系统开发项目中担任架构师,全面负责系统的架构设计工作。该平台旨在满足公司内部绩效管理的同时,为业务拓展及用户激励提供支持,是公司提升运营效率、推动业务增长的关键项目。本文以业务绩效评估平台系统与公司其他系统的集成为例,先对几种常用的软件架构风格及其特点展开介绍,接着结合项目实践,阐述项目在软件架构选择过程中采用数据流风格、调用返回风格、独立构件风格、虚拟机风格以及仓库风格组合的原因,最后总结在使用多种架构组合时遇到的问题及解决办法。通过合理选择和组合架构风格,项目开发取得成功。目前,系统已稳定运行1年多,获得公司管理层、员工的广泛认可。
【正文】
我所在的公司位于杭州市,在互联网行业深耕多年,业务范围覆盖多个领域。随着互联网行业竞争的日益激烈,公司为提升市场竞争力,决定优化内部管理体系,推动业务创新发展。在此背景下,公司提出建设全新的业务绩效评估平台,对现有的绩效管理体系进行全面升级,并融入互联网思维,搭建一个多维度、多渠道的绩效评估平台,以满足不同业务场景和用户群体的需求。
在进行架构风格选择前,我们对常见的5种架构风格进行了分析:
(一)数据流风格:包括批处理序列架构风格和管道/过滤器架构风格。
- 批处理序列架构风格:该风格的组件由一系列按固定顺序排列的计算单元组成,组件之间仅通过数据传递进行交互。每个处理步骤都是一个独立的程序,前一步骤完成后,后一步骤才能开始。数据需完整,以整体方式进行传递。
- 管道/过滤器架构风格:每个构件都有一组输入和输出,构件读取输入数据流,经过内部处理后,生成输出数据流。不过,这种风格不太适用于实时交互式设计,且由于缺乏统一的通信标准,数据传输效率可能较低。
(二)调用/返回风格:包括层次结构架构风格、主程序/子程序架构风格和面向对象架构风格。
- 主程序/子程序架构风格:采用单线程控制,将问题分解为若干处理步骤,构件包括主程序和子程序。子程序通常可整合为模块,过程调用作为交互机制,即连接件。调用关系具有层次性,子程序的正确性依赖于其调用的子程序的正确性。
- 面向对象架构风格:将数据的表示方法及其对应的操作方法封装在对象中。对象之间通过函数和过程调用进行交互,这种风格的构件为对象,连接件为函数和过程调用。该结构风格具有封装、交互、多态、继承和重用等特性。
- 层次架构风格:层次系统组织成层次结构,构件在某些层实现虚拟机。连接件通过定义层间交互协议确定,拓扑约束包括对相邻构件交互的约束。其特点是每层为上层提供服务,使用下层服务,仅能看到相邻层。大问题被分解为若干渐进的小问题,逐步解决,隐藏了许多复杂性。修改一层,最多影响两层,通常仅影响上层。上层需知晓下层身份,不能随意调整层次顺序。
(三)独立构件风格:包括进程通信架构风格和事件驱动架构风格。
- 进程通信架构风格:构件为独立的过程,连接件为消息传递。这种风格的构件通常为命名过程,消息传递方式有点到点、异步和同步方式以及远程过程调用等。
- 事件驱动架构风格:构件不直接调用过程,而是触发或广播一个或多个事件。系统中其他构件的过程在一个或多个事件中注册,当事件被触发时,系统自动调用在该事件中注册的所有过程。其主要优点是为软件重用提供强大支持,便于构件的维护和演化;缺点是构件放弃了对系统计算的控制。
(四)虚拟机风格:包括解释器架构风格和基于规则的系统架构风格。
- 解释器架构风格:一个解释器通常由完成解释工作的解释引擎、存储被解释代码的存储区、记录解释引擎当前工作状态的数据结构以及记录源代码解释执行进度的数据结构组成。具有解释器风格的软件含有虚拟机,可仿真硬件执行过程和一些关键应用,但执行效率较低。
- 基于规则的系统:由规则集、规则解释器、规则/数据选择器及工作内存组成。
(五)仓库风格:包括数据库架构风格和黑板架构风格。
- 数据库架构风格:这是最常见的形式,构件主要有两类,一是中央共享数据源,用于保存当前系统的数据状态;二是多个独立处理元素,对数据元素进行操作。
- 黑板架构风格:黑板架构由知识源、黑板和控制三部分组成。知识源包含若干独立计算的不同单元,提供解决问题的知识,知识源响应黑板上的变化,且仅修改黑板。黑板是全局数据库,包含解域的全部状态,是知识源相互作用的唯一媒介。黑板通常应用于没有确定性算法的系统,如信号处理、问题规划及编译器优化等软件系统的设计。
经研究,本次项目决定采用Spring Boot技术开发B/S架构的系统。业务绩效评估平台需要数据仓库提供相关业务指标数据,并采用微服务架构与公司多个业务系统进行集成。在架构风格选择上,最终我们采用了管道/过滤器架构、分层架构、进程通信架构、基于规则的系统架构和数据库系统几种架构风格的组合。下面阐述选择这几种架构风格的原因。
- 管道/过滤器架构风格和进程通信架构风格选择原因:业务绩效评估涉及的业务数据和用户数据需从数据仓库获取。我们使用Apache Sqoop工具,每天在业务低谷期从仓库批量抽取数据,通过一系列数据转换任务进行逻辑处理,每个转换任务都有输入流和输出流,多个转换任务协同完成每日的数据处理工作。业务绩效评估平台需与公司的用户管理系统、业务运营系统、数据分析平台等进行交互,涉及异构系统间的通信。业务模块通过远程调用其他服务和点到点异步消息通讯来实现数据交互。
- 分层架构风格和数据库系统风格选择原因:本次采用的Spring Boot框架具备分层架构的特性。我们采用表现层、业务逻辑层、数据持久层分离的架构开发B/S系统,每层仅为上层提供服务,属于典型的分层架构。数据持久层保存的数据和抽取的数据均存储在MySQL数据库中,业务逻辑层涉及数据操作时,通过MyBatis框架与中央数据库进行交互,实现对数据库的增、删、改、查操作。
- 基于规则的系统架构风格选择原因:业务绩效评估涉及的评估规则变化频繁,每次规则变化都需及时响应。绩效计算通常需将业务类型、用户行为、业务指标、奖励系数等通过规则不断组合、变换后进行解释计算。为满足复杂绩效计算的需求,使用传统硬编码方式显然不可行。因此,我们采用EasyRules规则引擎框架,通过规则引擎实现复杂的绩效计算。
在使用多种架构风格组合开发系统的过程中,我们也遇到了一些问题,并采取了相应的解决办法。使用EasyRules规则引擎时,由于计算数据量庞大,导致计算全公司绩效结果耗时较长,影响业务效率。经过测试分析,我们采用集群部署和并行计算技术,将绩效计算时间缩短至1小时以内。此外,EasyRules规则引擎的表达式通过配置文件编写,业务人员难以进行规则表达式的维护,限制了规则引擎的使用。针对这一问题,我们开发了一个可视化规则配置工具,方便业务人员进行规则配置和管理。
通过本次项目实践,我们认识到,现代信息系统结构复杂,需要集成的系统众多,多种架构风格融合是必然趋势。随着技术的不断发展,新型架构风格不断涌现,合理选择架构风格对系统开发和复用至关重要。经过7个月的开发,业务绩效评估平台顺利上线并稳定运行1年多,充分发挥了绩效激励、业务引导的作用,目前已在公司全面推广使用,得到了公司管理层和员工的一致好评。