【系统架构设计师-论文】软件风格方向

论软件架构风格在新媒体平台系统的实践

摘要

2021年12月,我所在的团队承接了某大学的媒体中心委托的《新媒体平台》的开发,我在项目中担任系统架构师,主要完成技术方案评估与实现,项目立项论证等工作。该系统以文章阅览功能为核心,分为文章搜索模块、用户评论模块、文章审核模块、用户管理模块、社团管理模块等。本文结合作者的实践,以《新媒体平台》为例,采用SpringCloud微服务架构,讨论了软件架构风格在该项目中的具体应用。整个系统采用调用返回风格中的层次结构架构风格,并基于MVC结构进行扩展,将系统分为表示层、负载均衡层、控制层、持久层。表示层负责和用户进行交互,将系统数据呈现给用户;负载均衡层负责提升系统的容灾能力;控制层对发来的请求做出响应;持久层负责数据存储和数据处理。最终项目顺利上线并稳定运行,获得用户一致好评。

正文

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

软件架构风格是描述某一特定应用领域中系统组织方式的惯用模式。常用的软件架构风格有数据流风格,调用/返回风格,独立构件风格,虚拟机风格,仓库风格。数据流风格包括批处理序列风格与管道-过滤器风格,其每一步处理都是独立,顺序执行的, 适用于简单的线性流程。调用/返回风格包括主程序/子程序风格,数据抽象和面向对象风格,层次结构风格,其主要思想是将复杂的大系统分解为一些小系统,以便降低复杂度,增加可修改性。独立构件风格包括进程通信风格,事件驱动系统(隐式调用)风格,其特点是每个构件都是独立的个体,它们之间不直接通信,以便降低耦合度,提高灵活性。虚拟机风格包括解释器风格,基于规则的系统风格,此类架构风格具有良好灵活性。仓库风格包括数据库系统风格,超文本系统风格,黑板系统风格,其以数据为中心,善于管理数据信息,适合大量数据的应用场合,适用于复杂的逻辑系统。除此之外,还有DSSA,REST、分布式等架构风格。

本项目开发之初,架构设计阶段我就考虑到软件架构风格可以为我们项目提供架构级的通用解决方案,为解决系统所面临的安全性、可用性、可靠性、扩展性的高质量要求,我们决定采用调用返回风格中的层次结构架构风格作为我们系统的软件架构风格。我们基于MVC结构进行了扩展,将系统分为表示层、负载均衡层、控制层和持久层四个层级结构。表示层的目的是将持久层的数据以适宜的方式呈现给用户;负载均衡层用来接收来自表示层的各种请求,并转发到控制层,提高系统的容灾能力;控制层负责接收由负载均衡层转发而来的请求,通过使用持久层的数据处理对不同的请求进行响应;持久层负责数据存储和数据处理,为控制层提供服务。

首先是表示层,我们对于如何更好的令系统与用户进行交互进行了会议讨论。针对当下大学生对于app程序的安装意愿不高,校园中用户群体类型多种的情况,我们决定不再使用需要频繁更新的C/S架构进行表示层的开发,代替的是具有更高可维护性和可修改性的B/S架构,整体采用vue框架。对于作为访问者的用户,我们进行多平台用户端的开发,基于H5开发的web应用端和微信小程序客户端。考虑到院系老师可能对于智能移动端的使用没那么熟练,我们对于文章的发布管理端仅仅开发了web应用端,并使用vue+echarts对发布的文章以及相关的数据进行了可视化处理。对于系统管理端,我们开发出web应用端后使用了zabbix进行系统的状态监控和报警,为系统管理员提供了可视化呈现,更好的和系统进行交互。

其次是负载均衡层,我们是基于MVC结构进行开发,考虑到大学校园中有24个院系和88个社团,我们系统将会有超过3万的庞大用户量,为了提高系统的可伸缩性、可用性和性能,我们在原有的MVC结构上增加了一层负载均衡层用来解决这个问题,在开发过程中,我们将Nginx作为反向代理服务器,接收用户的请求后根据预定义的负载均衡算法将请求均匀地分发到后端的多个应用服务器上,以实现请求的负载均衡;使用LVS技术根据相应的负载均衡算法决定请求的分发策略,从而实现网络层面的负载均衡。考虑到使用的服务器皆为主频2.5Hz的四核处理器,我们配置了由1台前端负载均衡处理器、3台应用服务器和1台数据库服务器组成的服务器集群,将nginx作为反向代理服务器采用IP哈希算法实现请求的负载均衡,LVS作为网络负载均衡设备使用加权轮询算法实现网络层面的负载均衡,有效提高了系统的性能、可伸缩性和可用性。

然后是控制层,负责接收用户的请求并做出相应的响应,处理用户输入请求,调用适当的持久层进行数据处理和业务逻辑操作,并将处理结果传递给视图层进行展示。为了提高系统的整体性能,我们在这一层使用了Redis分布式缓存技术,将持久层中可能频繁访问的数据添加到缓存中,减少调用持久层的次数,以此来减少对后端数据库的查询压力,提高响应速度。该系统为用户提供了订阅内容推送功能,当用户对收藏订阅内容进行更改的时候,系统要将该变更同步到用户的其他设备上以保持用户的推送一致性。我们采用Redis分布式缓存技术的写入同步方案解决了该问题,当变更发生时,后端将变更写入数据库,并将变更记录到一个消息队列中,逐步更新缓存,减少数据库的压力。

最后是持久层,持久层负责对数据的存储和处理。我们采用MySQL进行数据存储,并使用Mybatis框架进行数据处理。通过定义数据访问接口和对应的SQL映射文件,实现与数据库的交互操作。上文使用了Redis进行了系统的性能的提升,但我们项目小组认为还可以有进一步的提升,因此我们在这一层加入了kafka中间件,实现了持久层和控制器层之间的进一步解耦和异步处理。kafka通过消息队列实现模块间的解耦和通信,提供高可靠性、可扩展性和容错能力的消息传递机制,提高系统的并发处理能力,并支持实时性要求较高的场景。

结尾

在架构决策阶段,我所选择的这种架构得到了团队和校领导的认可和采纳,2022年6月,NMS系统正式上线,至今已稳定运行,获得了全校师生的一致好评。系统平稳经历了访问量激增、大量活动上线、紧急应用接入等复杂运维状况,系统所采用的层次结构架构风格在分离关注点、提高扩展性、可测试性和可复用性等方面都发挥了重要的作用,获得了领导和同事的好评。但是在系统运行过程中,我也发现了这种架构存在的一些不足。首先,由于层级只能和相邻的层级之间进行消息通信,每一层都要进行数据的处理和传送,增加了系统的性能开销;其次,在将系统分层后,系统的整体结构之间的交互行为也相对固定,当需求变更时,需要对多个层级进行修改,可修改性相对较低。层次结构架构风格所具有的优点和面临的问题将是我今后在同类系统的架构决策方面需要重点考虑因素。

你可能感兴趣的:(软考,系统架构设计师)