CFC-PPCS
项目流程协作系统
1. 项目参考
开源项目
Pear Project - 梨子项目管理系统 | 轻量级的在线项目/任务协作系统 (vilson.xyz) (本家主站)
Pear Project (vilson.xyz) (功能体验) 官方账号: 18681140825 密码: 123456
a54552239/pearProjectApi: 后端代码 (github.com) (后端源码为php)
a54552239/pearProject: 前端代码 (github.com) (前端源码为Vue2)
2. 服务端架构
go语言实现,采用原生gRPC微服务架构,api层采用Gin框架,ORM层采用Gorm框架,etcd作为注册中心,MinIO作为对象存储,数据库采用MySQL与非关系型数据库Redis,MySQL采用 ProxySQL + MGR 的高可用集群(业务无感知,代码无侵入)。在后续迭代升级中,可进一步采用nacos作为配置中心,引入Jaeger分布式链路追踪与ELK日志采集模块。
3. 项目结构
3.0 go workspace
便于不同模块本地开发相互引用
3.1 api
处理前端发来的http请求,通过etcd发现服务进行grpc调用服务
project-api
├── api
│ ├── api.go 匿名导入其他模块api的依赖
│ ├── middle Gin中间件目录
│ │ └── middleware.go
│ └── user 按模块将api分组
│ ├── route.go 注册路由,构建路由树
│ ├── rpc.go 初始化rpc客户端
│ └── user.go api方法实现
├── config
│ ├── config.go 初始化、读取配置
│ └── config.yaml 配置文件
├── go.mod
├── go.sum
├── main.go 启动方法
├── pkg
│ └── model 数据传输模型(dto)
│ ├── page.go 格式化分页配置
│ └── user 按模块分类
│ └── user.go 用户模块传输模型
└── router
└── router.go 路由注册方法
3.2 common
通用工具模块
3.3 grpc
protoc 生成的pb文件
3.4 mico service
包含具体业务逻辑的服务模块,内部代码结构参考
CFC Studio Golang开发规范 项目结构核心部分示例 (kirov7.github.io)
.
├── api 暂时存放proto文件
│ └── proto
│ ├── gen 暂时存放proto编译后文件
│ ├── gen.bat 编译脚本(仅仅为了方便,下同)
│ ├── gen.sh
│ └── loginService.proto proto文件,定义grpc服务方法与数据
├── config
│ ├── config.go
│ └── config.yaml
├── go.mod
├── go.sum
├── internal 数据模型与数据操作,对外不可见
│ ├── dao 数据访问层,实现repo的接口对数据表进行操作
│ │ ├── member.go 封装对于member表的数据操作的实现
│ │ ├── organization.go
│ │ ├── redis.go 封装redis操作,实现repo.cache的接口
│ │ └── trans.go 实现自定义的事务操作接口,封装事务的操作框架
│ ├── data 数据库映射结构体与部分模型转换方法
│ │ ├── member 按数据表划分
│ │ │ └── member.go member表与结构体的映射
│ │ └── organization
│ │ └── organization.go organization表与结构体的映射
│ ├── database 封装数据库连接
│ │ ├── conn.go 数据库连接的抽象接口
│ │ ├── gorms
│ │ │ └── gorm.go gorm实现的数据库连接接口
│ │ └── transaction 事务操作的接口
│ │ └── transaction.go
│ ├── domain 领域层,封装领域的行为操作
│ │ ├── member.go
│ │ └── organization.go
│ ├── interceptor grpc拦截器
│ └── repo 封装数据查询的接口
│ ├── cache.go 缓存操作的接口
│ ├── member.go 抽象对member数据表的操作
│ └── organization.go
├── main.go 启动方法,执行各种初始化操作
├── pkg 服务具体实现与所依赖的常量与全局变量
│ ├── model 常量与全局变量
│ │ ├── biz.go 业务逻辑中用到的常量/枚举值
│ │ ├── code.go 封装的错误代码
│ │ └── redisKey.go Redis Key的前缀
│ └── service grpc方法的实现
│ └── login.service.v1 调用domian整理组合数据实现业务需求
│ └── loginService.go
└── router
└── router.go grpc与etcd注册与路由
3.4.1 user
用户、组织等
3.4.2 project
项目、任务等
4. 项目组件与通用模块介绍
4.1 etcd
作用:用作服务注册,与服务发现
4.2 MinIO
作用:本地部署的对象存储OSS,用在项目附件等需求文件存储的地方
4.3 Redis
作用:部分用户信息存储(缓存token)、验证码存储、缓存优化等
可视化工具:
4.4 ProxySQL + MGR
作用:
-
MGR:MySQL Group Replication(Mysql组复制),基于paxos算法的强一致性的高可用、高拓展、高可靠MySQL集群方案
-
ProxySQL:灵活强大的MySQL代理层,通过伪装成MySQL服务端,代理执行SQL语句,并负责读写分离、节点探活、故障无感知转移等
理论上在ProxySQL外层还需加一层keepalived配置VIP,资源有限,暂且忽略
5. 其他内容
5.1 开发规范
参考我整理的规范
Kirov7/cfc-golang-develop-norms: CFC Studio 内部Golang开发规范 (github.com)
5.2 准备环境
服务端所需的中间件环境以在203的内网服务器中部署完成,可放心使用
5.3 代码托管平台
代码托管平台放在实验室私有仓库 gitea 上