
| 拟 制 | 某某某 | 日 期 | 2018年10月20日 |
| 审 核 | 日 期 | ||
| 批 准 | 日 期 |
| 修改日期 | 版本/状态 | 作者 | 修改章节 | 修改描述 |
| 2017-10-17 | V1.0 | 某某某 | 初版V1.0发布 | |
1. 系统结构的定义
本体系对整个软件系统按如下结构方式进行划分:系统 子系统 模块 子模块
其中:
(1)“系统 子系统”划分属于“系统设计”,在系统设计说明书中予以描述。
(2)“子系统 模块”划分属于“概要设计”,在本说明书中予以描述。
(3)“模块 子模块”划分属于“详细设计”,在详细设计说明书中予以描述。如果系统相对简单,可以省略“子模块”这一层次。
2. 如果填写了系统设计说明书,则在本说明书中略过“系统 子系统”划分的相关内容(即第2章)。
3. 如果系统相对简单,不需要做“系统 子系统”划分,这种情况下,取消填写系统设计说明书,只须填写本说明书,直接套用“子系统 模块”划分(即第3章)进行“系统 模块”划分(把其中“子系统”一词替换为“系统”),并删除本说明书中“系统 子系统”划分的相关内容(第2章)。
1.简介
1.1.背景和目的
本文档编制的目的是说明对软件系统的设计考虑,包括软件系统的基本处理流程,软件系统的组织结构、模块划分、功能分配、接口设计、运行设计、数据结构设计和出错处理设计等,为软件的详细设计奠定基础。
1.2.范围
本文档适用于消息推送项目二期产品的服务端。
1.3.术语和缩略语
| 缩略语 | 英文全名 | 中文解释 |
| XMPP | The Extensible Messaging and Presence Protocol | 可扩展通讯和表示协议 |
2.
2.系统总体设计
{ 裁剪说明:如果已编写系统设计说明书,或项目不做“系统 子系统”划分,此章省略;否则内部的各节必须按要求填写。}
{“系统 ──> 子系统”划分。}
{ 目的:1)设计系统整体框架:系统最高层次的逻辑结构、物理结构;
2)子系统的划分与依赖关系定义、子系统之间的接口定义、子系统功能定义。}
2.1.任务概述
2.1.1. 目标
实现目标和功能。
2.1.2. 需求概述
参考“软件需求规格说明书_V1.0.doc”。
2.2.设计概述
2.2.1. 总体约束
2.2.2. 系统外部接口
2.2.3.设计方案概述
建立一套即时通讯&消息推送的解决方案:
1)云端运用spring+mina+jgroups建立一个分布式的服务端系统,以XMPP协议提供接口;
2)终端运用smack建立一个XMPP协议的客户端,调用协议接口实现消息接收和终端展示。
2.3.系统架构设计
2.3.1. 系统的逻辑架构设计
2.3.1.1.单IDC服务器架构图
分六层结构:负载均衡层、接入层、逻辑处理层、数据访问层、数据层、WEB层。
1)负载均衡层:TV终端通过域名访问云端,DNS智能解析终端的IP地址让它连接就近的分发服务器,从分发服务器获取接入服务器列表,然后断开XMPP连接;
2)接入层:TV终端和接入服务器建立XMPP长连接,创建会话;
3)逻辑处理层:终端协议服务器、推送服务器(RS)、统计服务器。
a)终端协议服务器:终端往接入服务器发送协议包,接入服务器转发给终端协议服务器处理;
b)推送服务器:负责从MQ取出消息、解析消息(条件体和消息体)、终端在线和离线查询、按各接入服务器有哪些终端登录把消息包分发给接入服务器;
c)统计服务器:运用quartz执行定时任务,实现终端每天在线数、终端每小时在线数、终端每天激活数、终端登录次数、消息推送结果等统计功能。
4)数据访问层:提供数据访问组件,如Mysql JDBC接口、jedis缓存接口。提供第三方推送接口,供第三方云端调用的API,提供单点推送(明消息/暗消息)、条件(区域+机型)推送、regid推送。
5)数据层: Mongodb集群,Mysql数据库(主从+读写分离),ActiveMQ消息队列,Redis缓存服务器。
6)WEB层:运营平台、第三方推送平台。
2.3.1.2.多IDC服务器架构图
需要整理
2.3.2. 系统的物理架构设计
2.4. 子系统定义
2.4.1. 子系统列表
| 子系统编号 | 子系统名称(标识) | 功能描述 | 开发方式 |
| 1 | 运营平台子系统 | 由超级管理员和运营人员使用,提供第三方管理、基础数据、消息管理、运维、统计、系统设置、日志查询等功能。 | 自行开发 |
| 2 | 第三方推送接口子系统 | 供第三方云端调用的API,提供单点推送(明消息/暗消息)、条件(区域+机型)推送、regid推送。 | 自行开发 |
| 3 | 第三方推送平台子系统 | 给第三方使用,提供开发者账号注册、应用管理、消息发布、消息推送结果查询等功能。 | 自行开发 |
| 4 | 推送服务器子系统 | 云端的一个逻辑服务器,实现从MQ取出消息、解析消息(条件体和消息体)、终端在线和离线查询、按各接入服务器有哪些终端登录把消息包分发给接入服务器。 | 自行开发 |
| 5 | 后台任务子系统 | 云端的后台任务系统,运用quartz执行定时任务,实现终端每天在线数、终端每小时在线数、终端每天激活数、终端登录次数、消息推送结果等统计功能。 | 自行开发 |
| 6 | 云端与终端接口:分发服务器、接入服务器、终端协议服务器 | 为消息盒子终端提供云端接口,用XMPP协议。提供获取接入服务器列表、电视终端获取唯一标识userid、以userid登录认证、建立会话及长连接、推送消息、反馈消息接收和点击情况、终端应用激活上报等协议。 | 自行开发 |
| 7 | 云端集群 | 在云端用JGroups技术组建一个集群,管理各逻辑服务器,实现各成员之间的通讯、成员状态反馈、成员列表维护等功能。 | 自行开发 |
2.4.2. 子系统间关系
{ 裁剪说明:必填 }
{ 明确子系统之间的调用关系、子系统间的接口(消息、数据结构)以及相关子系统之间的协同工作,可以使用结构图、(交互)事务图、消息序列图、ER图描述。}
1
2
3
3.1
3.2
3.3
3.4
3.5
3.6
3.6.1
3.6.2
3.6.3
3.子系统1设计
{ 裁剪说明:必填 }
{ 标题上加入子系统的编号及名称(标识)}
{“子系统 ──> 模块”划分。}
{ 目的:1)设计子系统整体框架:子系统的逻辑结构;
2)模块的划分与依赖关系定义、模块之间的接口定义、模块功能定义。}
3.
3.1.任务概述
3.1.1. 目标
{ 裁剪说明:可选 }
{ 说明设计意图目标(总目标、分期目标)、作用范围等。}
3.1.2. 需求概述
{ 裁剪说明:可选 }
{ 解释软件产品将完成或不完成的功能(可以直接描述也可以参考相关文档)}
3.2.设计概述
3.2.1. 总体约束
3.2.1.1.开发规范
{ 裁剪说明:可选。如果已填写在2.2.1.1,此处则略。}
(1)编码约定
{ 规定代码体系、模块之间的接口和命名规则。}
(2)文件约定
{ 规定子系统的所有配置、日志等文件命名方式与格式。}
(3)目录约定
{ 规定子系统的目录结构,包括运行目录、源文件目录、配置目录、日志目录、数据目录等。}
3.2.1.2.XX约束
{ 裁剪说明:可选。如果已填写在2.2.2.2,此处则略。}
{ 列出对软件设计有重要影响的系统内外部约束和,可选的约束包括:
• 用户环境
• 内存或其它资源
• 数据存储和分发需求
• 安全和可靠性需求
• 性能需求
• 测试和可维护性需求 }
3.2.2. 子系统外部接口
{ 裁剪说明:如果第2章已删除,这里必填(如果有)。}
{ 描述该软件子系统与外部实体的接口,包括用户界面、软件接口、硬件接口和通信接口。}
{ 软件子系统的外部实体,包括:操作系统、驱动程序、硬件、中断、其它软件子系统等。}
{ 描述待开发软件子系统与外部实体的关系,可以使用系统架构图、顶层数据流图、事务图等来描述系统结构和交互关系,并标示出外部实体和本系统相互作用的性质(比如:消息、库调用)和类型(比如:OS服务、通信服务、系统工具等)。}
{ 详细描述子系统外部接口的参数,如:
• 接口名称
• 调用方式
• 传输的数据:
–哪些数据项?
–数据格式?
–长度?
–类型?
• 频度(实时/批处理)
• 数据同步机制
• 平台无关性
• 遵循的标准
• 提供的功能
• 前置条件
• 后置条件 }
3.2.3.设计方案概述
{ 裁剪说明:必填。如果在“3.1设计概述”中已描述过的部分,可略。}
{ 描述内容包括:
(1)整个设计所采用的方法:面向对象设计还是结构化设计
(2)采用的系统架构:例如MVC架构、N层架构
(3)使用的相应技术和工具:例如OMT、Rose、Visio
(4)采用的框架技术的形式
(5)使用的设计模式:层模式、微内核模式、代理模式等
(6)描述资源/内存分配,Flash资源/文件分配
(7)描述哪些模块采用软件复用
}
3.3.子系统架构设计
{ 裁剪说明:必填 }
{ 定义子系统的总体逻辑结构,定义模块划分以及模块之间的依赖关系。}
{ 可以采用分层结构描述如何将子系统分解为模块。}
{ 结构描述可以使用结构图、层次分解图、数据流图,并用文字说明相互间的关系。}
{ 举例,绘制结构图如下:
具有继承等关系的类图的可使用UML等工具画出关系图,如下:
}
3.4.模块定义
3.1.
3.2.
3.3.
3.4.
3.4.1.模块列表
{ 裁剪说明:必填 }
{ 列举模块时,可以采用表格方式(编号可以省略)。}
| 模块编号 | 模块名称(标识) | 功能简述 | 开发方式 |
3.4.2. 模块间关系
{ 裁剪说明:必填 }
{ 明确模块之间的调用关系、模块间的接口(消息、数据结构)以及相关模块之间的协同工作,如模块间时序图,协作图,以及系统之间状态切换流程图。}
3.4.3. 模块描述
3.4.3.1.模块1
{ 标题上加入模块的编号及名称(标识)}
1)功能描述
{ 裁剪说明:必填 }
{ 说明该模块具备什么样的基本功能,以及每个功能之间的相互关系。}
2)性能描述
{ 裁剪说明:必填 }
{ 说明对模块的性能要求,包括精度、时间特性和处理速度。}
3)接口描述
{ 裁剪说明:必填 }
{ 说明与其它模块的接口,与其它系统或硬件的接口。}
{ 对于接口函数,可以采用以下形式描述:
接口1:
形式:
输入:
输出:
返回:描述返回什么。
描述:总体描述该接口实现的目的。}
{ 需要明确的信息包括:
(1)输入项
列出模块每一个输入项的特性,包括名称、标识、数据的类型和格式、数据值的有效范围、输入方式、数量和频度、输入介质等;
可以是逻辑层面的输入项,如:图片资源、媒体流、网络数据等,也可以是具体的物理层面的输入项,如变量1、变量2,等等。
(2)输出项
列出模块每一个输出项的特性,包括名称、标识、数据的类型和格式,数据值的有效范围、输出方式、数量和频度、输出介质等。}
4)配置描述
{ 裁剪说明:可选 }
{ 说明该模块所处的逻辑位置、物理位置,如指明模块放在哪个应用服务器或客户端的哪个目录、哪个文件(库),或是在数据库内部建立的对象。}
3.4.3.2.模块2
{ 同3.3.3.1。}
4.非功能性需求的实现方案
{ 裁剪说明:整章可选 }
6.1.性能的考虑
{ 如:为满足延时、吞吐量等性能,在既定硬件环境约束下所采取的设计方案。}
6.2.兼容性的考虑
{ 对以前版本的兼容,以及平滑升级的考虑。}
6.3.安全的考虑
{ 如:作为应用软件,在安全方面更多的是考虑访问控制,包括使用什么样的权限管理、分配、验证方案。}
6.4.可移植性的考虑
{ 系统如果有跨平台的需求,要考虑操作系统、中间件、应用服务器特性、数据库及第三方服务移植。描述如何在不同的平台移植,是否为可配置的? }
6.5.集成与测试的考虑
{ 各个子系统以及模块以什么先后次序进行开发、集成(组装)和测试,即是采用自底向上法还是自顶向下法。}
6.6.可扩展性的考虑
{ 不仅有对系统功能扩展的设计考虑,还要考虑系统的性能扩展,即可伸缩性。即考虑:
(1)如何最低成本地添加新的功能?
(2)如何最低成本的复制一个新系统,并且新旧系统可以做成统一体?}
6.7.可靠性的考虑
{ 对故障检测、故障隔离、故障恢复、容错、冗余、备份的设计考虑。}
6.8.可维护性的考虑
{ 内容应涉及:
(1)系统模块是否可以装配?功能模块是否可以配置?整个系统是否已经参数化?
(2)提供什么样的维护方式、接口及介面?
描述为了系统维护而在系统设计中作出的安排,包括在程序中专门安排用于系统的检查与维护的检测点和专用模块,如打印信息的打印规则设计(含打印的形式,关闭和打开打印调试信息的方法等)。
(3)有哪些日常维护需求,并且如何处理?}
5.难点及解决方案
{ 裁剪说明:可选 }
{ 列出可能的疑难问题,并尽可能能给出基本解决思路(包括关键算法、时序、数据结构等)。可采用表格方式。}
| 难点描述 | 可采取的解决方案 |
{ 裁剪说明:可选 }
{ 列举编写软件产品概要设计报告时所用到的项目中的其他文档或资料。}
7.附录
{ 裁剪说明:可选 }
{ 在此列出需要补充的相关文档和技术问题。}
