集群与角色部署摘要
本文给出 ECShopX Java 版生产部署的角色划分与扩容思路。详细单机步骤见 本地 / Docker 部署;架构能力锚点见 架构说明。
Java 版角色模型
Java 版以单 JVM Spring Boot 应用承载全部已装配 Bundle 的 HTTP 与同步业务。
| 角色 | 说明 | 状态 |
|---|---|---|
| 应用副本(ecshopx-java) | 无状态 HTTP API、/storage/、/wechatAuth/;内嵌 XXL-JOB Executor(默认端口 19999);ecshopx-dispatch 异步事件 | 可水平扩容多副本 |
| XXL-JOB Admin | 定时任务调度控制台与元数据;独立进程/容器,与 Executor 通过 HTTP + accessToken 通信 | 通常单实例或主备 |
| MySQL | 业务库 + xxl_job 调度库;支持读写分离 / PolarDB 等兼容实例 | 有状态,建议主从或托管 HA |
| Redis | 缓存、会话相关数据、ecshopx-dispatch 队列;多逻辑库划分见 application.properties | 有状态,建议主从或托管 |
| 对象存储(OSS / 七牛等) | 图片、前端静态资源、导入导出文件;驱动 ecshopx.storage.driver | 第三方托管,与集群规模无关 |
负载均衡:在应用副本前部署 Nginx、HAProxy 或云 SLB,将流量分发至多个 ecshopx-java 实例(默认后端端口 18080)。
定时任务:各模块 @XxlJob 由 Executor 注册到 Admin;扩容应用副本时 Executor 随副本增加,须在 Admin 中核对执行器分组与路由策略。
异步削峰:耗时逻辑经 ecshopx-dispatch(Redis 驱动)处理,无需单独「队列机」角色;Redis 须保证可用性与容量。
基础设施注意点
数据库主从、Redis 单机 vs 集群、云 RDS 代理模式等通用原则:
- 读写分离须在 Spring
application.properties/ 环境变量中正确配置数据源; - 避免使用不支持 Lua 脚本的 Redis 集群版(dispatch 队列依赖 Lua);
- 具体属性名与示例见 配置与环境变量。
容量规划(可选参考)
生产容量应结合实例规格、JVM 调优、数据库与 Redis 规格、对象存储 CDN 及 HPA 策略实测评估,不宜仅凭理论估算:
- 入口 LB + 多应用副本可线性分担读多写少的浏览流量;
- 下单等写路径依赖 MySQL 与业务锁,扩容应用的同时须评估数据库与 Redis;
- 静态资源与大图应走 CDN + 对象存储,减轻应用带宽。
Kubernetes / HPA(可选,简短)
生产环境可将 ecshopx-java 镜像部署为 Deployment 多副本:
- 无状态:会话与缓存外置 Redis;上传文件走 OSS,Pod 可随时替换;
- HPA:按 CPU / 自定义指标(如 Undertow 活跃请求)自动增减副本;
- 配置:数据源、Redis、
xxl.job.*、ecshopx.storage.*通过 ConfigMap / Secret 或配置中心注入,勿复用仓库内开发默认密钥; - XXL-JOB Admin 建议独立 Deployment 或托管;Executor 地址须能被 Admin 回调(Service / Ingress 或主机网络策略);
- 迁移:Flyway 脚本在发布流水线或 init Job 中执行,避免多副本并发 migrate。
Compose 适合开发与小规模演示;K8S + HPA 适合需要滚动发布与弹性伸缩的生产场景。二者可并存:开发用 docker-local.md,上线用同一镜像与相同环境变量语义。
