乐趣区

关于后端:某人事系统架构搭建设计记录

首发博客地址

https://blog.zysicyj.top/

先大抵列一下根底状况

  • 架构必须是微服务
  • 场景上波及大量查问操作,剖析操作
  • 并发并不高
  • 对高可用要求较高,不能挂掉
  • 对平安要求高
  • 要能过等保测试等三方测试
  • 应用人数并不多,十万内
  • 波及很多在线编辑,预览等操作
  • 对大屏展现有需要
  • 数据库还不确定,如果要求高的话 mysql 必须换成达梦
  • 中间件也不确定,要求高的话必须换成西方通
  • 加密必须是国密

前言

好的代码,必定最根本的有一套开发标准去束缚的,不然堆砌的代码必定成”屎山“。扩展性,性能啥的先不谈,单单保护代码老本就会很高,也很容易出 BUG。

所以呀,咱们必须先有一套开发标准,我这里拟了一套标准供外部应用:

  1. MySQL 开发标准
  2. 后盾开发标准
  3. [前端开发标准]()
  4. [代码提交标准]()
  5. {% pdf /static/pdf/Java 开发手册(黄山版).pdf %}

架构

这里微服务框架我举荐间接应用 Spring Cloud Alibaba 体系组件,起因如下:

  1. spring cloud alibaba 曾经是国内实际上微服务规范
  2. 服务于阿里团体大大小小各种业务,生产应用稳固
  3. 社区宏大,遇到问题容易解决
  4. 文档齐全,中文文档具体,不便查阅
  5. 与 Spring Cloud 集成,能够充沛应用 Spring Cloud 个性
  6. 组件丰盛

聊聊组件选型

那么,具体咱们须要哪些组件呢?这里的组件并不是必须的,须要后续综合思考

  1. ES:数据检索
  2. redis:缓存
  3. jetcache:多级缓存
  4. MySQL,如果有国产化需要,思考 达梦 数据库
  5. Druid:数据源治理框架
  6. ShardingSquare:对数据库进行加强,比方 分库分表,加密 的反对
  7. minio:文件存储
  8. Seata:分布式事务
  9. Spring Cloud Gateway: 因为并发量并不大,所有咱们能够不须要 Nginx 网关
  10. Sentinel: 熔断限流
  11. Spring Cloud Alibaba Sidecar:我的项目中很有可能波及其余非 Spring Cloud 利用,此时就须要将其接入 Spring Cloud
  12. 引入GraalVM
    ,能够看到,比照 JVM 启动速度晋升
  13. jimureport+easyexcel:报表设计
  14. KkFileView:在线预览各种文件
  15. Activity:工作流反对
  16. Hutool:最全工具类库
  17. Nacos:服务注册和配置核心
  18. RocketMQ:音讯队列,削峰填谷
  19. Docker:应用 Docker 进行容器化部署
  20. Gitlab:源码治理
  21. nexus:构建仓库
  22. Jenkins:部署平台
  23. SkyWalking:链路追踪
  24. SaToken 或 SpringCloudSecurity+Oauth:受权
  25. Leaf:分布式 ID 生成器
  26. MybatisFlex:orm 框架
  27. dubbo 或 Feign:服务间通信

一些细节

再次申明一点,业务上是读多写少,剖析报表多,所以很多设计上要优化

  • MySQL:读写拆散,分库分表
  • Redis:主从从架构,哨兵集群
  • 我的项目应用多级缓存
  • 数据国密加密
  • 账号最小权限调配,严格限度超级管理员账号
  • 对立线程池应用

打任务量导入导出

  • 通过优化线程池提高效率
  • 通过逻辑过滤反复工作
  • 应用音讯队列削峰
  • 应用缓存优化查问速度

查问流程

  1. 客户端发送申请
  2. 前端申请加密
  3. 申请发送到网关
  4. 网关校验申请合法性
  5. 网关依据路由规定转发到具体的服务器上解决
  6. 服务器解密申请数据
  7. 查问本地缓存
  8. 若无则查问 Redis
  9. 若无则进行业务流转,最终查问 MySQL,
  10. 依据路由规定,查问只读 MySQL 节点并返回数据
  11. 数据本地缓存,而后 Redis 缓存
  12. 返回响应数据
  13. 对响应加密,转发到网关
  14. 网关转发给客户端
  15. 客户端解密,展现数据

部署流程

开发环境

  1. 开发提交代码
  2. 基于 Gitlab CI/CD 主动拉取代码生成 Docker 镜像并提供服务

测试环境

  1. 合并代码到测试分支
  2. 基于 Gitlab CI/CD 主动拉取代码生成 Docker 镜像并提供服务

生产环境

  1. 合并代码到生产分支
  2. 基于 Gitlab,手动用 Jenkins 部署我的项目

具体部署策略

如果中台能提供,那必定是最好的。。。不必思考那么多了

具体还要依据业务和理论状况来,这里以 5 台服务器为例:

很多组件都很吃内存。。

服务 A B C D E
Redis
Mysql
Nacos
Seata
Leaf
业务 业务 业务
ES
Zookeeper
Minio
KkFile
Gateway
RocketMq
SkyWalking
Jenkins
Gitlab
Nexus
Docker

本文由 mdnice 多平台公布

退出移动版