总控详细设计说明书.md
引言
1.1 编写目的
本文档的编写目的是详细阐述总控系统的软件架构、数据结构、接口设计、以及具体模块的实现细节。它旨在为项目开发团队提供清晰、详尽的设计细节,确保编码工作能够按照既定的设计方案高效执行,并为后期的维护和升级提供文档支持。
同时,此文档也是向项目利益相关者传达如何从技术层面满足业务需求的桥梁。此外,若项目规模较为简单或层次不多,本文档中的详细设计内容可以与概要设计说明书合并编写,以避免不必要的重复和冗余。
1.2 背景
A. 待开发软件系统名称:石犀总控系统。
B. 系统基本概念:石犀总控系统是一种企业级的流量集中管理和控制软件,并用于监控和管理计算资源、网络、存储。系统设计为 on-premise 部署模型,可能会成为 Iaas 服务模型,为终端用户提供一个简洁的操作界面和强大的后台引擎,实现资源的高效分配和自动化管理。
C. 开发项目组名称:石犀研发组。
1.3 参考资料
- 《云原生安全:攻防实践与体系构建》 刘文懋
1.4 术语定义及说明
总控系统 (StoneRhino Control System): 该系统是本项目开发的核心软件组件,它负责统筹管理各种引擎和插件的操作,确保系统整体运行的效率和安全性。
流量引擎 (Traffic Engine): 流量引擎主要负责网络流量的路由和转发。它处理入站和出站的数据流量,根据预定义的规则和策略,确保数据包正确快速地达到目的地。
边车引擎 (Sidecar Engine): 边车引擎负责在微服务架构中收集链路追踪信息。它通常作为每个服务实例的附属部分运行,提供对网络通信的透明监控和控制,以及故障排除和性能分析的能力。
路由引擎 (Routing Engine): 路由引擎提供软件路由器功能,它决定数据包的最优路径,处理网络地址转换和流量管理。它允许在不同网络和子网间进行高效的数据传输。
插件 (Plugin): 插件是一种软件组件,设计为在不需要修改主体程序代码的情况下增加新的功能。它们在总控系统中扮演重要角色,使得系统可以通过添加插件来扩展新的功能或提升现有功能的性能。
授权 (Authorization): 授权是指在系统中实施的一种安全机制,它确保只有被授权的个体可以执行特定操作或访问特定资源。在总控系统中,授权过程是验证用户或系统是否具备执行某个请求操作的权限的过程。
2 设计概述
2.1 任务和目标
本详细设计说明书的主要任务是确保总控系统的设计符合项目的业务需求和性能指标,同时满足系统的扩展性、可维护性和安全性需求。设计的最终目标是提供一个详细的系统实现蓝图,包括数据结构、模块构造、接口设计以及数据流和控制流等方面的设计细节。
2.1.1 需求概述
所开发的总控系统旨在提供一个高效、安全且可靠的网络流量控制和服务监控解决方案。主要业务需求包括但不限于:
- 网络流量的智能路由和负载均衡
- 微服务架构中的服务发现与链路追踪
- 系统级别的性能监控与日志管理
- 高度可配置的授权与安全机制
系统性能需求包括:
- 高吞吐量和低延迟的数据处理能力
- 稳定的服务响应时间,即使在负载峰值时也要保持性能
- 高可用性和故障转移能力
2.1.2 运行环境概述
总控系统将支持跨平台部署,运行环境需求如下:
- 操作系统: 支持主流操作系统 Ubuntu 等
系统配置要求将根据性能测试结果进一步定义。
2.1.3 条件与限制
系统设计受到以下条件和限制的约束:
- 必须遵守相关的数据保护和隐私法规
- 系统的扩展性和可维护性不应受限于特定的硬件或平台
- 性能优化不得牺牲系统的安全性和稳定性
- 系统必须能够快速适应不断变化的业务需求
- 项目进度上必须符合预定的里程碑和交付日期
2.1.4 详细设计方法和工具
详细设计将采用面向对象的设计方法,并利用UML(统一建模语言)进行数据建模和流程描述。选用的CASE(计算机辅助软件工程)工具包括但不限于Visual Paradigm,以支持各种UML图表的创建,如类图、序列图和活动图等。数据流程图和业务流程图将使用BPMN(业务流程模型和符号)标准进行描述。所有设计工作将严格遵循业界标准和最佳实践。
设计团队将使用版本控制系统 Git 来管理源代码,确保设计开发过程的协同和追溯性。此外,设计阶段还将采用静态代码分析和持续集成工具,以提高代码质量和设计实现的一致性。
graph TD
subgraph 总控系统逻辑架构图
A[客户端] --访问/控制--> B[总控]
B --> C[流量引擎/API网关]
M[用户] --请求流量--> C[流量引擎/API网关]
B --> P[路由引擎]
B --> Q[边车引擎]
B --> D[插件]
B --> E[可视化模块]
C --> F[高可用集群]
E --> I[引擎/插件流量数据可观测性]
F --> E
subgraph 高可用服务集群
F --> J[应用服务1]
F --> N[应用服务2]
F --> O[应用服务3]
end
J -->|返回|M
end
subgraph 可视化平台
I --> K[数据分析和报告]
D --> L[其他服务接口]
end
classDef default fill:#f9f,stroke:#333,stroke-width:4px;
classDef engine fill:#ccf,stroke:#f66,stroke-width:2px,stroke-dasharray: 5, 5;
classDef cluster fill:#ffc,stroke:#333,stroke-width:2px;
classDef module fill:#cfc,stroke:#333,stroke-width:2px;
classDef database fill:#cfc,stroke:#333,stroke-width:2px;
classDef services fill:#ff9,stroke:#333,stroke-width:2px;
classDef visualization fill:#fa9,stroke:#333,stroke-width:2px;
class A,B default;
class C,D engine;
class F cluster;
class E module;
class J,K,L,N,O services;
class I visualization;
style J stroke:#333,stroke-width:2px,stroke-dasharray: 3, 3
style N stroke:#333,stroke-width:2px,stroke-dasharray: 3, 3
style O stroke:#333,stroke-width:2px,stroke-dasharray: 3, 3
---
title: 总控逻辑架构图
---
graph LR
subgraph 总控
direction TB
subgraph 用户接口层
direction TB
DataSV[数据可视]
APIAsset[API可视]
SysInfo[系统信息]
SEInfo[引擎信息]
ObjectInfo[对象信息]
UserInfo[用户信息]
end
subgraph 业务层
direction LR
API[API]
subgraph SCDashboard[SC]
Auth[授权管理]
User[用户管理]
Object[对象管理]
System[系统管理]
SVClient[可视化]
subgraph 引擎管理
SEInstallerClient[引擎安装]
服务搭建
end
end
subgraph SVServer[SV]
数据可视
API可视
业务可视
插件可视
end
subgraph Install-Manage
SEInstall[流量引擎安装]
SidecarSE[边车引擎在线、离线安装]
路由引擎安装
引擎节点管理
end
end
subgraph 数据层
Redis[(Redis)]
SCEtcd[(Etcd)]
NSQ([NSQ])
MySQL[(MySQL)]
MongoDB[(MongoDB)]
FS(((FS)))
end
end
subgraph 引擎
subgraph SEAppLayer[业务层]
direction TB
subgraph SE-M_cluster
subgraph SE-M
Webserver
adminDam
adminHA
adminKA
semGRL[global-rate-limit]
kube-ApiServer
semInstallAgent[Install-Agent]
semNexus[Nexus]
end
end
subgraph SE-S_cluster
subgraph SE-S
dataHA:::Yellow
dataKA
sesInstallAgent[Install-Agent]
sesNexus[Nexus]
end
end
subgraph SE-W_cluster
subgraph SE-W
sewWorkDam[workDam]
dataWorker
Polycube
Envoy
sewGRL[global-rate-limit]
sewInstallAgent[Install-Agent]
sewNexus[Nexus]
end
end
end
subgraph SEDataLayer[数据层]
SEEtcd[(ETCD)]
SEFS(((FS)))
end
end
服务搭建 --> Webserver
API <====> SCDashboard
API <====> 用户接口层
SVClient -.-> SVServer
SEInstallerClient -.-> Install-Manage
Install-Manage <--> semInstallAgent & sesInstallAgent & sewInstallAgent
Envoy --> sewWorkDam --> 数据可视
业务可视 --> Envoy
linkStyle 1,2 stroke:blue,stroke-width:8px,color:black;
linkStyle 5,6,7 stroke:red,stroke-width:8px,color:black;
style SEDataLayer fill:#FFEBB5
classDef Yellow fill:#f96
3 系统详细需求分析
主要对系统级的需求进行分析。首先应对需求分析提出的企业需求进一步确认,并对由于情况变化而带来的需求变化进行较为详细的分析。
3.1 详细需求分析
包括:
详细功能需求分析
详细性能需求分析
详细资源需求分析
详细系统运行环境及限制条件分析
3.2 详细系统运行环境及限制条件分析接口需求分析
包括:
系统接口需求分析
现有硬、软件资源接口需求分析
引进硬、软件资源接口需求分析
4 总体方案确认
着重解决系统总体结构确认及界面划分问题。
4.1 系统总体结构确认
对系统组成、逻辑结构及层次进行确认,对应用系统、支撑系统及各自实现的功能进行确认,细化集成设计及系统工作流程,特别要注意因软件的引进造成的系统本身结构和公司其他系统的结构变化。包括:
●系统组成、逻辑结构及层次确认
●应用系统结构确认
●支撑系统结构确认
●系统集成确认
●系统工作流程确认
4.2 系统详细界面划分
4.2.1 应用系统与支撑系统的详细界面划分
应用系统与支撑系统之间的界面包括系统主服务器与其他服务器的服务范围及访问方式,网络及数据库对应用系统的支撑方式,全局数据的管理与存取方式等。
4.2.2 系统内部详细界面划分
系统各功能之间的界面包括覆盖范围,模块间功能调用涉及到的系统模块及方法,全局数据格式,系统性能要求等。
5 系统详细设计
5.1 系统结构设计及子系统划分
对系统的组成及逻辑结构进行设计前确认。
划分系统功能模块或子系统(如果有或者有必要,特别是大型的软件系统)。
5.2 系统功能模块详细设计
按结构化设计方法,在系统功能逐层分解的基础上,对系统各功能模块或子系统进行设计。此为详细设计的主要部分之一。
用层次图描述系统的总体结构、功能分解及各个模块之间的相互调用关系和信息交互,用IPO图或其他方法描述各模块完成的功能。 以上建议采用HIPO图进行功能分解与模块描述,更高的要求建议采用IDEF0方法进行功能模型设计。
详细设计应用系统的各个构成模块完成的功能及其相互之间的关系,用IPO或结构图描述各模块的组成结构、算法、模块间的接口关系,以及需求、功能和模块三者之间的交叉参照关系。
每个模块的描述说明可参照以下格式:
模块编号:
模块名称:
输入:
处理:
算法描述:
输出:
其中处理和算法描述部分主要采用伪码或具体的程序语言完成。
对详细设计更高的要求建议用IDEF0图进行各功能模块的设计。
如果对软件需进行二次开发(包括功能扩展、功能改造、用户界面改造等),则相应的设计工作应该设立子课题完成。
5.3 系统界面详细设计
系统界面说明应用系统软件的各种接口。整个系统的其他接口(如系统硬件接口、通讯接口等)在相应的部分说明。
5.3.1 外部界面设计
根据系统界面划分进行系统外部界面设计,对系统的所有外部接口(包括功能和数据接口)进行设计。
5.3.2 内部界面设计
设计系统内部各功能模块间的调用关系和数据接口。
5.3.3 用户界面设计
规定人机界面的内容、界面风格、调用方式等,包括所谓的表单设计、报表设计和用户需要的打印输出等设计。此部分内容可能比较多。
6 数据库系统设计
此数据库设计可单独成册,尤其对大型的数据库应用系统,即有一个单独的《数据库设计说明书》。
6.1 设计要求
6.2 信息模型设计
确定系统信息的类型(实体或视图),确定系统信息实体的属性、关键字及实体之间的联系,详细描述数据库和结构设计,数据元素及属性定义,数据关系模式,数据约束和限制。
6.3 数据库设计
6.3.1 设计依据
说明数据被访问的频度和流量,最大数据存储量,数据增长量,存储时间等数据库设计依据。
6.3.2 数据库选型
6.3.3 数据库种类及特点
说明系统内应用的数据库种类、各自的特点、数量及如何实现互联,数据如何传递。
6.3.4 数据库逻辑结构
说明数据库概念模式向逻辑模式转换所采用的方法论及工具,完成数据库概念模式向逻辑模式的转换。详细列出所使用的数据结构中每个数据项、记录和文件的标识、定义、长度及它们之间的相互关系。此节内容为数据库设计的主要部分。
6.3.5 物理结构设计
列出所使用的数据结构中每个数据项的存储要求、访问方法、存取单位和存取物理关系等。建立系统程序员视图,包括:
●数据在内存中的安排,包括对索引区、缓冲区的设计;
●所使用的外存设备及外存空间的组织,包括索引区、数据块的组织与划分;
●访问数据的方式方法。
6.3.6 数据库安全
说明数据的共享方式,如何保证数据的安全性及保密性。
6.3.7 数据字典
编写详细的数据字典。 对数据库设计中涉及到的各种项目,如数据项、记录、系、文卷模式、子模式等一般要建立起数据字典,以说明它们的标识符、同义名及有关信息。
7 信息编码设计
7.1 代码结构设计
确认信息分类编码总体方案,进行分类代码结构设计。
7.2 代码编写
按代码结构编写信息代码