Skip to content

架构

微服务项目“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

这套架构组合了业界最主流和成熟的技术,兼顾了高性能、高可用和高可扩展性,能够应对绝大多数复杂的业务场景,是构建企业级微服务应用的理想蓝图。