网络安全学习平台系统设计方案

项目总体架构

本项目为网络安全学习平台的搭建,采用微服务架构模式,主要用go语言编写,配合前端三件套加上MYSQL数据库,Redis缓存,Kafka构建消息队列,Elastic Search做用户检索,gRPC做内网服务调用,Node做前端鉴权和统一API接口。项目总体结构如下:

网络安全学习平台系统设计方案

 

运行环境和技术选型说明:

前端:HTML,CSS,JavaScript

后端:Golang

数据库:MySQL8

缓存: Redis

消息队列: Kafka

搜索: Elastic Search

IDE: VS Code

服务器: 阿里云ECS学生服务器

 

依赖视图:

以评论系统为例,下图中显示了具体的业务流程

网络安全学习平台系统设计方案

分解视图:

将项目的各个子业务拆分成微服务,并设置BFF聚合层,用来对业务逻辑的进一步封装,而底层微服务更具平台通用性,具体业务逻辑如下:

网络安全学习平台系统设计方案

部署视图:

本项目采用阿里云服务器,并采用docker进行容器部署

网络安全学习平台系统设计方案

 

执行视图:

网络安全学习平台系统设计方案

 

 

人员分配:

网络安全学习平台系统设计方案

 

 

 实现视图:源代码目录结构

 网络安全学习平台系统设计方案

 

  • /api   API协议定义目录,包括protobuf文件以及生成的go文件
  • /config   配置文件模板或默认配置
  • /test    额外的外部应用测试程序和测试数据
  • /cmd   本项目的主干
    • /interface  对外的BFF服务层,接受来自用户的请求,暴露HTTP/gRPC接口
    • /service   对内的微服务,仅接受来自内部其他服务以及网关的请求
    • /admin  区别于service,为面向管理员的服务
    • /job  流式任务处理的服务
  • /internal    避免同业务下跨目录引用内部struct
    • /biz   业务逻辑的组装层,类似DDD的domain层,repo接口在这里定义,使用依赖倒置原则
    • /data  业务数据访问层,包含cache,DB等封装,实现了biz的repo接口
    • /service  实现了api定义的服务层,类似DDD的application层,处理DTO到biz实体的转换
    • /pkg   服务内部所依赖的第三方包

    

 

 

数据库设计:

 用户表:                  

网络安全学习平台系统设计方案

 

文章表:

网络安全学习平台系统设计方案

 

评论表

网络安全学习平台系统设计方案

 

系统概念原型的核心工作机制:

 普通用户

  • 进行注册和登录
  • 查看题目列表
  • 选择题目作答
  • 查看题目的题解
  • 对进行评论
  • 发布自己的题解

  

  管理员

  • 添加或删除题目
  • 修改题目的答案
  • 对评论进行管理
  • 对用户进行管理

 

总结

本项目结合最新的工程架构思想,如DDD领域驱动设计,微服务架构,并采用业界比较成熟的中间件,如MySQL,Redis等,进行了一次架构层面的尝试,还考虑了高并发时的情况,可以说,至少在架构层面,本项目具备一定的优势。

 

上一篇:Maxwell “Couldn‘t find database mysql“问题排查


下一篇:Mapper XML的写法 [Mybatis]