系统架构设计论文-修改版
摘要(300)
2022年3月,我参与了某公司供应链管理系统的建设工作,该系统要求为不同的城市设立单独的城市站点,每个站点覆盖对应省份的业务,站点之间既可以独立运营又可以相互协作。该项目主要包括商品库管理、仓储系统管理、订单履约管理、采购和供应商等资源管理。我在项目中担任系统架构设计师一职。负责项目整体架构设计、架构文档编写和部分架构实现等工作。
本文以该项目为例,主要论述了xxx在该项目中的具体应用。本系统采用三层B/S的系统架构风格和分层架构设计,降低系统耦合度,简化了用户操作。
本项目于2023年2月完成交付并投入使用。系统自上线一年以来运行稳定,得到客户的一致好评
引言(450)
近年来,供应链领域迎来了快速的发展。在2022年3月,我参与了某公司的供应链管理系统的开发和架构设计工作。该项目主要包含商品库管理、仓储管理系统、订单履约系统、售后管理、采购管理、供应商管理、物流配送管理等功能。结构上包含PC管理后台、微信商城小程序和员工助手客户端;仓库员工通过员工助手客户端进行WMS出库、入库、库存管理操作,司机通过员工助手客户端完成订单履约和售后服务等任务;用户通过微信商城小程序可以灵活选择城市站点、进行下单操作、查看订单履约情况和售后服务等。各个城市站点之间可以通过管理后台进行商品和物资的联合调用和管理。
我被委派为此项目的系统架构设计师,负责项目整体架构设计、架构文档编写、部分架构实现等工作。本系统采用三层B/S的系统架构风格,考虑到项目的复杂性、风险性以及存在的不确定性因素,我们决定采用螺旋模型的方式进行项目的设计和开发工作,并采用了模块化设计、松耦合设计等层次架构设计将软件系统划分为多个层次,每个层次都有其特定的职责和功能,以确保项目的顺利推进和最终成功交付。本项目于2023年2月完成交付并投入使用。系统自上线一年以来运行稳定,得到客户的一致好评。
回答问题(300)
在上述背景下我成功将系统架构风格运用到实际项目中,并保证了系统顺利上线。
软件系统架构风格介绍(325):
软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式。主要的架构风格有数据流体系架构风格、调用/返回体系结构风格、以数据为中心的体系结构风格、虚拟机体系结构风格、独立构件系统结构风格几大类。数据流体系结构风格是以数据处理为中心,典型的是批处理和管道/过滤器架构风格;调用/返回风格是指在系统中采用了调用和返回机制,实际上是一种分而治之的策略,将一个复杂的系统分解为多个子系统以降低系统的复杂度;以数据为中心的体系结构风格主要包括仓库体系结构风格和黑板系统结构风格;虚拟机体系机构风格是人为构建一个运行环境,可以解析和运行自定义的语言来增加架构的灵活性;独立构件体系风格主要强调系统系统中每个构件都是相对独立的个体,以降低耦合性提升灵活性。
层次架构设计中的主要工作和思路(250):
在层次架构设计是确保系统的各个部分能够协同工作,以实现系统的整体功能和性能目标。主要工作和思路是确定系统层次划分和确定各层次之间的交互方式。确定系统层次划分包括通过业务需求分析确定系统层次的划分、根据业务逻辑和技术选型,将系统划分为不同的层次;确定各层次之间的交互方式包括为每个层次定义清晰的接口,明确各层次之间的数据传递和交互方式,设计合理的数据传输机制,确保数据在各层次之间能够准确、高效地传递,定义统一的异常处理机制,确保在层次交互过程中出现的异常能够得到妥善处理,避免影响系统的整体稳定性。
层次架构在软件开发中的主要作用(274):
层次架构在软件开发中为软件系统的开发、维护、扩展和更新提供了清晰的指导和结构。主要作用包括解耦与模块化、明确职责与分工、易于测试与维护和适应变化几个方面。解耦与模块化指将系统划分为不同的层次,每个层次都有其特定的职责和接口。这种划分使得各个模块之间的耦合度降低,提高了系统的可维护性和可扩展性;明确职责与分工指在层次架构中,每个层次都承担特定的职责,这种明确的职责划分使得开发团队能够更好地分工合作,提高开发效率;易于测试与维护指每个层次都可以独立地进行测试和维护;适应变化指的根据灵活性使得系统能够更容易地适应这些变化,而无需对整个系统进行重构。
软件系统架构评估方法(179):
软件系统架构评估方法主要有SAAM方法、架构权衡分析方法(ATAM)和成本效益分析法(CBAM)。SAAM方法是一种非功能质量属性的架构分析方法;架构权衡分析方法是在SAAM的基础上发展起来的,主要针对性能、实用性、安全性和可修改性,在系统开发之前对这些质量属性进行评估和折中;成本效益分析法主要从经济角度建立成本、收益、分险和进度等方面软件的“经济”模型
软件系统架构评估中所普遍关注的质量属性(288):
在软件系统架构评估中,普遍关注的质量属性主要包括性能、可靠性、可用性、安全性、可修改性、功能性、可变性。性能只系统的响应能力;可靠性是软件系统在应用或系统错误面前,在意外或错误使用的情况下维持软件系统的功能特性的基本能力,它关注系统是否能够在长时间内稳定运行,以及在发生故障时能否快速恢复。可用性是指系统能够正常运行的时间比例;安全性是指系统在向合法用户提供服务的同时,能够阻止非授权用户使用的企图或拒绝服务的能力;可修改性包括系统的可维护性、可扩展性、结构重构以及可移植性等方面;功能性是系统所能完成所期望的工作的能力;可变性是指体系结构经扩充或变更而成为新体系结构的能力
大数据架构的主要设计目标(350):
大数据架构的主要设计目标是为了构建一个能够高效、可靠、可扩展地处理、存储和分析海量数据的系统。这些目标确保了大数据架构能够满足企业对于数据处理的需求,同时保证数据的安全性、完整性和准确性。大数据架构的具体方法有选择高性能的硬件设备和存储设备、引入并行处理和分布式计算技术提高处理效率;设计合理的备份和恢复策略,确保数据的可靠性和可恢复性,定期对系统进行维护和检查,及时发现并修复潜在的问题和故障保障系统的可靠性;设计可伸缩的架构,支持动态地增加或减少节点和存储设备,引入容器化技术(如Docker)和自动化部署工具(如Kubernetes),实现快速部署和扩展系统资源;设计直观易用的用户界面和管理工具,降低技术门槛和运维成本,建立完善的文档和支持体系,为用户提供及时的技术支持和帮助;
大数据架构设计的关键要素(270):
大数据架构设计的关键要素主要包括数据采集与存储、数据处理与分析、数据安全与隐私、可扩展性与性能以及实时数据处理与流式计算。
数据采集与存储优缺点:批处理适合大量数据的离线处理,但实时性较差;流式处理实时性强,但可能面临数据一致性和完整性的挑战
数据处理与分析优缺点:MapReduce简单易用,但计算效率相对较低;Spark计算效率高,但编程模型相对复杂。机器学习算法强大,但模型选择和调参需要一定经验
数据安全与隐私优缺点:数据加密和访问控制可以提高数据安全性,但可能增加系统复杂性和性能开销;数据脱敏可以保护隐私,但可能损失部分数据价值
项目中的一些实现和过程(2500)
基于以上我对架构风格的理解以及风格特点的评估,本系统分别于系统集成处使用了隐式调用架构风格;于业务流转处使用了管道/过滤器架构风格;于整体架构层面使用了三层B/S 架构。下文将详细介绍以上三种架构风格在本系统中具体实现方案
鉴于项目团队规模较大,成员间的开发习惯和风格存在差异,我们针对此问题制定了一套开发和设计的标准,以确保整体项目的一致性和可维护性。根据系统架构设计规范和行业通用标准,我们明确要求团队成员严格按照规范执行各项开发和设计任务。
在开始功能或模块的开发之前,必须编写相应的文档。该文档应包括功能需求、设计方案、接口说明等内容,以便开发过程中的参考和沟通。
在开发过程中,团队成员必须遵守制定的开发守则。这些守则涵盖了代码编写规范、命名规范、注释规范等方面,旨在保证代码的质量和可读性。
开发完成后,代码首先发布到测试平台,供测试人员进行全面测试。测试通过后,才能进行下一步的操作。通过测试的代码需要进行代码审计。审计过程中,将对代码进行详细的检查和评估,以确保代码质量和安全性。
经过代码审计并通过后,才能逐一发布到PC管理后台和微信小程序和PDA中,以确保项目的稳定性和可靠性。最后,发布到生产环境之后,还需要进行生产测试。如果在生产环境中发现了问题,团队需要及时发布修复程序,并对相关文档进行更新和补充,以确保用户体验和系统的正常运行。
这些步骤的严格执行,有助于提高项目的开发效率、降低维护成本,并确保最终交付的产品质量和用户满意度。
在商品库的设计过程中,我们根据商品的用途和管理维度,将商品划分为SPU、SKU和SN三个维度。在定义上,一个SPU包含N个SKU,一个SKU包含N个SN。这三者之间的关系如下图所示:
为解决商品种类繁多、管理难度大的问题,我们引入了商品目录。商品目录是供应链中的重要属性之一,其规范化和健全性不仅有助于对商品属性进行划分,还能提升仓库的出入库管理效率,且有利于用户进行精准的商品选购。此外,健全的商品目录也为未来业务拓展提供了便利。
仓储管理系统(WMS)在供应链管理系统中扮演着比较重要角色。一个合理、高效、规范化的仓储管理系统显得至关重要。在设计WMS时,我们秉承精准、高效、合规的原则。其中,精准要求操作权限分离,精细准确,确保操作可追溯;高效追求降低成本、提升效率,倡导自动化处理;合规要求所有操作合法合规。我们遵循一品一位(每个SKU有独立的货位管理)、一位一签(每个货位有唯一标签地址)、一人一岗(每个操作人员有对应的岗位角色)原则。每个货位都有唯一的货位编号,例如:BG-A01-02-03-04-05,其中BG代表北京站点,A01代表库区,02代表通道,03代表货架(排),04代表层,05代表列(格)。此外,对于需要入库的商品,根据实际库存、货位使用情况和商品属性,自动计算和推荐商品储货位,实现按属性、体积和重量合理分配库位货位。入库环节包括收货、验收和上架环节。
订单履约系统是企业供应链能力的体现,也是建立口碑、增加客户的重要途径。完整的订单履约包括新建订单(用户下单)、订单拆分(根据商品的库区等进行拆分)、订单审核(或订单确认)、仓库拣货、订单合并(将多个仓库的商品调度打包)、物流配送和物流签收等核心环节。此外,记录完整的订单跟踪过程对提升用户体验至关重要。例如,订单创建时间、审核状态、出库情况、最新的配送情况、收货情况等。这些信息可以让用户清晰了解订单过程,减少焦虑等待,减少商品售后问题的发生。
在本系统中,包含了众多的供应商,每个供应商的特点和要求可能会有所不同。特别是在食品、医疗等行业中,对采购供应商和商品的引入通常会有较为严格的审批流程。企业需要确保供应商的登记信息和相关证书完整,以确保商品的安全性。
供应链管理系统中的供应商管理不仅需要对供应商进行综合管理,还需要严格把控商品的质量和安全。为了确保平台能够进行高效的商品调度和销售,需要保持与供应商之间的商品和库存信息同步。此外,还需要建立报价、合同履约、对账与结算等流程化和透明化的管理机制。
为了确保系统的高可用性,我们采用了以下技术选型和策略:
数据存储方面,我们采用了两级存储策略。首先,核心数据存储选用了MySQL,并配置了主从复制结构架构,以提高数据的可靠性和可用性。其次,我们利用Redis数据库作为数据缓存,结合主从复制和哨兵进行集群部署,从而减轻核心数据库的读压力,解决高并发和高可用性问题。
针对数据备份,我们采用了定时任务和人工介入相结合的方式,进行数据的冗余备份操作,以保障数据的安全性和完整性。
在系统间通信方面,我们选择了基于HTTPS协议的Restful API接口设计。由于REST服务具有出色的灵活性和可读性,这种设计能够有效地实现系统之间的高效通信,并确保数据传输的安全性和可靠性。
为了确保系统高内聚低耦合的原则,我们采取了以下措施:
合理分层:我们对各个模块进行了合理的分层,以确保每个模块的职责清晰,功能单一。这样可以使得系统的各个部分相互独立,易于维护和扩展。
工厂模式设计:按照工厂模式的设计思想,我们将各个功能独立封装成服务,调用者只需按照相应的文档进行调用,而无需了解内部结构。这种设计方式使得系统更加灵活,易于扩展和替换。
作用域和业务场景分析:我们对各个服务的作用域和业务场景进行了详细的分析,确保每个服务的功能都在自己的作用域内完成,不跨越职责边界。
数据来源和支付平台的处理:针对多个供应商数据来源不一致和支付平台差异等问题,我们在设计时考虑了统一的数据处理和支付接口,通过封装和适配器等设计模式,使得调用者无需关心不同数据来源的细节,也无需处理支付平台的差异,从而确保系统的统一性和可扩展性。
降低功能之间的交叉引用:我们尽量避免不同功能之间的交叉引用,避免一个功能在多个地方进行重复实现,以及功能之间过多的依赖关系。这样可以提高系统的灵活性和可维护性,降低系统的复杂度。
结尾(300)
系统自上线一年以来运行稳定达到了客户的预期目标和要求。目前,系统已经录入了超过6万个商品信息,注册用户超过70万,合作供应商数量超过5千家,得到了用户的一致好评。然而,尽管系统取得了这些成就,仍存在一些改进空间。
实践证明,供应链管理系统的顺利交付和持续稳定运行与其采用的架构设计密不可分。此次架构设计让我深刻认识到,软件质量不仅需要保证开发过程,同时也需要重视和正确看待开发过程中的各种影响因素,只有这样才能对软件做出质量保证;不论是个人还是团队,只有遵循系统性的规范性的架构设计原则才能使系统更加健壮和持久。
未来,我将更加努力地学习相关的专业知识,并将其应用于实际工作中,不断在实践中提升自己的技能水平
—— 无我 书于2024年5月 昆明