某人事系统架构搭建设计记录

首发博客地址

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张图片

聊聊组件选型

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

  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启动速度提升 某人事系统架构搭建设计记录_第2张图片
  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 多平台发布

你可能感兴趣的:(后端)