项目总体架构
本项目为网络安全学习平台的搭建,采用微服务架构模式,主要用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等,进行了一次架构层面的尝试,还考虑了高并发时的情况,可以说,至少在架构层面,本项目具备一定的优势。