4. 系统架构设计:分层架构与微服务拆分

高并发评分通道的核心挑战在于:瞬时流量峰值高、评分逻辑复杂、数据一致性要求严格。本章将围绕“分层架构”与“微服务拆分”两大主题,构建一个可水平扩展、高内聚低耦合的系统架构。

4.1 分层架构设计(接入层、逻辑层、数据层)

我们将系统划分为三个清晰的层次,每一层只关注特定的职责,通过标准接口进行通信。这种分层方式能够有效隔离变更、提升可维护性,并允许各层独立进行水平扩展。

层次 核心职责 关键组件 扩展策略
接入层 流量入口、协议转换、安全防护、限流熔断 Nginx / OpenResty、API Gateway (Kong / Spring Cloud Gateway)、WAF DNS 轮询 + 横向扩展 Nginx 节点
逻辑层 业务编排、评分计算、状态流转、缓存管理 微服务集群 (Spring Boot / Go)、消息队列 (Kafka / RocketMQ)、分布式缓存 (Redis Cluster) 基于服务发现与负载均衡的横向扩展
数据层 数据持久化、一致性保障、读写分离、分库分表 MySQL / PostgreSQL (主从)、TiDB / OceanBase、Elasticsearch、对象存储 (MinIO) 读写分离 + 分片集群 + 冷热数据分离
设计原则: 接入层只做“转发与过滤”,不参与任何业务逻辑;逻辑层只做“计算与状态管理”,不直接操作数据库;数据层只做“存储与查询”,不感知上游业务细节。

4.2 微服务拆分原则

在逻辑层内部,我们采用微服务架构。拆分粒度直接决定了系统的复杂度与弹性。以下是针对评分通道场景的拆分原则:

  1. 业务边界原则: 按“领域”拆分,每个服务拥有完整的业务能力。例如:用户服务、评分服务、订单服务、通知服务。
  2. 数据主权原则: 每个微服务独享自己的数据库实例或 Schema,禁止跨服务直接访问数据库,只能通过 API 调用。
  3. 弹性与隔离原则: 高 I/O 密集型服务(如评分计算)与低延迟服务(如用户查询)必须分离,避免相互影响。
  4. 无状态化原则: 逻辑层服务尽量保持无状态,将会话状态下沉到 Redis 或数据库,便于水平扩展。
  5. 异步化原则: 非核心链路(如发送通知、记录日志)通过消息队列异步处理,降低核心链路的响应时间。
评分通道微服务清单(示例):
  • gateway-service: 统一入口,鉴权、限流、路由。
  • user-service: 用户身份、权限、积分查询。
  • scoring-service: 核心评分引擎,负责规则匹配与分数计算。
  • order-service: 评分订单的创建、状态流转与结果回写。
  • notification-service: 短信、邮件、站内信推送。
  • audit-service: 评分日志记录与审计追溯。

4.3 整体架构图

下图展示了评分通道系统的完整分层架构与微服务部署关系。流量从用户端发起,经过接入层过滤,到达逻辑层的微服务集群,最终由数据层提供持久化支持。

高并发评分通道分层架构图 高并发评分通道分层架构图 接入层 Nginx / OpenResty 反向代理 + 限流 + SSL API Gateway 鉴权 / 路由 / 熔断 WAF / CDN 安全防护 / 加速 逻辑层(微服务集群) Gateway 路由 / 限流 User Service 用户 / 权限 Scoring Service 核心评分引擎 Order Service 订单 / 状态 通知 审计 消息队列 (Kafka / RocketMQ) 数据层 MySQL 主从 / TiDB 核心业务数据 Redis Cluster 缓存 / 会话 / 计数器 Elasticsearch 日志 / 搜索 / 分析
关键约束: 逻辑层中的 Scoring Service 是核心瓶颈点。必须独立部署,并配置独立的线程池与连接池。禁止与其他服务共享线程资源,防止评分计算阻塞导致整个集群雪崩。

4.4 数据流与调用链路

一次完整的评分请求,其数据流经过以下步骤:

  1. 用户请求 → 接入层 Nginx 进行 SSL 卸载与限流。
  2. 接入层 → 转发至 API Gateway,Gateway 完成鉴权与路由。
  3. Gateway → 调用 User Service 验证用户身份与权限。
  4. Gateway → 调用 Scoring Service 执行评分计算。
  5. Scoring Service → 从 Redis 读取评分规则缓存,从 MySQL 读取基础数据。
  6. Scoring Service → 计算完成后,将结果写入 Order Service 进行持久化。
  7. Order Service → 发送异步消息到 Kafka,由 Notification Service 与 Audit Service 消费。
性能指标参考(单次评分请求):
  • 接入层延迟:< 2ms
  • 逻辑层计算延迟:< 50ms(含缓存命中)
  • 数据层查询延迟:< 10ms(Redis) / < 30ms(MySQL 主键查询)
  • 端到端 P99 延迟:< 200ms

4.5 架构决策记录

决策点 选项 最终选择 理由
接入层负载均衡 LVS / Nginx / HAProxy Nginx + Keepalived 配置灵活、社区生态丰富、支持 Lua 扩展
服务间通信 gRPC / REST / Dubbo gRPC (内部) + REST (外部) 内部调用追求低延迟与强类型;外部兼容性优先
评分规则存储 MySQL / Redis / 配置文件 Redis + MySQL 双写 Redis 提供热加载与毫秒级读取,MySQL 保证持久化
分布式事务 Seata / 本地消息表 / TCC 本地消息表 + 最终一致性 避免强事务对核心链路的性能损耗