架构
微服务项目“Phoenix-Store (凤凰商城)”技术栈与组件架构
项目愿景
构建一个高可用、高性能、可扩展的现代化电商平台。
一、核心架构与组件概览
这是一个示意图,展示了核心组件之间的关系。
二、组件详解与技术选型
1. API 网关 (API Gateway)
-
技术选型: Apache ShenYu
-
职责与原因:
-
统一流量入口: 所有外部请求(Web, App, 开放平台)的唯一入口。
-
协议转换: 将外部的 HTTP/HTTPS 请求转换为内部的 Dubbo/Spring Cloud RPC 调用。这对于异构系统集成至关重要。
-
核心治理能力:
-
动态路由: 基于 ShenYu Admin 控制台动态配置路由规则,实现灰度发布、环境隔离。
-
安全防护: 使用其 Sign、JWT、Waf 插件进行统一认证和安全过滤。
-
流量控制: 使用其 RateLimiter (基于Redis) 和 Hystrix/Resilience4j 插件进行全局限流和熔断。
-
-
自动注册: 后端服务(如Dubbo服务)通过 shenyu-client 自动将API元数据注册到网关,极大简化接入流程。
-
2. 服务开发框架 (Service Development Framework)
-
技术选型: Spring Boot 2.x / 3.x
-
职责与原因:
-
快速开发: 业界标准,简化配置,快速构建独立的、生产级的微服务应用。
-
生态整合: 与 Spring Cloud 生态无缝集成,是整个技术栈的基石。
-
3. 服务注册与发现 & 配置中心 (Service Registry & Discovery / Config Center)
-
技术选型: Alibaba Nacos
-
职责与原因:
-
服务注册与发现:
-
所有微服务实例启动时,向 Nacos 注册自己的地址。
-
服务间调用时,从 Nacos 拉取目标服务的实例列表。
-
Nacos 提供基于心跳和主动探测的健康检查,自动剔除不健康的实例。
-
-
统一配置管理:
-
将所有服务的配置文件(如数据库连接、第三方key等)集中存储在 Nacos。
-
实现配置的动态刷新,修改配置后无需重启服务即可生效。
-
-
二合一优势: Nacos 同时解决了服务发现和配置管理两大核心问题,简化了部署和运维。
-
4. 服务间通信 (Inter-Service Communication)
-
技术选型: Apache Dubbo 3.x (或 OpenFeign for Spring Cloud)
-
职责与原因:
-
选择 Dubbo 的理由 (推荐):
-
高性能RPC: Dubbo 协议在性能和序列化效率上通常优于基于HTTP的OpenFeign。
-
强大的服务治理: Dubbo 提供了更精细的负载均衡、集群容错、服务降级等策略。
-
云原生: Dubbo 3.x 全面拥抱云原生,支持 Triple 协议(兼容gRPC),便于与其他语言栈的服务互通。
-
与 ShenYu 完美配合: ShenYu 对 Dubbo 的支持是其核心亮点之一。
-
-
选择 OpenFeign 的理由 (备选):
-
简单易用: 基于声明式 REST 客户端,学习成本低,对于纯 HTTP 通信的场景非常方便。
-
Spring Cloud 原生: 与 Spring Cloud 生态结合最紧密。
-
-
5. 分布式服务治理 (Distributed Service Governance)
-
技术选型: Alibaba Sentinel
-
职责与原因:
-
流量控制: 提供精准的QPS、线程数、并发连接数控制。
-
熔断降级: 当依赖的服务出现问题时,能快速熔断,防止雪崩。支持基于异常比例、异常数、慢调用比例等多种策略。
-
热点参数限流: 能对某个“热点”商品ID或用户ID的请求进行单独限流,非常适合电商秒杀等场景。
-
动态规则配置: 提供独立的 Dashboard,所有规则可以动态配置和实时生效。
-
6. 分布式事务 (Distributed Transaction)
-
技术选型: Seata
-
职责与原因:
-
保障数据最终一致性: 在跨多个微服务(例如,订单服务调用库存服务和积分服务)的场景中,确保所有操作要么全部成功,要么全部回滚。
-
多种模式: Seata 提供 AT、TCC、SAGA、XA 等多种事务模式,可以根据业务场景的复杂度和性能要求灵活选择。AT 模式对业务代码侵入性最小,是首选。
-
7. 数据存储 (Data Storage)
-
数据库 (Database): MySQL 8.x + Mybatis-Plus / JPA
-
MySQL: 成熟、稳定、社区支持广泛的关系型数据库,用于存储核心业务数据。
-
Mybatis-Plus: 简化 Mybatis 开发,提供强大的 CRUD 功能和条件构造器。
-
-
分布式缓存 (Distributed Cache): Redis
- 存储热点数据(如商品信息、用户Token),减轻数据库压力,提升系统性能。
-
文档数据库 (Document Store): MongoDB
- 存储商品评论、用户行为日志等结构不固定或半结构化的数据。
-
搜索引擎 (Search Engine): Elasticsearch
- 提供强大的商品全文检索和聚合分析功能。
8. 消息队列 (Message Queue)
-
技术选型: Apache RocketMQ (或 Apache Kafka)
-
职责与原因:
-
异步解耦: 将耗时的、非核心的流程异步化。例如,用户下单成功后,发送一个消息,由独立的积分服务和通知服务去消费,而不用在主流程中同步等待。
-
削峰填谷: 在秒杀等高并发场景下,将瞬时的大量请求先写入MQ,后端服务按照自己的处理能力平稳地消费,防止系统被冲垮。
-
9. 可观测性 (Observability)
-
日志系统 (Logging): ELK / EFK Stack (Elasticsearch, Logstash/Fluentd, Kibana)
- 通过 Logback 等工具将所有微服务的日志推送到 Logstash/Fluentd,最终汇聚到 Elasticsearch 进行存储和索引,通过 Kibana 进行统一的日志检索和分析。
-
监控与告警 (Monitoring & Alerting): Prometheus + Grafana
- 各微服务通过 Actuator 暴露监控端点,Prometheus 定期抓取指标数据,Grafana 负责将数据可视化展示,并配置告警规则。
-
分布式链路追踪 (Distributed Tracing): Apache SkyWalking (或 Zipkin)
- 追踪一个请求在多个微服务之间的完整调用链路,快速定位性能瓶颈和错误发生的环节。SkyWalking 对Java应用无侵入,功能强大,是首选。
10. 容器化与部署 (Containerization & Deployment)
-
容器化: Docker
-
容器编排: Kubernetes (K8s)
-
CI/CD: Jenkins + GitLab + Harbor
-
GitLab: 代码仓库和版本控制。
-
Jenkins: 自动化构建、测试、打包Docker镜像。
-
Harbor: 私有Docker镜像仓库。
-
ArgoCD/JenkinsX (可选): 用于实现基于 K8s 的 GitOps 持续部署。
-
三、总结
一个典型的、使用 ShenYu 网关的微服务项目,其技术栈组合如下:
类别 | 核心组件 | 技术选型 |
流量入口 | API网关 | Apache ShenYu |
服务核心 | 开发框架 | Spring Boot |
服务间通信 | Apache Dubbo 3 | |
服务治理 | 注册/配置中心 | Nacos |
流量/熔断控制 | Sentinel | |
分布式事务 | Seata | |
数据持久化 | 关系型数据库 | MySQL |
缓存 | Redis | |
文档/搜索 | MongoDB / Elasticsearch | |
异步通信 | 消息队列 | RocketMQ |
可观测性 | 日志/监控/追踪 | ELK + Prometheus + SkyWalking |
部署运维 | 容器化/CI/CD | Docker + K8s + Jenkins |
这套架构组合了业界最主流和成熟的技术,兼顾了高性能、高可用和高可扩展性,能够应对绝大多数复杂的业务场景,是构建企业级微服务应用的理想蓝图。