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

首发博客地址

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.mzph.cn/news/64939.shtml

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

相关文章

浅谈JVM垃圾回收机制

一、HotSpot VM中的GC分为两大类 1.部分收集(Partial GC): 新生代收集(Minor GC/Young GC):只对新生代进行垃圾收集老年代收集(Major GC/Old GC):只队老年代进行垃圾收集混合收集(Mixed GC):对整个新生代和老年代进行垃圾收集 2.整堆收集(Full GC) 收集整个Java堆和方法区 …

OA项目之会议通知(查询是否参会反馈详情)

目录 会议查询 是否参会 反馈详情 讲解思路 会议通知SQL语句分析 反馈详情SQL语句分析 后台代码编写 前端代码编写 效果预览 会议查询 MeetingFeedBack.java package com.zking.oa.model;import org.lisen.mvc.util.AutoIncrement; import org.lisen.mvc.util.…

五金轴尺寸机器视觉测量软硬件方案--康耐德智能

检测内容: 五金轴尺寸机器视觉测量 检测要求: 精度0.015mm,速度180~240个/分钟 视觉可行性分析: 对样品进行了光学实验,并进行图像处理,原则上可以使用机器视觉系统进行测试测量。 结果: 对…

解决uniapp手机真机调试时找不到手机问题

1、检查 USB 调试是否开启 2、检查是否有选择 文件 传输 选项 3、如果上述都做了还找不到,可以看看开发者选项中的【USB设置】,把模式改为 MIDI 模式

黑马 大事件项目 笔记

学习视频:黑马 Vue23 课程 后台数据管理系统 - 项目架构设计 在线演示:https://fe-bigevent-web.itheima.net/login 接口文档: https://apifox.com/apidoc/shared-26c67aee-0233-4d23-aab7-08448fdf95ff/api-93850835 接口根路径: http:/…

mysql与msql2数据驱动

mysql基本使用 数据库操作(DDL) -- 数据考操作 -- 1.查询所有数据库 SHOW DATABASES;-- 2.选择数据库 USE learn_mysql;-- 3.当前正在使用的数据库 SELECT DATABASE();-- 4.创建数据库 CREATE DATABASE IF NOT EXISTS learn_mysql;-- 5.删除数据库 DRO…

模拟实现线程池

关于JAVA标志库创建线程池推荐看通过标准库创建线程池 核心思路 实现一个submit方法,让用户传入要执行的任务,在线程池内部,将用户传入的任务存储到阻塞队列中,根据用户实例化线程池时传入的参数,知道线程池中线程的数…

UDP/TCP协议报头详细分析

文章目录 ————————预备知识————————数据段netstatpidof—————UDP协议报头即相关概念分析—————UDP协议端格式UDP 特点全双工send / rec 函数的本质UDP的缓冲区基于UDP的应用层协议—————TCP协议报头即相关概念分析—————TCP格式及解析32位序号…

OpenCVSharp入门学习①-获取本地摄像头数据

1. nuget包安装opencvsharp4和opencvsharp4.extensiongs和opencvsharp4.runtime.win 如果不安装opencvsharp4.runtime.win的话会报 System.TypeInitializationException:““OpenCvSharp.Internal.NativeMethods”的类型初始值设定项引发异常。”DllNotFoundException: 无法加…

python——ydata-profiling介绍与使用

ydata-profiling介绍与使用 ydata-profiling的作用ydata-profiling的安装与简单使用ydata-profiling的结果结构 ydata-profiling的实际应用场景1. 数据集比较2. 时间序列报告3. 对大型数据集进行概要分析4. 处理敏感数据5. 自定义报告的外观 ydata-profiling的作用 ydata-prof…

Kotlin 中 OkHttp 使用及解析

build.gradle dependencies {//OkHttpimplementation com.squareup.okhttp3:okhttp:4.9.0 } 简单使用例子 val okHttpClient OkHttpClient.Builder().connectTimeout(Duration.ofSeconds(10)).readTimeout(Duration.ofSeconds(10)).writeTimeout(Duration.ofSeconds(10)).re…

Python3不支持sqlite3的解决方法

先贴报错&#xff1a; >>> import sqlite3 Traceback (most recent call last):File "<stdin>", line 1, in <module>File "/usr/local/lib/python3.10/sqlite3/__init__.py", line 57, in <module>from sqlite3.dbapi2 impor…

Spark 【RDD编程(一)RDD编程基础】

RDD 简介 在Spark中&#xff0c;RDD是弹性分布式数据集&#xff08;Resilient Distributed Dataset&#xff09;的缩写。通俗来讲&#xff0c;RDD是一种抽象的数据结构&#xff0c;用于表示分布式计算中的数据集合。它是Spark中最基本的数据模型&#xff0c;可以看作是一个不可…

TiDB x 安能物流丨打造一栈式物流数据平台

作者&#xff1a;李家林 安能物流数据库团队负责人 本文以安能物流作为案例&#xff0c;探讨了在数字化转型中&#xff0c;企业如何利用 TiDB 分布式数据库来应对复杂的业务需求和挑战。 安能物流作为中国领先的综合型物流集团&#xff0c;需要应对大规模的业务流程&#xff…

JVM解密: 解构类加载与GC垃圾回收机制

文章目录 一. JVM内存划分二. 类加载机制1. 类加载过程2. 双亲委派模型 三. GC垃圾回收机制1. 找到需要回收的内存1.1 哪些内存需要回收&#xff1f;1.2 基于引用计数找垃圾(Java不采取该方案)1.3 基于可达性分析找垃圾(Java采取方案) 2. 垃圾回收算法2.1 标记-清除算法2.2 标记…

Hugging Face--Transformers

pipeline 在这里插入图片描述 AutoClass AutoClass 是一个能够通过预训练模型的名称或路径自动查找其架构的快捷方式. 你只需要为你的任务选择合适的 AutoClass 和它关联的预处理类。 AutoTokenizer AutoModel 保存模型 自定义模型构建 Trainer - PyTorch优化训练循环 参考资…

net start MongoDB 启动MongoDB服务时, 出现没有响应控制功能的解决方案

问题描述 管理员权限打开cmd后&#xff0c;输入net start MongoDB启动MongoDB服务&#xff0c;显示服务没有响应控制功能 检查 1、系统环境变量PATH中&#xff0c;MongoDB的bin文件夹路径是否正确 2、打开注册表&#xff0c;在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\…

SpringCloud(十)——ElasticSearch简单了解(三)数据聚合和自动补全

文章目录 1. 数据聚合1.1 聚合介绍1.2 Bucket 聚合1.3 Metrics 聚合1.4 使用 RestClient 进行聚合 2. 自动补全2.1 安装补全包2.2 自定义分词器2.3 自动补全查询2.4 拼音自动补全查询2.5 RestClient 实现自动补全2.5.1 建立索引2.5.2 修改数据定义2.5.3 补全查询2.5.4 解析结果…

鸿鹄企业工程项目管理系统 Spring Cloud+Spring Boot+前后端分离构建工程项目管理系统源代码

鸿鹄工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离构建工程项目管理系统 1. 项目背景 一、随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性&#xff0c;公司对内部工程管…

如何在 iPhone 上检索已删除的短信

我厌倦了垃圾短信。当我例行公事地删除 iPhone 上的这些不需要的消息时&#xff0c;当我分散注意力时&#xff0c;我通过点击错误的按钮清除了所有消息。这些被删除的消息中包含两条团购验证信息。有什么办法可以从 iPhone 检索我的消息吗&#xff1f; 有时我们可能会不小心删…