首发博客地址
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 多平台公布