当前位置: 首页 > news >正文

论软件体系结构的演化

摘要        

        2022年3月,我加入了公司的新智慧公交平台项目研发团队,并担任系统架构师角色,负责系统整体架构的设计与评审。该项目采用了物联网三层架构模型,其中设备接入层和网络交互层基于公司的中台战略,我们有效复用了公司中台的S17设备交互平台组件。在公交平台的应用层,我们采纳了领域驱动设计(DDD)的理念,确保了每个模块代码职责的明确性,提升了整体架构的可复用性,为项目的持续演进和维护奠定了坚实基础。至2022年12月,项目顺利上线并稳定运行,凭借其卓越性能和高度可扩展的架构,赢得了广泛赞誉。如今,项目已稳定运行近两年,期间为了适应新需求和新技术,新智慧公交平台架构经历了不断演化的过程,目前已达到稳定成熟的状态。

正文

        在“互联网+”时代的大背景下,传统的公共交通行业因其业务复杂性较高和技术发展相对滞后,面临着转型升级的挑战。为了帮助公交行业适应新时代的变革,提升用户的公共交通体验,我们推出了新一代智慧公交平台。该平台以物联网技术为核心,互联网为接入门户,整合了小程序、云原生、大数据分析等前沿技术手段。2022年3月,我有幸参与公司新智慧公交平台项目的研发,担任系统架构师,负责整体架构的设计与评审。项目预计总投资3000万元,预计开发周期为9个月。我们旨在构建一个支持多元化生态的公交行业应用平台,利用新技术推动传统公交行业走向城市信息化的发展之路。

        在参与智慧公交平台架构设计的过程中,我们面临了人员流失等挑战,导致公司缺少具备公交行业全局视野的领域专家。鉴于此,我们的架构设计主要参照了现有平台的架构框架。由于缺乏对公交业务新需求的深入设计和建模,我们在设计过程中不得不对架构进行了多次的演化过程,以确保其能够适应不断变化的需求。在架构的演化过程中,我们确立了一系列关键的架构演化原则,其中包括:

  1. 主体维持原则:软件演化的增量增长应保持稳定,确保软件系统的主要功能和行为的稳定性。
  2. 平滑演化原则:在整个软件生命周期中,保持软件演化的速率稳定,避免剧烈变动。
  3. 模块独立演化原则:软件的各个模块应能够独立演化,模块内的修改不应影响整体架构的稳定性。
  4. 适应新技术原则:软件架构应独立于特定技术,具备良好的可扩展性,实现技术与业务的分离,确保引入新技术不会对整体业务流程造成不利影响。

        这些原则指导我们在架构设计和演化过程中,保持系统的灵活性和稳定性,以适应不断变化的市场和技术环境。

        在新的系统架构设计中,我们优先考虑保持原有系统的架构设计,以确保公交平台整体架构的稳定性。通过运用再工程技术,我们对老系统的架构设计、关键流程、接口设计等方面进行了详尽梳理。采用面向对象的分析和开发方法,我们利用UML图将这些信息整理成软件体系结构规格说明书、需求概要说明书、设备交互协议解析参考文档等,为后续的设计与开发工作奠定了坚实的基础。在此基础上,我们通过架构和接口的复用策略,在新系统的架构和需求设计中大量借鉴了老系统的设计理念和元素,确保了新系统与老系统在设计上的高度一致性。遵循主体维持老系统架构的演化原则,我们有效减少了新系统上线后可能出现的兼容性问题,如外部接口不匹配、数据迁移困难等,从而保障了系统的平稳过渡和持续运行。

        为了实现新系统架构的平稳演进,我们采取了持续的版本迭代策略。我们主要使用Git作为版本控制工具,并实施了大版本用于新增需求,小版本用于需求修改和错误修复的方针。结合敏捷开发理念,我们以较短的开发周期来满足用户和产品经理关注的需求点。每次版本更新时,我们控制新增需求不超过20项,以减少架构变动,遵循平滑演化的原则。通过精确的版本控制手段,我们有效管理了每次升级可能引发的运维问题。即便遇到意外错误,我们也能通过版本回滚迅速将生产环境恢复至前一稳定状态,从而提升了系统的容错能力。由于每次架构变动较小,用户能够轻松掌握系统升级的具体内容,这增强了系统的易用性。得益于这种平滑演化的策略,我们的系统始终保持稳定运行,赢得了用户的高度满意。

        在整体架构设计上,我们采纳了模块化的开发理念,并结合了DDD(领域驱动设计)模型。具体来看,我们的架构分为以下几个核心模块:

  • Adapter模块:负责封装接口,以满足前端交互需求。
  • Service模块:承担数据组装和领域模型的调用,实现具体的业务逻辑。
  • Domain模块:封装了领域模型,并通过数据交互层获取所需数据支持。
  • Client模块:提供外部调用的API接口,以便其他服务与之交互。
  • Wrapper模块:负责封装调用其他模块API接口的逻辑。

        这种架构设计有效地解耦了各个模块间的依赖关系,实现了业务逻辑与技术的分离。因此,在后续的项目维护中,我们可以遵循模块独立的演化原则,根据需要单独更新或优化各个模块。得益于这种解耦设计,我们的系统架构具备了更好的灵活性,能够轻松适应新技术的融入,为未来的技术升级和功能扩展打下了坚实的基础。

        自2022年12月项目正式上线以来,系统运行稳定,这得益于我们对版本控制的严格实施,以及在架构设计中贯彻模块化理念和DDD(领域驱动设计)模型。在整个架构演化过程中,我们始终遵循架构演化原则,确保了项目的优异性能和高可扩展性,赢得了广泛赞誉。如今,项目已顺利运行近两年。在这期间,为了适应新的业务需求和技术挑战,平台架构经历了持续的优化和演化,目前已达到成熟稳定的状态。通过参与此次架构设计和开发,我深刻理解了遵循架构演化原则的重要性,并在实践中深入掌握了架构演化的18个原则。这次宝贵的经验为我的未来工作奠定了坚实的基础。

http://www.lryc.cn/news/450348.html

相关文章:

  • 【go入门】常量
  • 2.1 HuggingFists系统架构(二)
  • 工具类:JWT
  • 王道-计网
  • 【机器学习(十)】时间序列案例之月销量预测分析—Holt-Winters算法—Sentosa_DSML社区版
  • Webpack优化问题
  • yjs10——pandas的基础操作
  • Squaretest单元测试辅助工具使用
  • MFU简介
  • 十分钟实现内网连接,配置frp
  • 解决MySQL命令行中出现乱码问题
  • TS系列(7):知识点汇总
  • Unity 查看Inspectors组件时严重掉帧
  • golang学习笔记23-面向对象(五):多态与断言【重要】
  • RabbitMQ基础知识
  • 基于Python大数据的音乐推荐及数据分析可视化系统
  • 安达发|太阳能设备行业APS计划排程软件能解决哪些问题
  • CaChe的基本原理
  • 数据结构-栈(理解版)
  • NAND Flash虚拟层初始化
  • zabbix7.0监控linux主机案例详解
  • 2024重生之回溯数据结构与算法系列学习(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
  • django drf 过滤器
  • 蓝桥杯—STM32G431RBT6(RTC时钟获取时间和日期)
  • DriveVLM 论文学习
  • Unity3D 客户端多开
  • 使用代理IP数据采集都需要注意那些?
  • 城市大脑:智慧城市的神经中枢——典型实践与经验启示
  • 嵌入式中CW32多功能测试笔实现
  • Python 时间占位符:毫秒的使用