这个项目想练什么
单体电商的写法我已经熟了,所以这项目的目标很明确:把微服务这一整套基础设施真正跑起来—— 服务注册与配置、网关、熔断限流、分布式事务、消息队列、全文检索、对象存储, 而不是只在 README 里写一行「基于 Spring Cloud」。
业务上对标主流电商模型,覆盖用户端、商家端、平台管理端三端。
分层结构
- 网关层:Spring Cloud Gateway 做统一入口、路由转发、鉴权、限流;
- 注册与配置中心:Nacos 负责服务注册、发现与动态配置;
- 认证授权:JWT + Spring Security 做多端统一单点登录与权限校验;
- 业务微服务:用户、商品、订单、购物车、营销、库存、支付各自独立;
- 中间件层:Redis 缓存、RabbitMQ 异步解耦、Elasticsearch 检索、MinIO 文件;
- 数据层:MySQL 主从、Redis 集群、ES 集群。
技术版本:JDK 17、Spring Boot 3.2.5、Spring Cloud 2022.0.4 / Alibaba、MyBatis-Plus 3.5.3.1、 MySQL 8.0、Redis 7.2、Elasticsearch 8.x,配 Sentinel、Seata、Nacos、RabbitMQ、MinIO。 前端 Vue3 + Vite + Element Plus / Vant + Pinia,图表用 ECharts。
业务模块里值得说的几件事
- 商品:分类、品牌、规格与 SKU 管理,上下架与审核流,详情走 Elasticsearch 全文检索 + 条件筛选 + 热门推荐; 商品文本和库存要实时展示,所以库里存一份、ES 存一份,同步策略是这里最麻烦的地方。
- 订单与购物车:完整生命周期(下单、支付、发货、物流、收货、评价), 外加取消与退款售后;购物车支持批量结算与实时价格计算。
- 库存防超卖:并发扣减用分布式方案保证不超卖,这是整个项目里我花时间最多的一块—— 难点不在「扣减」,在于扣减失败、超时、重复请求这三种情况下状态怎么收敛。
- 营销:满减、折扣、优惠券发放与核销、秒杀与限时活动、积分兑换、活动预热。 秒杀走队列削峰,活动规则做成可配置而不是写死在代码里。
- 后台:权限角色与菜单、店铺入驻与资质审核、订单/用户/销量统计、数据大屏、系统日志与异常监控。
学到什么、代价是什么
学到的是边界:服务怎么切、切完之后跨服务的事务怎么办、一个下单请求要穿几个服务、 链路一长排查问题靠什么。Sentinel 和 Seata 这类组件本身不难接,难的是搞清楚 「这个场景到底需不需要它」。
代价也很实在:本地要起 Nacos、MySQL、Redis、ES、RabbitMQ、MinIO 一堆中间件才能跑通一条链路, 开发体验比单体差很多。如果只是几千日活的业务,我现在的判断是别上微服务—— 这套架构的价值在于练习和作为可二次开发的模板,不在于它比单体「更先进」。
怎么跑起来
需要 JDK 17+、Maven 3.8+、MySQL 8.0+、Redis 7.0+、Nacos 2.2+、Node.js 16+。 先起中间件与 Nacos,导入数据库脚本,按服务逐个启动,再起前端。