0
0
Lập trình
Thaycacac
Thaycacac thaycacac

Chiến Lược Gửi Thông Báo Đẩy Của Duolingo: Bài Toán Gửi 4 Triệu Thông Báo Trong 5 Giây

Đăng vào 4 ngày trước

• 4 phút đọc

Chiến Lược Gửi Thông Báo Đẩy Của Duolingo: Bài Toán Gửi 4 Triệu Thông Báo Trong 5 Giây

Giới thiệu

Nhắc đến Duolingo, ứng dụng học ngôn ngữ nổi tiếng với hình ảnh chú chim xanh vui nhộn, chắc chắn bạn đã thấy những thông báo hài hước từ nó. Đội ngũ marketing của Duolingo đã rất khéo léo trong việc duy trì người dùng với những thông điệp thông minh. Với 500 triệu tài khoản32.4 triệu người dùng hoạt động hàng ngày, Duolingo đã khẳng định vị thế của mình trong lòng người dùng. Bạn có biết, ứng dụng đã chế tạo ra 100 khóa học cho hơn 40 ngôn ngữ khác nhau?

Để thúc đẩy sự quan tâm đến sản phẩm, đội ngũ marketing của Duolingo đã lên kế hoạch gửi thông báo đẩy (Push Notification) đồng thời với một quảng cáo ngắn trong sự kiện Super Bowl, một trong những sự kiện thể thao lớn nhất tại Mỹ, chứng kiến hàng triệu người xem. Tuy nhiên, thách thức họ phải đối mặt là làm sao gửi 4 triệu thông báo trong vòng 5 giây, tương đương với 800.000 thông báo mỗi giây! Hãy cùng khám phá cách mà Duolingo đã vượt qua khó khăn này.

Thách Thức Gửi Thông Báo Đẩy

Quy mô lớn

Quảng cáo chỉ phát trong 5 giây, nhưng họ cần phải chuẩn bị một hệ thống có khả năng gửi đến 800.000 thông báo mỗi giây. Trong khi hệ thống hiện tại chỉ đáp ứng tối đa khoảng 10.000 thông báo mỗi giây, điều này đặt ra bài toán nâng cấp hệ thống lên gấp 80 lần công suất hiện tại.

Thời gian và kiểm soát tải

Công việc không chỉ là gửi thông báo, mà còn phải đảm bảo hệ thống không bị quá tải như trường hợp của Coinbase vào năm 2022, nơi họ bị DDOS chính mình do quá nhiều người truy cập.

Hơn nữa, ứng dụng Android của Duolingo gặp phải một vấn đề khi mỗi thông báo gửi đi đều tạo ra một yêu cầu đến máy chủ, cần phải tính toán kỹ lưỡng để tránh tình trạng quá tải.

Kiến Trúc Hệ Thống Gửi Thông Báo

Đội ngũ kỹ sư tại Duolingo đã đưa ra giải pháp thiết kế hệ thống gửi thông báo với nhiều bước thực hiện:

  1. Chuẩn bị trước sự kiện: Tạo danh sách tổng hợp người dùng sẽ nhận thông báo. Dữ liệu được lấy từ DynamoDB và xử lý bất đồng bộ, sau đó lưu trữ ở AWS S3.
  2. Vài giờ trước khi sự kiện: Tăng số lượng worker trong ECS Cluster lên khoảng 20 interim worker và hơn 5000 notification worker để sẵn sàng chịu tải cao.
  3. Kích hoạt thông báo: Đội marketing sẽ theo dõi quảng cáo trên TV và bấm nút khi quảng cáo phát sóng. Hệ thống sẽ nhận request và gửi tin nhắn đến FIFO Queue.
  4. Phân phối thông báo: Worker sẽ nhận tin nhắn từ FIFO queue và gửi push notification bằng APNSFCM đến thiết bị người dùng.

Tại sao sử dụng FIFO Queue?

FIFO queue giúp loại bỏ thông báo trùng lặp, đảm bảo rằng người dùng không nhận hai thông báo giống nhau, đồng thời giảm tải cho hệ thống API.

Kiểm Thử Hệ Thống

Đội ngũ kỹ sư đã tiến hành kiểm thử hiệu suất hệ thống qua nhiều quy trình:

  • Tìm kiếm nút thắt cổ chai: Bằng cách gửi thông báo với payload rỗng để phân tích hiệu suất.
  • Kiểm thử với người dùng thật: Với các thông báo trong các dịp lễ như Halloween, Tổng Kết Năm và Chào Mừng Năm Mới.

Hệ thống có chế độ "Zombie mode" để giới hạn gửi request khi có lưu lượng lớn, giúp backend hồi phục đúng thời điểm.

Thành Công Đáng Kinh Ngạc

Vào ngày diễn ra sự kiện Super Bowl, các kỹ sư đã chuẩn bị sẵn sàng. Khi quảng cáo phát sóng, đội marketing bấm nút và hệ thống đã gửi 99% thông báo trong 5.7 giây, trong đó 95% thông báo được gửi trong 3.9 giây. Kết quả này không chỉ giúp Duolingo tăng số lượng người dùng một cách đáng kể mà còn làm nổi bật hình ảnh thương hiệu độc đáo và hài hước của họ.

Kết Luận

Việc sử dụng nút bấm hình vuông thay vì hình tròn đã giúp đội ngũ có thể tránh được các lỗi không mong muốn. Điều này cho thấy sự tỉ mỉ và cẩn thận của đội ngũ kỹ sư Duolingo trong việc thiết kế một hệ thống mạnh mẽ và hiệu quả.

Nếu bạn tìm thấy thông tin này thú vị, hãy cho chúng tôi biết để tạo động lực tiếp tục phát triển cộng đồng System Design Việt Nam!

Tham Gia Cộng Đồng

Chúng tôi đã tạo dựng một Cộng Đồng System Design Việt Nam trên Facebook nơi mọi người có thể cùng nhau chia sẻ và học hỏi về thiết kế hệ thống. Hãy tham gia để cùng nhau phát triển nhé!

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào