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

首发博客地址

https://blog.zysicyj.top/

先大致列一下基础情况

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

前言

好的代码,肯定最基本的有一套开发规范去约束的,不然堆砌的代码肯定成”屎山“。扩展性,性能啥的先不谈,单单维护代码成本就会很高,也很容易出BUG。

所以呀,我们必须先有一套开发规范,我这里拟了一套规范供内部使用:

  1. MySQL开发规范
  2. 后台开发规范
  3. 前端开发规范
  4. 代码提交规范

架构

这里微服务框架我推荐直接使用Spring Cloud Alibaba体系组件,原因如下:

  1. Spring Cloud Alibaba 已经是国内实际上微服务标准
  2. 服务于阿里集团大大小小各种业务,生产使用稳定
  3. 社区庞大,遇到问题容易解决
  4. 文档齐全,中文文档详细,方便查阅
  5. 与 Spring Cloud 集成,可以充分使用 Spring Cloud 特性
  6. 组件丰富
系统架构图
系统架构图

高清大图地址:https://www.processon.com/view/link/64ef11baa8c890267a8a023d

聊聊组件选型

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

  1. ES:数据检索
  2. Redis:缓存
  3. JetCache:多级缓存
  4. MySQL,如果有国产化需求,考虑 达梦数据库
  5. Druid:数据源管理框架
  6. ShardingSphere:对数据库进行增强,比如 分库分表,加密的支持
  7. Minio:文件存储
  8. Seata:分布式事务
  9. Spring Cloud Gateway:由于并发量并不大,所以我们可以不需要 Nginx网关
  10. Sentinel: 熔断限流
  11. Spring Cloud Alibaba Sidecar:项目中很有可能涉及其他非 Spring Cloud 应用,此时就需要将其接入 Spring Cloud
  12. 引入 GraalVM,可以看到,对比 JVM 启动速度提升 alt
  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. SaTokenSpring Cloud Security+Oauth:授权
  25. Leaf:分布式 ID 生成器
  26. MybatisFlex:ORM 框架
  27. DubboFeign:服务间通信

一些细节

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

  • 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 部署项目

详细部署策略

如果中台能提供,那肯定是最好的,不用考虑那么多了

现在假设有10台服务器

  1. 服务器1和服务器2:MySQL数据库服务器,部署主从复制架构。

    • 服务器1作为主数据库(Master),负责写入操作和部分读取操作。
    • 服务器2作为从数据库(Slave),负责复制主数据库的数据,并提供读取操作,实现读写分离。
    • 主从复制可以提高数据库的可用性和性能,当主数据库出现故障时,可以快速切换到从数据库。
  2. 服务器3和服务器4:Redis缓存服务器,部署主从架构。

    • 服务器3作为主节点(Master),负责处理写入和读取操作。
    • 服务器4作为从节点(Slave),复制主节点的数据,并提供读取操作。
    • Redis主从架构可以提高缓存的可用性和读取性能。
  3. 服务器5:Minio文件存储服务器,用于存储上传的文件。

    • Minio是一个开源的对象存储服务器,提供高可用性和可扩展性的存储解决方案。
  4. 服务器6和服务器7:Nacos服务注册和配置中心,用于服务的注册和配置管理。

    • Nacos提供了服务注册、发现和配置管理的功能,支持高可用和可靠的服务部署。
  5. 服务器8:RocketMQ消息队列服务器,用于削峰填谷,异步处理导入任务。

    • RocketMQ提供了高吞吐量、低延迟的消息传递能力,可以将导入任务放入消息队列中,由异步消费者进行处理。
  6. 服务器9和服务器10:用于部署应用程序和其他中间件,如Spring Cloud Gateway、Sentinel、SkyWalking等。

    • 这些服务器用于部署应用程序和其他中间件,如API网关、熔断限流、链路追踪等,提供服务的访问和监控。

将MySQL数据库和Redis缓存部署为主从架构的原因如下:

  1. 高可用性:主从复制可以提供故障容错能力,当主节点出现故障时,可以快速切换到从节点,保证服务的连续性和可用性。
  2. 读写分离:通过将读操作分发到从节点,可以减轻主节点的负载,提高数据库的读取性能。同时,从节点的复制过程对主节点的影响较小,不会对主节点的写入操作产生影响。

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/113973.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git rebase和merge区别

一、概述 merge和rebase 标题上的两个命令:merge和rebase都是用来合并分支的。 这里不解释rebase命令,以及两个命令的原理,详细解释参考这里。 下面的内容主要说的是两者在实际操作中的区别。 1.1 什么是分支 分支就是便于多人在同一项目…

基于流计算 Oceanus(Flink) CDC 做好数据集成场景

由于第一次做实时,所以踩坑比较多,见谅(测试环境用的flink),小公司没有用到hadoop组件 一、踩坑记录 1:本地代码的flink版本是flink1.15.4,生产环境是flink1.16.1,在使用侧输出流时报错,需要使用以下写法,需要使用Si…

如何为你的公司选择正确的AIGC解决方案?

如何为你的公司选择正确的AIGC解决方案? 摘要引言词汇解释(详细版本)详细介绍1. 确定需求2. 考虑技术能力3. 评估可行性4. 比较不同供应商 代码快及其注释注意事项知识总结 博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客&…

适配ADRC自抗扰控制算法的MFP450-ADRC 套件焕新而来

关注 FMT 开源自驾仪的开发者可能知道,早在 2018 年 7 月 FMT开源自驾仪的早期版本就已经实现了 ADRC 算法。 经过几年的发展,FMT 在自抗扰控制算法的适配上做了进一步的优化,为了方便科研工作者和开发者快速上手,我们针对搭载 F…

计算机毕设 基于机器学习的餐厅销量预测 -大数据 python

文章目录 0 前言餐厅销量预测模型简介2.ARIMA模型介绍2.1自回归模型AR2.2移动平均模型MA2.3自回归移动平均模型ARMA 三、模型识别四、模型检验4.1半稳性检验(1)用途(1)什么是平稳序列?(2)检验平稳性 ◆白噪声检验(纯随机性检验)(1)用途(1)什么是纯随机序列?(2)检验纯随机性 五…

9. 解谜游戏

目录 题目 Description Input Notes 思路 暴力方法 递归法 注意事项 C代码(递归法) 关于DFS 题目 Description 小张是一个密室逃脱爱好者,在密室逃脱的游戏中,你需要解开一系列谜题最终拿到出门的密码。现在小张需要打…

海面漂浮物垃圾识别检测算法

海面漂浮物垃圾识别检测算法通过yolo系列网络框架模型算法,海面漂浮物垃圾识别检测算法一旦识别到海面的漂浮物垃圾,海面漂浮物垃圾识别检测算法立即发出预警信号。目标检测架构分为两种,一种是two-stage,一种是one-stage&#xf…

IDEA全局统一设置Maven

原来每次打开新建的项目都需要经过 File-> Settings 重新配置maven,这样很不爽 然而经过 File-> New Projects Setup -> Settings for New Projects 后,再如上图配置后就全局设置好了

C语言控制语句——循环语句

什么是循环 重复执行代码 为什么需要循环 循环的实现方式 whiledo…whilefo while语句 语法格式&#xff1a; while (条件) {循环体…… }需求&#xff1a;跑步5圈 示例代码&#xff1a; #include <stdio.h>int main() {// 需求跑步5圈// 1. 条件变量的定义int i 1;…

头歌MYSQL——课后作业6 函数

第1关&#xff1a;数值函数 任务描述 本关任务&#xff1a;对表达式取整 相关知识 四舍五入的函数 ROUND(X,D) 返回X&#xff0c;其值保留到小数点后D位&#xff0c;而第D位的保留方式为四舍五入。 若D的值为0,则对小数部分四舍五入。 若将D设为负值&#xff0c;保留X值小数…

研磨设计模式day14模板方法模式

目录 场景 原有逻辑 有何问题 解决方案 解决思路 代码实现 重写示例 模板方法的优缺点 模板方法的本质 何时选用 场景 现在模拟一个场景&#xff0c;两个人要登录一个系统&#xff0c;一个是管理员一个是用户&#xff0c;这两个不同身份的登录是由后端对应的两个接…

lnmp架构-PHP

08 PHP源码编译 09 php初始化配置 nginx 的并发能力强 phpinfo函数 就是 显示php信息 10 php的功能模块 编译memcache模块 php的动态模块方式 mamcache 就是内存 直接从内存中命中 所以性能非常好 但是 这还不是最好的方式 工作流程 关键看后端的 php 什么时候处理完 mamcac…

五、多表查询-3.4连接查询-联合查询union

一、概述 二、演示 【例】将薪资低于5000的员工&#xff0c;和 年龄大于50岁的 员工全部查询出来 1、查询薪资低于5000的员工 2、查询年龄大于50岁的员工 3、将薪资低于5000的员工&#xff0c;和 年龄大于50岁的 员工全部查询出来&#xff08;把上面两部分的结果集直接合并起…

Unity碰撞检测(3D和2D)

Unity碰撞检测3D和2D 前言准备材料3D2D 代码3D使用OnCollisionEnter()进行碰撞Collider状态代码 使用OnTriggerEnter()进行碰撞Collider状态代码 2D使用OnCollisionEnter2D()进行碰撞Collider2D状态代码 使用OnTriggerEnter2D()进行碰撞Collider2D状态代码 区别3D代码OnCollisi…

力扣141. 环形链表

141. 环形链表 简单 2K 相关企业 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链…

gRPC-Gateway 快速实战

今天来分享一波 gRPC-Gateway &#xff0c; 之前咱们有分享过什么是 gRPC 及其使用方式&#xff0c;可以看看这些关于 gRPC 的历史文章&#xff1a; gRPC介绍 gRPC 客户端调用服务端需要连接池吗&#xff1f; gRPC的拦截器 gRPC的认证 分享一下 gRPC- HTTP网关 I 今天主要是分…

React面向组件编程

往期回顾&#xff1a;# React基础入门之虚拟Dom【一】 面向组件编程 react是面向组件编程的一种模式&#xff0c;它包含两种组件类型&#xff1a;函数式组件及类式组件 函数式组件 注&#xff1a;react17开始&#xff0c;函数式组件成为主流 一个基本的函数组件长这个样子 …

Meta语言模型LLaMA解读:模型的下载部署与运行代码

文章目录 llama2体验地址模型下载下载步骤准备工作什么是Git LFS下载huggingface模型 模型运行代码 llama2 Meta最新语言模型LLaMA解读&#xff0c;LLaMA是Facebook AI Research团队于2023年发布的一种语言模型&#xff0c;这是一个基础语言模型的集合。 体验地址 体验地址 …

Nacos基础(2)——nacos的服务器和命名空间 springBoot整合nacos 多个nacos配置的情况

目录 引出nacos服务器和命名空间Nacos服务器命名空间 springBoot整合nacosspringcloud Alibaba 版本与springcloud对应关系引包配置maincontroller 报错以及解决【报错】错误&#xff1a;缺少服务名称报错&#xff1a;9848端口未开放 启动测试引入多个nacos配置多个配置的情况没…

Linux土遁术之监测监测进程打开文件

分析问题过程中&#xff0c;追踪进程打开的文件可以在许多不同情况下有用&#xff0c;体现在以下几个方面&#xff1a; 故障排除和调试&#xff1a; 当程序出现问题、崩溃或异常行为时&#xff0c;追踪进程打开的文件可以帮助您找出问题的根本原因。这有助于快速定位错误&…