ARTICLE · 1176166
论软件架构风格的选择(范文)

一个系统只能挑一种架构风格?
论软件架构风格的选择
数据中心管理系统 · 模块级风格选型
软件架构风格的选择
📦 7 Parts + Conclusion
👉 滑动
PART 01
背景与项目
数据中心统一管理
PART 02
风格全景
五大类架构风格
PART 03
四模块实战
逐模块选型
PART ///
写在最后
经验与反思
摘要
2017 年 5 月,我参加了公司「数据中心管理系统」项目的开发,并担任系统架构师职务,负责系统的架构设计。该系统旨在将公司分散在全国各地的数据中心内的设备状态与信息,通过一系列传输协议发送到服务端,服务端进行分析和处理后,反馈给设备操作指令或给管理人员发送通知信息,最终实现终端监控并管理所有设备。本文以数据中心管理系统为例,论述了软件架构风格在项目中的选择与应用。整个系统选择数据抽象和面向对象、管道/过滤器、基于规则的系统和进程通信四种架构风格组合应用完成项目,有效实现了终端统一管理所有数据中心,同时证明了良好的架构风格选择和应用,使系统的性能、可用性等指标都达到了预期目标。该项目于 2018 年 11 月完成验收后正式上线,交付至今运行稳定,得到了公司的嘉奖和用户的一致好评。
关于架构风格
良好的架构风格,是覆盖系统全程开发的一道约束
01
PART
背景与项目概述
BACKGROUND · 项目从哪来
2016 年 7 月,中国电信提出适应智能化时代、通过智能牵引转型升级的 3.0 战略,着重推进网络智能化、业务生态化、运营智慧化,构建行业领先的物联网开放平台,为客户提供强大的物联网能力应用服务,重塑客户业务流程,挖掘业务价值,降低运营成本。
公司一方面落实集团战略,另一方面也因为业务多年来的不断扩展,在全国各地逐渐建设了多个数据中心。传统的数据中心管理模式是单机的,即为每一个数据中心设计一套管理系统,安排管理人员负责状态监控、事件处理和数据上报等工作。随着数据中心的不断增多、地域分布广泛,继续使用传统的单机模式必将增加大量的人力物力开支。
如何统一管理所有设备、降低管理成本,成了公司亟待解决的问题
公司多年从事数据中心的设备生产、模块设计、设备管理以及相关软件开发,有着丰富的相关经验。经各部门领导商讨后决定,由开发部门负责开发一套数据中心管理系统。公司组建了12 人的开发团队和 3 名系统实施人员,并任命我为该项目的系统架构师,负责软件架构设计和开发工作。
系统经过仔细梳理之后,拆分为四个主要模块,并为每个模块选择合适的架构风格。
02
PART
架构风格全景
STYLE MAP · 五大类架构风格
架构风格反映了领域中众多系统所共有的结构和语义特性,良好的架构风格可以提供满足系统全程开发的一种约束,因此在架构设计之初选择合适的架构风格非常重要。本文首先介绍常见架构风格的种类和含义,并论述选择使用数据抽象和面向对象、管道/过滤器、基于规则的系统和进程通信四种架构风格实现数据中心管理系统的原因,最后讨论我在开发过程中遇到的问题、解决方案与个人感悟。
一种架构风格是一组协作的架构约束,这些约束限制了架构元素的角色和功能,以及在任何一个遵循该风格的架构中允许存在的元素之间的关系。常见软件架构风格主要有五大类,分别是数据流风格、调用/返回风格、独立构件风格、虚拟机风格以及仓库风格。
数据流风格
包括批处理序列与管道/过滤器架构风格,其每一步处理都是独立、顺序执行的,适用于简单的线性流程
调用/返回风格
包括主程序/子程序、数据抽象和面向对象、层次结构架构风格,进一步降低系统耦合度,明确系统层次
独立构件风格
包括进程通信、事件驱动架构风格,其构件特点为软件重用提供了支持
虚拟机风格
包括解释器、基于规则的系统架构风格,其具有良好灵活性,可自定义规则
仓库风格
包括数据库、黑板架构风格,其以数据为中心
✦ 落到本项目
四个模块分别选用了数据抽象和面向对象、管道/过滤器、基于规则的系统、进程通信四种架构风格,组合完成整个系统。下面逐一展开。
03
PART
设备接入模块
DATA ABSTRACTION & OO · 数据抽象和面向对象
设备接入模块的核心功能是接收网关消息,而网关设备的接入方式有多种,不同厂商、不同设备采用的接入方式都有所不同。
MQTT 接入
TCP 透传
HTTP 接入
CoAP 接入
数据抽象和面向对象架构风格满足了将设备接入操作封装为接口、把接入方式和网关消息封装为对象的要求。这种风格中的封装、交互、多态、集成、重用等特性统一了设备接入接口,并且不改变每个对象的属性,提高了设备接入的灵活性。
04
PART
消息处理模块
PIPE & FILTER · 管道/过滤器
消息处理模块将从设备接入模块输入的消息,经过顺序处理和转换后产生输出流,作为输入流传入业务层;反过来,将从业务层输入的处理结果经过顺序处理和转换后产生输出流,作为输入流传入设备接入模块。
设备接入模块
消息输入流
消息处理模块
顺序处理与转换
业务层
处理结果回传
消息双向流经管道,逐级过滤器完成转换
这正符合管道/过滤器架构风格通过改变记录方式转化数据、递增地转化数据的过程特点。
05
PART
规则模块
RULE-BASED SYSTEM · 基于规则的系统
规则模块为接收频率较高的消息和使用频率较高的操作自定义规则,以规则为正确逻辑,通过规则流自动执行反馈及相应操作。为此,模块定义了三样东西。
规则集
针对高频消息与操作
规则解释器
以规则为正确逻辑
规则/数据选择器
驱动规则流自动执行
这种风格降低了消息处理模块和业务模块的耦合度,实现了系统的高性能、高并发。
06
PART
业务模块
PROCESS COMMUNICATION · 进程通信
业务模块中,构件是独立的过程,连接件是消息传递。以下每个管理都可视为一个构件。
系统管理设备管理网络组件管理通知管理规则管理日志管理
每个构件都有自己独立的功能。例如,设备管理构件建立与设备对应的驱动器;网络组件管理创建与设备传输协议对应的网络服务器;通知管理发送反馈消息给管理人员。
同时,每个构件通过消息传递实现业务模块的功能。例如,设备管理构件中的驱动器通过发送注册消息到网络组件管理中的网络服务器,与设备建立联系;通知管理构件通过将通知消息发送到网络服务器,再转发给管理人员。进程通信架构风格同样降低了模块内构件之间的耦合度,增强了可修改性。
///
LAST
写在最后
SUMMARY · 经验与反思
从本次项目开发整体来看,良好的架构风格选择使模块间耦合度降低,提高了系统的性能、可用性和可修改性等多项指标,满足了公司的预期要求,保证了系统后期的快速二次开发和数据接入。但在开发过程中,也遇到了一些问题。
!问题 01 🕳
设备数量较多,仅使用 ID 标识设备会导致数据可视化效果较差,难以定位设备。
✦ 解决方案
采用经纬度定位与设备 ID 标识相结合的方法,使用 ECharts + VUE 获取数据,以百度地图为基底直观展示所有设备,方便快速定位。
!问题 02 🕳
大量的控制层代码与关系数据库持久层交互,使运行速率较低。
✦ 解决方案
增加 Redis 作为缓存、Elasticsearch 作为搜索引擎。虽然增加了系统的复杂性,但数据访问速率得到了极大的提高。
此次项目的顺利完成为我在项目的架构风格选择等方面积累了更多的经验,同时也暴露出自身在这方面的不足。我应当总结本次项目经验,力争在下个项目中做得更好。
我是 violetdream,热衷于分享软件架构设计师论文范文
既然看到这里了,如果觉得有用,随手点个赞、在看、转发三连吧。
THANKS FOR READING















































































