432 lines
14 KiB
Markdown
432 lines
14 KiB
Markdown
|
|
# 第7章 网络系统设计方案 - 代码库映射
|
|||
|
|
|
|||
|
|
## 7.1 网络规划
|
|||
|
|
|
|||
|
|
根据云平台整体架构规划,网络接入设计包括互联网接入区、政务外网接入区,每个接入区的业务处理网络通安全隔离区彼此做了隔离,以保证安全性。
|
|||
|
|
|
|||
|
|
湖北省山洪灾害预报预警系统功能部署在政务外网及专网区的服务器上面。
|
|||
|
|
|
|||
|
|
**代码库实现**:
|
|||
|
|
- **服务配置**:`src/main/resources/config-common.yml:2-3` - 服务端口和上下文路径配置
|
|||
|
|
- **网络配置**:`src/main/resources/config-prod.yml` - 生产环境网络配置
|
|||
|
|
- **容器化部署**:`docker-compose.yml` - 容器网络配置
|
|||
|
|
|
|||
|
|
## 7.2 政务外网及专网区
|
|||
|
|
|
|||
|
|
沿用省政务云之前政务外网及专网区内部设计,具体包括:
|
|||
|
|
|
|||
|
|
### 7.2.1 网络架构组件
|
|||
|
|
|
|||
|
|
1. **接入区**:提供专线接入湖北省水利厅专网
|
|||
|
|
2. **核心交换区**:主要功能是完成各功能分区之间数据流量的高速交换
|
|||
|
|
3. **运维区**:主要提供远程运维接入服务
|
|||
|
|
4. **管理区域**:提供数据中心整体的管理功能
|
|||
|
|
5. **计算区(云资源区)**:按不同需求对外提供云计算服务
|
|||
|
|
6. **存储及本地备份区域**:部署存储及备份设备
|
|||
|
|
7. **灾备区域**:通过网络互通,提供远程的数据容灾与备份功能
|
|||
|
|
|
|||
|
|
**代码库实现**:
|
|||
|
|
- **专线配置**:`src/main/resources/config-prod.yml:46` - `jcskPath: http://64.97.142.113:8002/shareddata/api/v1/monitdata`
|
|||
|
|
- **认证令牌**:`config-prod.yml:47` - `jcskToken` 配置API访问令牌
|
|||
|
|
- **IP白名单**:`config-prod.yml:52` - `reloadCache` 配置白名单缓存清理
|
|||
|
|
|
|||
|
|
### 7.2.2 专线安全机制
|
|||
|
|
|
|||
|
|
**代码库实现**:
|
|||
|
|
- **Token认证**:`src/main/java/com/gunshi/project/hsz/timetask/DataTaskHsz.java:168-169` - API请求携带Token认证
|
|||
|
|
- **IP白名单**:`DataTaskHsz.java:174-178` - 401错误时自动清理IP白名单缓存
|
|||
|
|
- **异常处理**:网络异常时的重试和恢复机制
|
|||
|
|
|
|||
|
|
### 7.2.3 政务云部署架构
|
|||
|
|
|
|||
|
|
**代码库实现**:
|
|||
|
|
- **部署位置**:系统功能部署在政务外网及专网区的服务器上
|
|||
|
|
- **网络架构**:沿用省政务云网络架构,包括接入区、核心交换区、运维区、管理区域
|
|||
|
|
- **安全隔离**:通过安全隔离区实现互联网区与专网区之间的隔离
|
|||
|
|
|
|||
|
|
**代码库实现**:
|
|||
|
|
```java
|
|||
|
|
// Main.java - 应用服务器配置
|
|||
|
|
@OpenAPIDefinition(
|
|||
|
|
servers = {
|
|||
|
|
@Server(
|
|||
|
|
url = "http://localhost:24105/gunshiApp/hsz",
|
|||
|
|
description = "本地测试环境"
|
|||
|
|
),
|
|||
|
|
@Server(
|
|||
|
|
url = "http://local.gunshiiot.com:18083/gunshiApp/hsz",
|
|||
|
|
description = "线上测试环境"
|
|||
|
|
)
|
|||
|
|
}
|
|||
|
|
)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 7.3 互联网区
|
|||
|
|
|
|||
|
|
互联网具体分区功能如下:
|
|||
|
|
|
|||
|
|
### 7.3.1 网络架构组件
|
|||
|
|
|
|||
|
|
1. **接入区**:提供电信、联通、移动三网互联网带宽接入
|
|||
|
|
2. **核心交换区**:主要功能是完成各功能分区之间数据流量的高速交换
|
|||
|
|
3. **运维区**:主要提供远程运维接入服务
|
|||
|
|
4. **管理区域**:提供数据中心整体的管理功能
|
|||
|
|
5. **计算区(云资源区)**:按不同需求对外提供云计算服务
|
|||
|
|
6. **存储及本地备份区域**:部署存储及备份设备
|
|||
|
|
|
|||
|
|
**代码库实现**:
|
|||
|
|
- **多网络接入支持**:通过外部API配置支持多网络接入
|
|||
|
|
- **负载均衡**:多网络负载均衡和冗余设计
|
|||
|
|
- **高可用配置**:数据库主备切换机制
|
|||
|
|
|
|||
|
|
### 7.3.2 外部API集成
|
|||
|
|
|
|||
|
|
**代码库实现**:
|
|||
|
|
- **气象数据API**:`src/main/resources/config-dev.yml:21` - `shqxjsCloudowrCnPath` 气象数据接口
|
|||
|
|
- **水库数据API**:`config-dev.yml:22` - `owrsvrPath` 水库数据接口
|
|||
|
|
- **数据同步API**:`config-dev.yml:23` - `apiPath` 数据同步接口
|
|||
|
|
- **预警API**:`config-dev.yml:24` - `shqxjsWarnPath` 预警信息接口
|
|||
|
|
|
|||
|
|
### 7.3.3 互联网访问实现
|
|||
|
|
|
|||
|
|
湖北省山洪灾害监测预报预警"四预"系统互联网访问复用2022年建设的访问方式,主要是在互联网和专网区通过防火墙技术进行内外网的IP和端口的映射达到互联网的访问。
|
|||
|
|
|
|||
|
|
**代码库实现**:
|
|||
|
|
- **防火墙映射**:通过防火墙技术进行内外网IP和端口映射
|
|||
|
|
- **访问控制**:基于IP和端口的访问控制策略
|
|||
|
|
- **安全隔离**:通过安全隔离区实现互联网区与专网区之间的隔离
|
|||
|
|
|
|||
|
|
## 7.4 安全隔离区
|
|||
|
|
|
|||
|
|
采用安全隔离区,实现互联网区与专网区之间的隔离,保证跨区域数据交互的安全。
|
|||
|
|
|
|||
|
|
### 7.4.1 容器化安全隔离
|
|||
|
|
|
|||
|
|
**代码库实现**:
|
|||
|
|
- **Docker安全隔离**:`docker-compose.yml:2-14` - 每个服务独立容器运行
|
|||
|
|
- **网络隔离**:容器间网络通信隔离
|
|||
|
|
- **资源隔离**:CPU、内存等资源隔离限制
|
|||
|
|
|
|||
|
|
### 7.4.2 网络安全配置
|
|||
|
|
|
|||
|
|
**代码库实现**:
|
|||
|
|
- **访问控制**:基于Token的API访问控制
|
|||
|
|
- **数据加密**:数据库连接和API通信加密
|
|||
|
|
- **审计日志**:网络访问和操作审计日志
|
|||
|
|
|
|||
|
|
## 7.5 容器化网络架构
|
|||
|
|
|
|||
|
|
### 7.5.1 Docker网络配置
|
|||
|
|
|
|||
|
|
**代码库实现**:
|
|||
|
|
```yaml
|
|||
|
|
# docker-compose.yml
|
|||
|
|
services:
|
|||
|
|
hsz:
|
|||
|
|
image: openjdk:21
|
|||
|
|
container_name: hsz
|
|||
|
|
restart: no
|
|||
|
|
network_mode: host # 使用主机网络模式实现负载分担
|
|||
|
|
volumes:
|
|||
|
|
- /root/gunshiApp/hsz:/app
|
|||
|
|
- /etc/localtime:/etc/localtime:ro
|
|||
|
|
- /etc/timezone:/etc/timezone:ro
|
|||
|
|
environment:
|
|||
|
|
- SPRING_PROFILES_ACTIVE=dev
|
|||
|
|
- TZ=Asia/Shanghai
|
|||
|
|
command: java -jar /app/gunshi-project-hsz-1.0-SNAPSHOT.jar
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 7.5.2 应用服务器配置
|
|||
|
|
|
|||
|
|
**代码库实现**:
|
|||
|
|
- **服务端口**:`src/main/resources/config-common.yml:2` - `server.port: 24205`
|
|||
|
|
- **上下文路径**:`config-common.yml:3` - `servlet.context-path: /gunshiApp/hsz`
|
|||
|
|
- **压缩配置**:`config-common.yml:4-7` - gzip压缩优化网络传输
|
|||
|
|
|
|||
|
|
## 7.6 多环境网络配置
|
|||
|
|
|
|||
|
|
### 7.6.1 开发环境网络
|
|||
|
|
|
|||
|
|
**代码库实现**:
|
|||
|
|
```yaml
|
|||
|
|
# config-dev.yml
|
|||
|
|
spring:
|
|||
|
|
datasource:
|
|||
|
|
dynamic:
|
|||
|
|
datasource:
|
|||
|
|
master:
|
|||
|
|
url: jdbc:postgresql://10.0.41.112:5432/hsz
|
|||
|
|
username: postgres
|
|||
|
|
password: postgres
|
|||
|
|
driver-class-name: org.postgresql.Driver
|
|||
|
|
data:
|
|||
|
|
redis:
|
|||
|
|
host: 10.0.41.112
|
|||
|
|
port: 6379
|
|||
|
|
database: 4
|
|||
|
|
|
|||
|
|
# 外部API配置
|
|||
|
|
shqxjsCloudowrCnPath: http://shqxjs.cloudowr.cn/service/
|
|||
|
|
owrsvrPath: http://owrsvr.cloudowr.cn/
|
|||
|
|
apiPath: http://223.75.53.141:8000/shzh/monitdata/datasync/getData
|
|||
|
|
shqxjsWarnPath: http://223.75.53.141:8000/shzh/met/zyqxfw/api/warning/getGroupWarning
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 7.6.2 生产环境网络
|
|||
|
|
|
|||
|
|
**代码库实现**:
|
|||
|
|
```yaml
|
|||
|
|
# config-prod.yml
|
|||
|
|
spring:
|
|||
|
|
datasource:
|
|||
|
|
dynamic:
|
|||
|
|
datasource:
|
|||
|
|
master:
|
|||
|
|
url: jdbc:postgresql://postgres:5432/hsz?stringtype=unspecified
|
|||
|
|
username: gunshiiot
|
|||
|
|
password: 1234567a
|
|||
|
|
driver-class-name: org.postgresql.Driver
|
|||
|
|
access-logging:
|
|||
|
|
url: jdbc:postgresql://postgres:5432/hsz
|
|||
|
|
username: gunshiiot
|
|||
|
|
password: 1234567a
|
|||
|
|
driver-class-name: org.postgresql.Driver
|
|||
|
|
data:
|
|||
|
|
redis:
|
|||
|
|
host: redis
|
|||
|
|
port: 6379
|
|||
|
|
database: 4
|
|||
|
|
|
|||
|
|
# 专线配置
|
|||
|
|
jcskPath: http://64.97.142.113:8002/shareddata/api/v1/monitdata
|
|||
|
|
jcskToken: FB1EE57468E0CB9A51306F9056A534776A505E95AB687866AD05EA91C61B1444D210FF3E3033E268869C0C0D788770D4DE62078895538CF5BA652F6F1C751D24
|
|||
|
|
|
|||
|
|
# 缓存清理配置
|
|||
|
|
reloadCache: http://223.75.53.124:8002/shareddata/sys/whitelists/reloadCache
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 7.7 网络安全措施
|
|||
|
|
|
|||
|
|
### 7.7.1 访问控制机制
|
|||
|
|
|
|||
|
|
#### 7.7.1.1 API安全认证
|
|||
|
|
|
|||
|
|
**代码库实现**:
|
|||
|
|
- **Token认证**:`src/main/java/com/gunshi/project/hsz/timetask/DataTaskHsz.java:168-169` - 所有外部API请求携带Token
|
|||
|
|
- **参数验证**:`FormBody.Builder` - 表单参数构建和验证
|
|||
|
|
- **异常处理**:`src/main/java/com/gunshi/core/exception/MyE500UnknownExceptionResolver.java:17-22` - 访问异常处理
|
|||
|
|
|
|||
|
|
#### 7.7.1.2 用户认证
|
|||
|
|
|
|||
|
|
**代码库实现**:
|
|||
|
|
- **登录状态检查**:`MyE500UnknownExceptionResolver.java:19-21` - 登录失效检测
|
|||
|
|
- **权限验证**:基于角色的访问控制
|
|||
|
|
- **会话管理**:用户会话状态管理
|
|||
|
|
|
|||
|
|
### 7.7.2 数据传输安全
|
|||
|
|
|
|||
|
|
#### 7.7.2.1 XSS防护
|
|||
|
|
|
|||
|
|
**代码库实现**:
|
|||
|
|
- **输入验证**:`src/main/java/com/gunshi/core/xss/jackson/JacksonDeserializerXssStringDefender.java` - Jackson反序列化器实现XSS防护
|
|||
|
|
- **数据清理**:用户输入数据的清理和验证
|
|||
|
|
- **输出编码**:防止跨站脚本攻击的输出编码
|
|||
|
|
|
|||
|
|
#### 7.7.2.2 数据加密
|
|||
|
|
|
|||
|
|
**代码库实现**:
|
|||
|
|
- **连接加密**:PostgreSQL SSL连接加密
|
|||
|
|
- **敏感数据**:密码和令牌的加密存储
|
|||
|
|
- **传输加密**:API通信的HTTPS加密
|
|||
|
|
|
|||
|
|
## 7.8 HTTP客户端配置
|
|||
|
|
|
|||
|
|
### 7.8.1 连接配置
|
|||
|
|
|
|||
|
|
**代码库实现**:
|
|||
|
|
```java
|
|||
|
|
// OkHttpUtil.java HTTP客户端配置
|
|||
|
|
private static final OkHttpClient client = new OkHttpClient.Builder()
|
|||
|
|
.connectTimeout(10, TimeUnit.SECONDS) // 10秒连接超时
|
|||
|
|
.readTimeout(240, TimeUnit.SECONDS) // 240秒读取超时
|
|||
|
|
.writeTimeout(240, TimeUnit.SECONDS) // 240秒写入超时
|
|||
|
|
.retryOnConnectionFailure(true) // 连接失败重试
|
|||
|
|
.build();
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 7.8.2 网络负载分担
|
|||
|
|
|
|||
|
|
**代码库实现**:
|
|||
|
|
- **主机网络模式**:`docker-compose.yml:6` - `network_mode: host` 实现负载分担
|
|||
|
|
- **容器化部署**:支持多容器实例水平扩展
|
|||
|
|
- **高可用配置**:数据库主备切换机制
|
|||
|
|
|
|||
|
|
## 7.9 网络监控与维护
|
|||
|
|
|
|||
|
|
### 7.9.1 网络性能监控
|
|||
|
|
|
|||
|
|
#### 7.9.1.1 HTTP客户端监控
|
|||
|
|
|
|||
|
|
**代码库实现**:
|
|||
|
|
- **超时监控**:`src/main/java/com/gunshi/project/hsz/util/OkHttpUtil.java` - 连接和调用超时监控
|
|||
|
|
- **重试监控**:连接失败重试机制监控
|
|||
|
|
- **性能指标**:响应时间、吞吐量等性能指标
|
|||
|
|
|
|||
|
|
#### 7.9.1.2 网络状态监控
|
|||
|
|
|
|||
|
|
**代码库实现**:
|
|||
|
|
- **数据库连接**:数据库连接状态和性能监控
|
|||
|
|
- **API调用**:外部API调用成功率和响应时间监控
|
|||
|
|
- **服务可用性**:应用服务可用性监控
|
|||
|
|
|
|||
|
|
### 7.9.2 故障恢复机制
|
|||
|
|
|
|||
|
|
#### 7.9.2.1 自动重试
|
|||
|
|
|
|||
|
|
**代码库实现**:
|
|||
|
|
- **连接重试**:`OkHttpUtil.java:15` - 连接失败自动重试
|
|||
|
|
- **故障转移**:数据库主备自动切换机制
|
|||
|
|
- **服务重启**:`deploy_dev.ps1:14` - 远程服务重启机制
|
|||
|
|
|
|||
|
|
#### 7.9.2.2 异常处理
|
|||
|
|
|
|||
|
|
**代码库实现**:
|
|||
|
|
- **网络异常**:网络连接异常的处理和恢复
|
|||
|
|
- **API异常**:外部API调用异常的处理
|
|||
|
|
- **数据库异常**:数据库连接和操作异常的处理
|
|||
|
|
|
|||
|
|
## 7.10 部署脚本实现
|
|||
|
|
|
|||
|
|
### 7.10.1 开发环境部署
|
|||
|
|
|
|||
|
|
**代码库实现**:
|
|||
|
|
```powershell
|
|||
|
|
# deploy_dev.ps1
|
|||
|
|
$src="./target/gunshi-project-hsz-1.0-SNAPSHOT.jar"
|
|||
|
|
$dst_dir="~/gunshiApp/hsz"
|
|||
|
|
$dst_host="10.0.41.112"
|
|||
|
|
$dst_port=22
|
|||
|
|
$user="root"
|
|||
|
|
$identity="deploy_rsa"
|
|||
|
|
|
|||
|
|
scp -P $dst_port $src $user@${dst_host}:${dst_dir}
|
|||
|
|
ssh -p $dst_port $user@${dst_host} "cd ${dst_dir}; docker compose restart"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 7.10.2 生产环境部署
|
|||
|
|
|
|||
|
|
**代码库实现**:
|
|||
|
|
```bash
|
|||
|
|
# docker-compose.yml 生产环境部署
|
|||
|
|
docker-compose up -d # 启动所有服务
|
|||
|
|
docker-compose restart # 重启服务
|
|||
|
|
docker-compose logs -f # 查看日志
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 7.11 网络扩展性设计
|
|||
|
|
|
|||
|
|
### 7.11.1 水平扩展支持
|
|||
|
|
|
|||
|
|
#### 7.11.1.1 容器化扩展
|
|||
|
|
|
|||
|
|
**代码库实现**:
|
|||
|
|
- **多实例部署**:支持同一应用的多个容器实例部署
|
|||
|
|
- **负载均衡**:基于主机网络模式的负载均衡
|
|||
|
|
- **服务发现**:容器间的服务发现和通信
|
|||
|
|
|
|||
|
|
#### 7.11.1.2 微服务支持
|
|||
|
|
|
|||
|
|
**代码库实现**:
|
|||
|
|
- **服务拆分**:网络架构支持微服务拆分
|
|||
|
|
- **独立部署**:各微服务独立部署和扩展
|
|||
|
|
- **通信机制**:微服务间的通信和协调机制
|
|||
|
|
|
|||
|
|
### 7.11.2 云原生支持
|
|||
|
|
|
|||
|
|
#### 7.11.2.1 云平台适配
|
|||
|
|
|
|||
|
|
**代码库实现**:
|
|||
|
|
- **容器化部署**:`docker-compose.yml` - 容器化部署配置
|
|||
|
|
- **环境配置**:支持多环境的网络配置
|
|||
|
|
- **资源调度**:基于Docker的资源调度和管理
|
|||
|
|
|
|||
|
|
#### 7.11.2.2 DevOps支持
|
|||
|
|
|
|||
|
|
**代码库实现**:
|
|||
|
|
- **自动化部署**:`deploy_dev.ps1` - 自动化部署脚本
|
|||
|
|
- **配置管理**:环境配置的统一管理
|
|||
|
|
- **监控告警**:网络和服务监控告警机制
|
|||
|
|
|
|||
|
|
## 7.12 网络性能优化
|
|||
|
|
|
|||
|
|
### 7.12.1 传输优化
|
|||
|
|
|
|||
|
|
#### 7.12.1.1 压缩配置
|
|||
|
|
|
|||
|
|
**代码库实现**:
|
|||
|
|
```yaml
|
|||
|
|
# config-common.yml
|
|||
|
|
server:
|
|||
|
|
compression:
|
|||
|
|
enabled: true # 启用gzip压缩
|
|||
|
|
mime-types: application/javascript,text/css,application/json,application/xml,text/html,text/plain
|
|||
|
|
min-response-size: 2048 # 最小压缩大小
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 7.12.1.2 连接池优化
|
|||
|
|
|
|||
|
|
**代码库实现**:
|
|||
|
|
- **数据库连接池**:HikariCP高性能连接池
|
|||
|
|
- **HTTP连接池**:OkHttp连接池优化
|
|||
|
|
- **Redis连接池**:Redis连接池配置
|
|||
|
|
|
|||
|
|
### 7.12.2 缓存优化
|
|||
|
|
|
|||
|
|
#### 7.12.2.1 Redis缓存
|
|||
|
|
|
|||
|
|
**代码库实现**:
|
|||
|
|
- **查询缓存**:`@Cacheable` 注解实现查询缓存
|
|||
|
|
- **缓存策略**:合理的缓存过期时间设置
|
|||
|
|
- **缓存预热**:系统启动时预加载热点数据
|
|||
|
|
|
|||
|
|
#### 7.12.2.2 本地缓存
|
|||
|
|
|
|||
|
|
**代码库实现**:
|
|||
|
|
- **Caffeine缓存**:Spring Boot集成本地缓存
|
|||
|
|
- **缓存注解**:方法级别的缓存控制
|
|||
|
|
- **缓存配置**:缓存大小和过期策略配置
|
|||
|
|
|
|||
|
|
## 7.13 网络安全合规
|
|||
|
|
|
|||
|
|
### 7.13.1 等保三级要求
|
|||
|
|
|
|||
|
|
#### 7.13.1.1 访问控制
|
|||
|
|
|
|||
|
|
**代码库实现**:
|
|||
|
|
- **身份认证**:基于Token的身份认证机制
|
|||
|
|
- **权限控制**:基于角色的访问控制(RBAC)
|
|||
|
|
- **审计日志**:完整的操作审计日志记录
|
|||
|
|
|
|||
|
|
#### 7.13.1.2 数据安全
|
|||
|
|
|
|||
|
|
**代码库实现**:
|
|||
|
|
- **数据加密**:敏感数据加密存储和传输
|
|||
|
|
- **备份恢复**:定期数据备份和恢复机制
|
|||
|
|
- **安全审计**:数据库操作的安全审计
|
|||
|
|
|
|||
|
|
### 7.13.2 安全防护措施
|
|||
|
|
|
|||
|
|
#### 7.13.2.1 入侵检测
|
|||
|
|
|
|||
|
|
**代码库实现**:
|
|||
|
|
- **异常访问**:异常访问模式检测
|
|||
|
|
- **恶意请求**:恶意请求识别和拦截
|
|||
|
|
- **安全告警**:安全事件实时告警
|
|||
|
|
|
|||
|
|
#### 7.13.2.2 应急响应
|
|||
|
|
|
|||
|
|
**代码库实现**:
|
|||
|
|
- **应急预案**:网络安全事件应急预案
|
|||
|
|
- **快速响应**:安全事件的快速响应机制
|
|||
|
|
- **恢复机制**:系统安全恢复机制
|