原文文件:论软件系统架构风格-线上商品交易与运营平台.md
# 论软件系统架构风格 摘要: 2024 年 3 月,我参与了某互联网公司线上商品交易与运营平台的建设工作。该平台围绕公司线上交易业务的统一运营需要,实现了商品交易、库存协同和经营分析等工作的集中支撑。在该项目中,我担任系统架构设计师,主要负责总体架构设计、关键技术选型、模块划分、接口规范制定和核心方案评审工作。本文以该系统为例,主要论述软件系统架构风格在项目中的具体应用。结合本项目访问入口多、交易链路短时并发高、订单状态变化频繁、系统推广维护要求高等特点,我们采用了调用/返回风格中的层次架构、独立构件风格中的隐式调用以及 B/S 架构风格。实践证明,上述架构风格有效降低了系统耦合度,提高了系统的可维护性和运行稳定性,保证了项目顺利上线运行。 正文: 随着公司线上经营规模不断扩大,业务活动从单一的商品展示和订单处理,逐步延伸到活动运营、库存协同、售后服务和经营分析等多个环节,各项业务对信息系统连续、稳定支撑的要求也越来越高。该项目建设前,公司线上交易业务主要依靠原有单体系统和若干后台工具支撑,虽然能够满足早期业务需要,但随着活动数量、用户访问量和订单处理量持续增加,原系统在业务协同和运行效率方面逐渐难以适应发展要求。特别是在活动高峰期,交易请求集中到达,订单生成、支付确认、库存处理和状态查询等环节相互依赖,容易出现响应延迟和状态不一致的情况;运营人员也需要在多个后台之间反复核对活动配置和交易数据,影响了业务处理效率。为了提高线上交易处理效率,规范商品和订单管理流程,降低后续系统维护成本,公司决定建设统一的线上商品交易与运营平台。 本项目于 2024 年 3 月启动,历时 10 个月完成核心功能建设并上线运行,项目组共 21 人。系统采用前后端分离方式建设,服务端以 Java 技术体系为主,并结合网关、缓存、数据库、消息队列和定时任务等技术组件完成系统支撑。平台上线后,用户侧交易流程由统一入口承载,运营人员也可以通过后台集中维护商品活动信息,并统一监控交易和对账情况。我在项目中担任系统架构设计师,主要负责总体架构设计、关键技术选型、模块划分、接口规范制定和核心方案评审,历时 4 个月完成主要架构设计工作。 在架构设计工作开始阶段,我认识到,软件系统架构风格是进行系统总体结构设计时需要重点考虑的内容。它通过规定系统构件、连接件以及约束关系,为软件系统提供可复用的组织模式,使架构设计能够在较高层次上保持清晰和稳定。常见的软件系统架构风格包括数据流风格、调用/返回风格、独立构件风格、虚拟机风格和仓库风格等。本项目主要采用了调用/返回风格中的层次架构、独立构件风格中的隐式调用以及 B/S 架构风格。其中,层次架构强调相邻层之间按约定协议进行调用,便于划分系统职责和控制影响范围;隐式调用强调构件之间不直接调用,而是通过事件或消息触发相关处理,便于降低构件耦合度;B/S 架构将主要业务逻辑集中在服务器端,通过浏览器或移动端页面访问系统,便于统一部署和维护。以下正文将重点描述这些架构风格的实施过程和应用效果。 在系统接入和业务服务层,我们采用调用/返回风格中的层次架构来满足多入口访问和业务边界清晰的要求。该平台涉及用户交易、运营管理、库存处理和支付对账等业务,如果接入控制、业务规则和数据访问逻辑混杂在一起,不但会增加开发和维护难度,也会导致后续业务调整时影响范围难以控制。为解决这一问题,我们将系统划分为接入层、业务服务层和数据支撑层。接入层采用 Spring Cloud Gateway 作为统一入口,集中完成登录校验、访问限流、请求路由和接口日志记录;业务服务层按照用户、商品、订单、库存、支付和运营等能力划分模块,并通过 Nacos 和 Dubbo 完成服务注册、发现和调用;数据支撑层主要由 MySQL 和 Redis 承担事务数据保存、热点库存缓存和幂等控制等工作。以用户参与活动并提交订单为例,请求先经过统一入口完成身份校验和路由,再由订单、商品和库存等模块协同完成下单校验。通过这种层次化组织,请求入口、业务规则和数据访问边界更加清晰,后续新增运营活动或调整库存策略时,可以主要在相关业务模块内完成修改,减少对支付、消息和后台管理等其他链路的影响。 在交易中间层,我们采用独立构件风格中的隐式调用来简化构件之间的交互复杂度,降低系统耦合度。线上商品交易具有明显的峰值特征,活动开始后的短时间内会产生大量浏览、下单和支付请求,如果订单创建、库存扣减、支付确认、消息通知和超时关闭全部采用同步调用,任一环节响应变慢都会影响用户主流程。经过调研和测试,我们选择 RocketMQ 作为消息连接件,将订单状态变化、支付结果确认、库存处理和交易关闭等过程通过消息方式进行衔接。实际运行过程中,用户下单成功后,订单模块只完成必要的订单创建和状态记录,库存处理、支付结果回传、消息通知以及未支付订单关闭等工作由相关模块根据消息异步完成。通过这种发布订阅和异步协作机制,各业务模块只关注自身职责范围内的处理逻辑,活动高峰期可以利用消息队列削峰填谷,外部支付结果短暂延迟时也不会阻塞下单主流程,从而提高了交易链路的稳定性和可扩展性。 在应用系统层,我们主要采用 B/S 架构风格,解决系统推广难、维护难和多角色访问不一致的问题。该平台的使用人员既包括面向外部的普通用户和商户,也包括公司内部的运营、客服和财务人员,如果分别为各类人员建设厚客户端,不但安装升级成本较高,也会增加版本兼容和问题排查难度。为解决这一问题,我们将主要业务能力集中部署在服务端,用户侧通过移动端和 Web 页面访问交易功能,运营和客服人员通过浏览器访问后台管理功能。前端主要负责页面展示、表单校验和交互引导,复杂的交易规则、库存校验、支付处理和对账逻辑均由服务端统一完成。系统上线后,当商品活动规则、支付校验方式或后台菜单权限发生调整时,项目组只需要在服务端和前端资源中统一发布,不需要逐台处理客户端环境。通过这种 B/S 架构风格,系统在推广过程中对终端环境要求较低,维护工作更加集中,普通用户、商户和内部人员也能够通过统一入口获得较为一致的业务体验。 整个项目于 2025 年 1 月完成核心功能上线,并在公司主要业务线推广使用。系统上线后,先后支撑了多次业务活动和交易高峰,整体运行情况较为平稳,核心业务流程能够正常开展,运营和客服人员也能够通过统一平台完成日常处理工作。上线运行期间,系统未发生重大生产事故,少量异常数据能够通过补偿任务和人工复核及时处理,维护工作量处于可控范围。经过一段时间运行,该平台基本满足了公司线上交易和运营管理的需要,提高了业务处理效率,减少了运营人员的重复操作,并得到了业务部门的认可。 在总结项目经验的同时,我也看到本项目仍然存在一些不足。第一,活动高峰期部分热门商品访问较为集中,个别页面和查询接口在峰值情况下响应时间仍有波动;第二,运营报表在上线初期还不够完善,部分统计指标需要人工核对后才能使用。针对第一类问题,后续我们计划继续优化热点数据缓存、查询索引和资源扩容策略;针对第二类问题,我们将进一步完善报表统计口径和数据校验规则,减少人工核对工作。通过本项目实践,我认识到,系统建设不是一次性完成的工作,只有在上线运行后持续跟踪业务效果、发现问题并不断改进,才能使系统长期稳定地支撑业务发展。