QCon伦敦:Duolingo如何在超级碗中场休息期间6秒内发送400万条推送通知

Duolingo在超级碗期间的营销活动与技术架构

背景

Duolingo是一家利用AWS云平台提供外语学习服务的教育平台,拥有近2700万月活跃用户。在2023年超级碗期间,Duolingo策划了一项营销活动,计划在广告播放时向用户发送数百万条移动推送通知。

挑战

  1. 精准触发:广告播放时间无法提前预知,需要人工触发推送通知的发送。
  2. 高并发与去重:需要在短时间内发送400万条推送通知,并确保每个用户仅收到一条通知,避免重复。
  3. 系统扩展性:确保系统能够在短时间内处理高并发请求,同时避免性能瓶颈。

技术架构

Duolingo构建了一个基于AWS的异步微服务架构,主要包括以下组件:

  1. API Gateway:作为系统的入口。
  2. AWS ECS:运行Python组件。
  3. SQS队列:用于消息队列管理,包括:

    • FIFO SQS队列:用于消息去重,支持5分钟的去重窗口,但每秒最多处理300条消息。
    • 普通SQS队列:用于触发推送通知的发布,通过数据批处理支持高并发。
  4. DynamoDB和S3:存储用户和设备数据。
  5. CloudWatch:用于系统监控和可观察性。

实施过程

  1. 数据准备:在活动前,工程师将400万用户的设备映射数据上传至S3。
  2. 资源扩展:在超级碗广告播放前几小时,手动扩展了5000个通知工作实例,并部署了20个临时工作节点用于数据预取。
  3. 触发发送:营销经理在广告播放时手动触发推送通知的发送。
  4. 性能表现:系统在3.9秒内发送了95%的通知,5.7秒内发送了99%的通知。

测试与优化

为了确保系统能够应对高并发,团队进行了三轮推送通知发送测试,从100万用户开始逐步验证系统的扩展性和性能。

问题与解答

  1. Google和Apple的推送速度控制

    • Duolingo无法控制Google(FCM)和Apple(APN)的推送速度,但确认了它们没有特定的速率限制。
  2. 云成本增加

    • 尽管活动时间短暂,但云成本有显著增加。

总结

Duolingo通过构建高扩展性的异步架构,成功在超级碗期间实现了数百万条推送通知的精准发送,展示了其在技术架构设计和系统优化方面的能力。

阅读 59
0 条评论