Skip to content

集群与角色部署摘要 ​

本文给出 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,上线用同一镜像与相同环境变量语义。

相关章节 ​