DoorDash 的系统设计题库不大,这道 Review & Reward System 是最高频的原题之一。设计一个类似 DoorDash 的评价与奖励系统:用户完成订单后可提交 review(1-5 星评分、文字评价、可选图片),其他用户可以 upvote 或 downvote,系统维护聚合数据,并在评价到达指定评估窗口后可靠触发 reward calculation。
整体可以拆成 Review Service、Vote Service、Vote Aggregation Pipeline 和 Reward Orchestrator 四个核心模块。
Review 提交时先通过 Order Service 验证订单已完成,并检查是否已创建过 review。Review metadata 存储在 DynamoDB 或 Cassandra,图片放 S3。创建接口通过 idempotency key 或 order_id + user_id 唯一约束处理客户端重试。
Vote Service 单独负责投票。Vote table 使用 review_id 和 user_id 作为唯一 key,从数据模型层面保证一个用户对一条 review 最多只有一个有效 vote。Vote 写入成功后发布 VoteChanged event 到 Kafka,不同步更新聚合字段。
Kafka 后面由 Vote Aggregator 消费事件,根据 vote change 计算增量,更新 ReviewStats Store。Upvote count、downvote count 和 helpfulness score 作为异步维护的 materialized view。读取 review 时直接读取预聚合结果,不扫描 Vote table 做实时 COUNT。
Reward workflow 采用异步调度。Review 创建时记录 evaluation_at(例如发布七天后进入评估),到期 review 通过 delayed queue 或 scheduled job 找到,交给 Reward Orchestrator 调用 Reward Scoring Service。Exactly-once 的关键是 at-least-once delivery + idempotent processing:为 review_id 和 evaluation_window 建立唯一的 reward job,Worker 通过 conditional write 将状态从 PENDING 修改成 PROCESSING。
整体通过 cache、materialized aggregation 和 event-driven architecture 将 read、vote 和 reward workflow 解耦,满足高可用、低延迟、eventual consistency 和水平扩展的要求。