![]()
以下是一份咕泡内部项目实战中SpringCloud Alibaba云商城搭建的源码笔记(不加代码):
### 业务拆分与微服务设计原则
- **业务拆分策略**
- **垂直拆分**:按商城核心业务模块划分,如用户中心、商品中心、订单中心、支付中心、库存中心等。
- **水平拆分**:对高频访问模块,如商品详情进行读写分离设计。
- **领域驱动设计(DDD)**:通过限界上下文划分服务边界,例如营销域包括优惠券、促销活动;交易域包括购物车、订单、支付;履约域包括物流、售后。
- **服务分层架构**:包括用户层、网关层、业务层、支撑层、数据层。
### SpringCloud Alibaba核心组件应用
- **服务注册与发现**:使用Nacos,通过`@EnableDiscoveryClient`实现服务注册,`@RefreshScope + @Value("${config.key}")`实现配置中心功能,结合Gateway实现动态路由。
- **分布式配置管理**:使用yaml格式配置,如在`application.yml`中配置Nacos相关信息。
- **服务调用与负载均衡**:使用OpenFeign进行服务调用,通过`@FeignClient`注解定义客户端。使用Sentinel实现熔断降级和流量控制,`@SentinelResource`注解用于标记熔断降级的方法。
- **分布式事务解决方案**:使用Seata的AT模式,通过`@GlobalTransactional`注解标记全局事务方法。
### 领域模型设计实践
- **核心领域对象**:聚合根有订单、商品、用户;实体有订单项、购物车项;值对象有地址、金额。
- **领域服务设计**:例如在`OrderDomainService`中实现创建订单的业务逻辑,包括验证库存、创建订单、保存订单等步骤。
### 源码架构核心注解解析
- **服务治理相关注解**:`@EnableDiscoveryClient`启用服务发现,`@EnableFeignClients`启用Feign客户端,`@EnableSentinel`启用Sentinel支持。
- **分布式事务注解**:`@GlobalTransactional`标记全局事务方法,`@Transactional`用于本地事务(与Seata配合使用)。
- **配置管理注解**:`@RefreshScope`支持配置动态刷新,`@ConfigurationProperties`绑定配置到POJO。
- **网关路由注解**:通过`@Bean`注解定义`RouteLocator`来配置网关路由。
### 架构优化实践
- **性能优化**
- **缓存策略**:采用Redis和本地缓存结合的方式缓存商品详情,使用Redisson实现分布式锁。
- **异步处理**:利用RocketMQ实现订单异步通知,使用延迟队列实现订单超时关闭。
- **高可用设计**:采用Sentinel熔断和Hystrix兼容实现服务降级,通过多数据源和数据同步实现容灾备份,使用限流、熔断、降级组合策略进行流量管控。
### 部署架构建议
- **环境划分**:设置Dev/Test/Pre/Prod多环境配置,Nacos采用集群部署。
- **容器化方案**:使用Docker+Kubernetes进行部署,实现资源隔离与弹性伸缩。
- **监控体系**:采用Prometheus+Grafana进行监控,使用SkyWalking进行链路追踪。