论基于架构的软件开发方法在新媒体平台系统的实践

摘要

2021年12月,我所在的团队承接了某大学的媒体中心委托的《新媒体平台》的开发,我在项目中担任系统架构师,主要完成技术方案评估与实现,项目立项论证等工作。该系统以文章阅览功能为核心,分为文章搜索模块、用户评论模块、文章审核模块、用户管理模块、社团管理模块等。本文结合作者的实践,以《新媒体平台》为例,采用SpringCloud微服务架构,讨论基于架构的软件设计方法在项目中的具体应用,架构需求获取、架构需求设计和架构需求实现三个阶段。在架构需求获取阶段通过问卷调查和用户访谈等方式全面获取需求;在架构设计阶段使用了UML4+1视图进行建模设计;在架构实现阶段对系统构件进行获取、开发和组装。最终项目顺利上线并稳定运行,获得用户一致好评。

正文

随着移动信息化技术的迅猛发展,自媒体平台日益增多,各种平台之间的切换十分繁琐,每次都要在不同的平台发布同一内容,不利于媒体中心实时发布信息和全校师生阅览且不便于管理,而校官网又不便于发布日常文章。为了解决这一问题,校媒体中心制定了校园专属媒体平台战略,根据这一战略要求,新媒体平台(以下简称为“NMS”系统)应运而生,将全校院系社团的动态集中于该系统上,降低了全校师生对文章内容的检索难度,使师生可以快速准确地了解学校的最新动态。NMS系统以文章阅览功能为核心,分为文章搜索模块、用户评论模块、文章审核模块、用户管理模块等。文章搜索模块主要负责为用户提供检索文章的接口;用户评论模块负责对于各个文章中不同用户的评论内容的管理;文章审核模块允许管理员对申请发布的文章内容合法性进行审核;用户管理模块负责对以注册的用户信息进行管理;社团管理模块提供各院系社团管理自己发布内容的功能。2021年12月,我有幸参与了项目前期的一些工作,担任系统架构设计师的职务,主要负责设计平台系统架构和安全体系架构。

基于架构的软件设计方法(ABSD)包括架构需求、架构设计、架构文档化、架构复审、架构实现和架构演化六个阶段。架构需求阶段明确用户对系统在功能、行为、性能、设计约束等方面的期望,包括需求获取、标识构件和架构评审;架构设计阶段根据需求生成并调整架构决策,包括提出架构模型、上映射构件、分析构件相互作用、产生架构和评审;架构文档化阶段对架构设计分析与整理,产生架构规格说明书和架构质量说明书;架构复审阶段评价架构能和否满足需求与实现质量属性层次构件划分是下合理,标识潜在的风险,及早发现设计中的缺陷错姓;架构实现阶段对架构进行实现,包括架构分析与设计、构件实现、组装和系统测试;架构演化阶段主要解决开发中用户需求变更问题,包括架构演化计划、构件变动、更新构件相互作用、构件组装测试与技术评审。

在架构需求获取阶段遇到的主要问题是NMS平台需要为全校师生进行服务,这就需要有效、快速地全面获取需求。在需求的前期阶段,我们采用了用户面对面访谈和线上问卷调查的方式,把需求调研团队分成了几组,分别进行需求收集。通在与各个院系、社团的负责人面对面访谈,我们对NMS的主要业务功能、用户角色有了整体、全面的了解。并且在线上向全校师生发布问卷调查的来获取需求,经统计,我们了解了NMS在与用户交互时的更多细节。在需求获取的中期阶段,我们分析了市面上多种社交媒体平台,了解了系统在具体使用时的基本操作逻辑。

随后我们召开小组会议对需求进行了整理和优先级判定,用户对系统的性能抱有较高的要求,希望不要像教务系统一样在接受到大量访问的时候便出现卡顿崩溃的现象;其次是用户希望对于自身的隐私有较好的保障;最后用户希望在使用过程中操作流畅,性能要好。

在架构设计阶段我们要有效合理地设计和描述软件架构,对于系统我们首先要实现用户可以在不同场景下应用;其次系统应该具有文章推送、文章订阅、文章评论、文章发布以及系统管理等多项基础功能;最后为确保盈利,系统应该支持第三方商家的广告推广功能。经过我们讨论分析,决定采用层级结构架构风格开发,使用MVC模型将系统分为表示层、负载均衡层、控制层和持久层。表示层用于前端和用户进行交互;负载均衡层对请求进行处理和转发;控制层为请求做出相应;持久层负责数据存储和处理。对于用户们最关心的系统可用性方面,我们将采用容器化技术来实现,设置多个从节点,一旦主节点发生故障,立刻选举从节点成为新的主节点,同时将容器调度到新的主节点上,防止系统崩溃;建立完善的日志记录和监控系统保证系统的安全性;采用负载均衡技术提高系统的性能,增加可扩展性。

在架构实现阶段我们着重聚焦于系统构件的实现和组装。在NMS系统中使用Nginx作为前端服务器处理静态资源的请求并使用IP哈希算法将请求转发给后端的多个实例,并在每个服务实例中嵌入ribbon库使用轮询算法对其内部实现负载均衡,确保在高并发应用场景下的系统仍具有较好的性能。Spring Cloud Gateway作为API网关入口在后端服务器负责路由请求到相应的后端服务。使用zabbix对系统进行实时监控,记录关键事件、用户活动和系统行为。定期检查日志和监控数据,及时发现异常行为和安全事件,并采取相应的措施进行调查和应对,保证系统的安全性。我们还对系统使用了docker容器技术进一步提高系统的高并发和高可用性,将每一个后端服务打包部署在独立的容器中实现良好的伸缩性;配置编排工具对容器进行健康检查,实现对故障容器实例的停止和重启功能,确保高可用性和稳定性;将数据存储在外部持久化存储卷中,防止由于容器实例故障破坏数据的完整性。

在架构决策阶段,我所选择的这种架构得到了集团领导的认可和采纳,2022年6月,新媒体平台系统正式上线运行,至今已稳定运行。系统平稳经历了访问量激增、大量活动上线、紧急应用接入等复杂运维状况,系统所采用的基于架构的软件开发方法在软件开发的初期团队便可以进行讨论写作,确保了团退队开发目标拥有共同的理解,并且可以更早的考虑到系统的可维护性和可扩展性,有效的提高了软件开发效率,降低了风险管理的成本,获得了领导和同事的好评。但是在系统运行过程中,我也发现了这种架构存在的一些不足。因为过早的确定了系统的整体架构风格,因此在中期出现了小幅的需求变更的时候我们有在是否进行架构风格的更改问题上进行了多次的讨论,由于设计变更的难度增加,对项目的开发进度有了一定的负面影响。基于架构的软件开发方法所具有的优点和面临的问题将是我今后在同类系统的架构决策方面需要重点考虑因素。