2. 核心需求分析:功能需求与非功能需求

实时评分系统的架构设计必须从需求出发。本章将需求拆解为功能需求与非功能需求两个维度,确保后续的API设计与系统架构有明确的业务与技术目标。

2.1 功能需求

功能需求定义了系统“做什么”,是用户与业务方直接感知的能力。本系统的核心功能围绕评分数据的提交、聚合与展示三个环节展开。

核心功能链路: 用户提交评分 → 系统实时聚合 → 前端动态展示。三个环节必须端到端闭环,缺一不可。

2.1.1 评分提交

  • 单条评分提交: 支持用户对特定对象(如商品、服务、内容)提交1~5星或百分制评分,附带评论文本(可选)。
  • 批量评分导入: 支持运营后台通过CSV/JSON批量导入历史评分数据,用于冷启动或数据迁移。
  • 防重复与校验: 同一用户对同一对象在指定时间窗口内仅允许提交一次;服务端需校验评分范围、用户身份、对象ID合法性。

2.1.2 评分聚合

  • 实时聚合计算: 每次新评分提交后,系统需在秒级内重新计算该对象的平均分、评分总数、各星级占比。
  • 多维度聚合: 支持按时间维度(今日/本周/本月)、按用户等级、按地域等维度进行聚合统计。
  • 增量更新: 聚合结果基于增量计算,避免每次全量扫描原始评分表,降低数据库压力。

2.1.3 评分展示

  • 对象详情页展示: 展示平均分、星级分布直方图、最新N条用户评论。
  • 排行榜/列表页展示: 按评分排序展示热门对象,支持分页与筛选。
  • 实时推送: 当评分发生变化时,通过WebSocket或SSE向在线用户推送最新评分摘要,无需手动刷新。
功能模块 输入 输出 关键约束
评分提交 用户ID、对象ID、评分值、评论 提交成功/失败状态 幂等性、防刷、数据校验
评分聚合 对象ID、聚合维度参数 平均分、总数、星级分布 秒级延迟、增量计算
评分展示 对象ID、展示类型 HTML片段/JSON数据/推送事件 低缓存命中率、实时性
功能需求核心流程 评分提交 用户/批量导入 消息队列 异步削峰 聚合计算 增量更新 缓存层 Redis 加速 前端展示 WebSocket 推送

2.2 非功能需求

非功能需求定义了系统“做得怎么样”,是架构设计的质量约束。本系统重点关注低延迟、高可用、可扩展三大核心指标。

2.2.1 低延迟

  • P99 响应时间: 评分提交接口 ≤ 200ms;评分展示接口 ≤ 100ms。
  • 聚合更新延迟: 从评分提交到聚合结果更新,端到端延迟 ≤ 3秒。
  • 推送延迟: 前端收到实时推送的延迟 ≤ 1秒。

2.2.2 高可用

  • 系统可用性: 核心链路可用性 ≥ 99.99%(全年停机 ≤ 52分钟)。
  • 容错与降级: 当聚合服务或缓存不可用时,展示层可降级为读取数据库兜底数据,保证页面不白屏。
  • 数据一致性: 最终一致性模型,允许秒级不一致窗口,但不可丢失评分数据。

2.2.3 可扩展

  • 水平扩展: 评分提交服务、聚合计算服务均支持无状态水平扩展,通过增加实例应对流量增长。
  • 数据分片: 评分数据按对象ID哈希分片,支持数据库与缓存集群的横向扩容。
  • 业务扩展: 架构需支持未来新增评分维度(如视频评分、直播评分),无需重构核心链路。
非功能指标 目标值 实现手段
低延迟 P99 ≤ 200ms 本地缓存 + Redis + 异步队列
高可用 99.99% 多副本部署 + 熔断降级 + 主从切换
可扩展 支持10倍流量增长 无状态设计 + 数据分片 + 自动扩缩容
架构权衡提示: 低延迟与强一致性在分布式系统中通常难以兼得。本系统采用最终一致性策略,在聚合展示层允许短暂延迟,以换取更快的写入响应与更高的系统吞吐。
非功能需求架构约束 实时评分系统 核心架构 低延迟 P99 ≤ 200ms 高可用 99.99% 可用性 可扩展 水平扩展10x

2.3 需求优先级矩阵

为指导后续架构决策,对上述需求进行优先级排序:

优先级 需求项 理由
P0 评分提交 + 实时聚合 + 低延迟 核心业务闭环,直接影响用户体验
P1 高可用 + 评分展示 保障系统稳定运行与数据可见性
P2 可扩展 + 多维度聚合 面向未来增长,可迭代演进
架构决策警示: 切勿在初期过度设计可扩展性而牺牲低延迟与高可用。建议先以P0需求为核心构建最小可行架构,再逐步迭代扩展能力。