首发博客地址
https://blog.zysicyj.top/
先大致列一下基础情况
-
架构必须是微服务 -
场景上涉及大量查询操作,分析操作 -
并发并不高 -
对高可用要求较高,不能挂掉 -
对安全要求高 -
要能过等保测试等三方测试 -
使用人数并不多,十万内 -
涉及很多在线编辑,预览等操作 -
对大屏展示有需求 -
数据库还不确定,如果要求高的话mysql必须换成达梦 -
中间件也不确定,要求高的话必须换成东方通 -
加密必须是国密
前言
好的代码,肯定最基本的有一套开发规范去约束的,不然堆砌的代码肯定成”屎山“。扩展性,性能啥的先不谈,单单维护代码成本就会很高,也很容易出BUG。
所以呀,我们必须先有一套开发规范,我这里拟了一套规范供内部使用:
-
MySQL开发规范
-
后台开发规范
-
前端开发规范
-
代码提交规范
-
{% pdf /static/pdf/Java开发手册(黄山版).pdf %}
架构
这里微服务框架我推荐直接使用Spring Cloud Alibaba体系组件,原因如下:
-
spring cloud alibaba 已经是国内实际上微服务标准 -
服务于阿里集团大大小小各种业务,生产使用稳定 -
社区庞大,遇到问题容易解决 -
文档齐全,中文文档详细,方便查阅 -
与Spring Cloud集成,可以充分使用Spring Cloud特性 -
组件丰富
聊聊组件选型
那么,具体我们需要哪些组件呢?这里的组件并不是必须的,需要后续综合考虑
-
ES:数据检索 -
redis:缓存 -
jetcache:多级缓存 -
MySQL,如果有国产化需求,考虑 达梦数据库 -
Druid:数据源管理框架 -
ShardingSquare:对数据库进行增强,比如 分库分表,加密的支持 -
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或SpringCloudSecurity+Oauth:授权 -
Leaf:分布式ID生成器 -
MybatisFlex:orm框架 -
dubbo或Feign:服务间通信
一些细节
再次声明一点,业务上是读多写少,分析报表多,所以很多设计上要优化
-
MySQL:读写分离,分库分表 -
Redis:主从从架构,哨兵集群 -
项目使用多级缓存 -
数据国密加密 -
账号最小权限分配,严格限制超级管理员账号 -
统一线程池使用
打任务量导入导出
-
通过优化线程池提高效率 -
通过逻辑过滤重复任务 -
使用消息队列削峰 -
使用缓存优化查询速度
查询流程
-
客户端发送请求 -
前端请求加密 -
请求发送到网关 -
网关校验请求合法性 -
网关根据路由规则转发到具体的服务器上处理 -
服务器解密请求数据 -
查询本地缓存 -
若无则查询Redis -
若无则进行业务流转,最终查询MySQL, -
根据路由规则,查询只读MySQL节点并返回数据 -
数据本地缓存,然后Redis缓存 -
返回响应数据 -
对响应加密,转发到网关 -
网关转发给客户端 -
客户端解密,展示数据
部署流程
开发环境
-
开发提交代码 -
基于Gitlab CI/CD 自动拉取代码生成Docker镜像并提供服务
测试环境
-
合并代码到测试分支 -
基于Gitlab CI/CD 自动拉取代码生成Docker镜像并提供服务
生产环境
-
合并代码到生产分支 -
基于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 多平台发布