某人事系统架构搭建设计记录
首发博客地址
https://blog.zysicyj.top/
先大致列一下基础情况
-
架构必须是微服务 -
场景上涉及大量查询操作,分析操作 -
存在临时大量写入的场景 -
并发并不高 -
对高可用要求较高,不能挂掉 -
对安全要求高 -
要能过等保测试等三方测试 -
使用人数并不多,十万内 -
涉及很多在线编辑,预览等操作 -
对大屏展示有需求 -
数据库还不确定,如果要求高的话mysql必须换成达梦 -
中间件也不确定,要求高的话必须换成东方通 -
加密必须是国密
前言
好的代码,肯定最基本的有一套开发规范去约束的,不然堆砌的代码肯定成”屎山“。扩展性,性能啥的先不谈,单单维护代码成本就会很高,也很容易出BUG。
所以呀,我们必须先有一套开发规范,我这里拟了一套规范供内部使用:
-
MySQL开发规范 -
后台开发规范 -
前端开发规范 -
代码提交规范
架构
这里微服务框架我推荐直接使用Spring Cloud Alibaba体系组件,原因如下:
-
Spring Cloud Alibaba 已经是国内实际上微服务标准 -
服务于阿里集团大大小小各种业务,生产使用稳定 -
社区庞大,遇到问题容易解决 -
文档齐全,中文文档详细,方便查阅 -
与 Spring Cloud 集成,可以充分使用 Spring Cloud 特性 -
组件丰富
高清大图地址:https://www.processon.com/view/link/64ef11baa8c890267a8a023d
聊聊组件选型
那么,具体我们需要哪些组件呢?这里的组件并不是必须的,需要后续综合考虑
-
ES:数据检索 -
Redis:缓存 -
JetCache:多级缓存 -
MySQL,如果有国产化需求,考虑 达梦数据库 -
Druid:数据源管理框架 -
ShardingSphere:对数据库进行增强,比如 分库分表,加密的支持 -
Minio:文件存储 -
Seata:分布式事务 -
Spring Cloud Gateway:由于并发量并不大,所以我们可以不需要 Nginx网关 -
Sentinel: 熔断限流 -
Spring Cloud Alibaba Sidecar:项目中很有可能涉及其他非 Spring Cloud 应用,此时就需要将其接入 Spring Cloud -
引入 GraalVM,可以看到,对比 JVM 启动速度提升
-
JimuReport+EasyExcel:报表设计 -
KkFileView:在线预览各种文件 -
Activity:工作流支持 -
Hutool:最全工具类库 -
Nacos:服务注册和配置中心 -
RocketMQ:消息队列,削峰填谷 -
Docker:使用 Docker 进行容器化部署 -
GitLab:源码管理 -
Nexus:构建仓库 -
Jenkins:部署平台 -
SkyWalking:链路追踪 -
SaToken 或 Spring Cloud Security+Oauth:授权 -
Leaf:分布式 ID 生成器 -
MybatisFlex:ORM 框架 -
Dubbo 或 Feign:服务间通信
一些细节
再次声明一点,业务上是读多写少,分析报表多,所以很多设计上要优化
-
MySQL:读写分离,分库分表 -
Redis:主从从架构,哨兵集群 -
项目使用多级缓存 -
数据国密加密 -
账号最小权限分配,严格限制超级管理员账号 -
统一线程池使用
打任务量导入导出
-
通过优化线程池提高效率 -
通过逻辑过滤重复任务 -
使用消息队列削峰 -
使用缓存优化查询速度
查询流程
-
客户端发送请求 -
前端请求加密 -
请求发送到网关 -
网关校验请求合法性 -
网关根据路由规则转发到具体的服务器上处理 -
服务器解密请求数据 -
查询本地缓存 -
若无则查询 Redis -
若无则进行业务流转,最终查询 MySQL -
根据路由规则,查询只读 MySQL 节点并返回数据 -
数据本地缓存,然后 Redis 缓存 -
返回响应数据 -
对响应加密,转发到网关 -
网关转发给客户端 -
客户端解密,展示数据
部署流程
开发环境
-
开发提交代码 -
基于 GitLab CI/CD 自动拉取代码生成 Docker 镜像并提供服务
测试环境
-
合并代码到测试分支 -
基于 GitLab CI/CD 自动拉取代码生成 Docker 镜像并提供服务
生产环境
-
合并代码到生产分支 -
基于 GitLab,手动用 Jenkins 部署项目
详细部署策略
如果中台能提供,那肯定是最好的,不用考虑那么多了
现在假设有10台服务器
-
服务器1和服务器2:MySQL数据库服务器,部署主从复制架构。
-
服务器1作为主数据库(Master),负责写入操作和部分读取操作。 -
服务器2作为从数据库(Slave),负责复制主数据库的数据,并提供读取操作,实现读写分离。 -
主从复制可以提高数据库的可用性和性能,当主数据库出现故障时,可以快速切换到从数据库。
-
-
服务器3和服务器4:Redis缓存服务器,部署主从架构。
-
服务器3作为主节点(Master),负责处理写入和读取操作。 -
服务器4作为从节点(Slave),复制主节点的数据,并提供读取操作。 -
Redis主从架构可以提高缓存的可用性和读取性能。
-
-
服务器5:Minio文件存储服务器,用于存储上传的文件。
-
Minio是一个开源的对象存储服务器,提供高可用性和可扩展性的存储解决方案。
-
-
服务器6和服务器7:Nacos服务注册和配置中心,用于服务的注册和配置管理。
-
Nacos提供了服务注册、发现和配置管理的功能,支持高可用和可靠的服务部署。
-
-
服务器8:RocketMQ消息队列服务器,用于削峰填谷,异步处理导入任务。
-
RocketMQ提供了高吞吐量、低延迟的消息传递能力,可以将导入任务放入消息队列中,由异步消费者进行处理。
-
-
服务器9和服务器10:用于部署应用程序和其他中间件,如Spring Cloud Gateway、Sentinel、SkyWalking等。
-
这些服务器用于部署应用程序和其他中间件,如API网关、熔断限流、链路追踪等,提供服务的访问和监控。
-
将MySQL数据库和Redis缓存部署为主从架构的原因如下:
-
高可用性:主从复制可以提供故障容错能力,当主节点出现故障时,可以快速切换到从节点,保证服务的连续性和可用性。 -
读写分离:通过将读操作分发到从节点,可以减轻主节点的负载,提高数据库的读取性能。同时,从节点的复制过程对主节点的影响较小,不会对主节点的写入操作产生影响。
本文由 mdnice 多平台发布
相关文章:
某人事系统架构搭建设计记录
首发博客地址 https://blog.zysicyj.top/ 先大致列一下基础情况 架构必须是微服务 场景上涉及大量查询操作,分析操作 存在临时大量写入的场景 并发并不高 对高可用要求较高,不能挂掉 对安全要求高 要能过等保测试等三方测试 使用人数并不多,十…...
uniapp 实现切换tab锚点定位到指定位置
1.主要使用uniapp scroll-view 组件的scroll-into-view属性实现功能 2.代码如下 <scroll-view:scroll-into-view"intoView"><u-tabsclass"tabs-list"change"tabChange":list"tabList"></u-tabs><view id"1&…...
华纳云:ssh登录22号端口拒绝连接Ubuntu?
如果您在尝试使用SSH登录Ubuntu服务器的时候遇到了22号端口拒绝连接的问题,您可以尝试以下几个步骤来解决问题: 确认SSH服务已启动: 确保Ubuntu服务器上的SSH服务已经正确启动。您可以在服务器上运行以下命令来检查SSH服务的状态:…...
python conda实践 sanic框架gitee webhook实践
import subprocess import hmac import hashlib import base64 from sanic.response import text from sanic import Blueprint from git import Repo# 路由蓝图 hook_blue Blueprint(hook_blue)hook_blue.route(/hook/kaifa, methods["POST"]) async def kaifa(req…...
LeetCode——无重复的最长子串(中等)
题目 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2: 输入: s "bbbbb" 输出: 1 解释: 因为…...
【SQL】关系模型与查询和更新数据
一、关系模型 1.1 主键 主键是关系表中记录的唯一标识。主键的选取非常重要:主键不要带有业务含义,而应该使用BIGINT自增或者GUID类型。主键也不应该允许NULL。 可以使用多个列作为联合主键,但联合主键并不常用。 1.2 外键 FOREIGN KEY …...
【Centos8_配置单节点伪分布式Spark环境】
安装centos8 jdk部署伪分布式spark环境 安装Centos8 环境下的JDK 下载jdk linux版本 下载链接: jdk-8u381-linux-x64.tar.gz 将该文件上传到Centos8 主机 部署配置jdk(java8) # 解压到指定路径 [lhangtigerkeen Downloads]$ sudo tar …...
【软考】系统集成项目管理工程师(三)信息系统集成专业技术知识①【16分】
一、系统集成的特点 官方解释: 1、信息系统建设的内容主要包括设备采购、系统集成、软件开发和运维服务等; 2、信息系统集成是指将计算机软件、硬件、网络通信、信息安全等技术和产品集成为能够满足用户特定需求的信息系统;显著特点如下&am…...
揭秘特权账号潜在风险,你中招了吗?
什么是特权账号? 特权账号指在企业运营过程中,为相关业务运营、系统管理、系统运维等人员赋予的系统维护、权限增加、数据修改删除、导出等高级权限的系统账号。这些账号多数连接企业核心资源,保障企业内部各项业务正常运作。然而࿰…...
线性代数的学习和整理13: 定义域,值域,到达域 和单射,满射,双射,反函数,逆矩阵
目录 1 函数与 向量/矩阵 2 初等数学的函数 2.1 函数 2.2 函数的定义:定义域 →映射→ 值域 3 高等数学里的函数:定义域和陪域/到达域(非值域)的映射关系 3.1 函数 3.2 单射,满射,双射等都是针对…...
深入MaxCompute -第十一弹 -QUALIFY
简介: MaxCompute支持QUALIFY语法过滤Window函数的结果,使得查询语句更简洁易理解。Window函数和QUALIFY语法之间的关系可以类比聚合函数GROUP BY语法和HAVING语法。 MaxCompute(原ODPS)是阿里云自主研发的具有业界领先水平的分…...
Mysql定时备份事件
创建了一个名为backup_database的定时任务,每天自动在当前时间的后一天开始执行。备份数据库的代码使用mysqldump命令将数据库导出为sql文件保存在指定的备份目录中。 需要注意的是,上述代码中的用户名 (username)、密码 (password)、主机名 (hostname) …...
探索ClickHouse——安装和测试
我们在Ubuntu 20 Server版虚拟机上对ClickHouse进行探索。 安装 检测环境 grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"SSE 4.2 supported 可以看到我们的环境支持编译版本的。如果不支持的环境…...
常用的css样式
1:flex布局 .flex-between {display: flex;justify-content: space-between; }.flex-evenly {display: flex;justify-content: space-evenly; }.flex-end {display: flex;justify-content: flex-end; }.flex {display: flex; }.flex-center {display: flex;justify…...
小兔鲜儿 - 微信登录
目录 微信登录 登录方式 静态结构 获取登录凭证 获取手机号码 微信登录接口(生产环境) 模拟手机登录(开发环境) 用户信息持久化存储 涉及知识点:微信授权登录,文件上传,Store 状态管理等。 微信登录 微信小程序的开放…...
C++ Primer阅读笔记--对象移动(右值引用、移动迭代器和引用限定符的使用)
目录 1--右值引用 2--std::move 3--移动构造函数 4--移动赋值运算符 5--移动迭代器 6--引用限定符 1--右值引用 右值引用必须绑定到右值的引用,通过 && 获得右值引用; 右值引用只能绑定到临时对象(即将被销毁的对象)…...
【办公类-16-01-02】2023年度上学期“机动班下午代班的排班表——跳过周三、节日和周末”(python 排班表系列)
背景需求: 2023年第一学期(2023年9-2024年1月),我又被安排为“机动班”,根据新学期的校历,手动推算本学期的机动班的带班表 排版原则 1、班级数量:共有6个班级,循环滚动 2、每周次…...
ChatGPT HTML JS Echarts实现热力图展示
热力图是一种常用的数据可视化图表,主要用于展示数据的分布和密度情况。它通过使用不同颜色的热点来表示数据在地理或二维空间上的分布情况,从而直观地显示出数据的密集程度和趋势。 热力图的功能和作用如下: 1. 数据分布展示:热力图可以将大量数据以热点的形式展示在地理…...
JavaScript七小知
文章目录 1. == 和 ===区别2. a++ 和 ++a区别3. 创建js对象的三种方式4. 原型与原型链相关4.1 prototype4.2 __proto__4.3 constructor4.4 原型链5. 定时器的两种设置方式6. 时间相关7. axios与axios拦截器1. == 和 ===区别 == 只是判断值是否一致, === 会判断数据类型和…...
Ubuntu【系统环境下】【编译安装OpenCV】【C++调用系统opencv库】
Ubuntu【系统环境下】【编译安装OpenCV】【C调用系统opencv库】 前言: 本人需要用C写代码,调用OpenCV库,且要求OpenCV版本号大于4.1.0 由于使用的是18.04的版本,所以apt安装OpenCV的版本始终是3.2.0,非常拉胯&#…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
iview框架主题色的应用
1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题,无需引入,直接可…...
