Hành trình mở rộng của Pinterest
Quá trình mở rộng của Pinterest được chia thành bốn giai đoạn:
- Kỷ nguyên tự khám phá: Một nhóm kỹ sư nhỏ quản lý việc tạo prototype nhanh và các yêu cầu sản phẩm liên tục thay đổi.
- Kỷ nguyên thử nghiệm: Số lượng người dùng tăng vọt khiến việc mở rộng nhanh trở nên cần thiết, nhưng cũng dẫn đến một hệ thống phức tạp và dễ tổn thương.
- Kỷ nguyên trưởng thành: Đơn giản hóa kiến trúc bằng cách sử dụng các công nghệ trưởng thành và có khả năng mở rộng như MySQL, Memcache và Redis.
- Kỷ nguyên hồi quy: Sau khi có kiến trúc phù hợp, tiếp tục tăng trưởng bằng cách mở rộng theo chiều ngang.
Công nghệ cốt lõi
Pinterest ưu tiên các công nghệ đề cao độ tin cậy, tính dễ hiểu và khả năng mở rộng:
- MySQL: Cơ sở dữ liệu quan hệ ổn định và dễ bảo trì.
- Memcache: Cache dữ liệu được truy cập thường xuyên trong bộ nhớ để giảm tải các lượt đọc từ cơ sở dữ liệu.
- Redis: Kho lưu trữ dữ liệu linh hoạt có thể xử lý nhiều cấu trúc dữ liệu khác nhau.
- Solr: Nền tảng tìm kiếm có thể triển khai nhanh.
Mở rộng cơ sở dữ liệu: clustering vs sharding
Pinterest đã cân nhắc hai cách tiếp cận để phân tán cơ sở dữ liệu:
Clustering
- Khi dữ liệu đến, xác định node tối ưu và sao chép dữ liệu sang nhiều node.
- Có các ưu điểm như tự động mở rộng, dễ thiết lập và đảm bảo tính sẵn sàng của dữ liệu, nhưng cũng có nhược điểm như độ phức tạp cao, độ trưởng thành chưa đủ và khó nâng cấp.
Sharding
- Chia dữ liệu thành các phần nhỏ và đặt mỗi phần trên một máy chủ độc lập.
- Có các ưu điểm như kiến trúc đơn giản, mở rộng độc lập và quyền sở hữu dữ liệu rõ ràng, nhưng cũng có nhược điểm như không thể join và transaction ở cấp cơ sở dữ liệu, đồng thời làm tăng độ phức tạp của ứng dụng.
Pinterest đã chọn sharding vì trải nghiệm tiêu cực với clustering.
Chuyển sang kiến trúc sharding
Pinterest đã chuyển dần sang sharding trong thời gian đóng băng tính năng:
- Loại bỏ join: Loại bỏ toàn bộ MySQL join, đồng thời tận dụng phi chuẩn hóa dữ liệu và caching.
- Sharding dựa trên ID: Thực hiện sharding dựa trên ID 64-bit để đơn giản hóa việc định tuyến dữ liệu.
Nhược điểm của sharding và cách giải quyết
- Script migration: Quá trình chuyển dữ liệu sang hạ tầng sharding tốn nhiều thời gian.
- Logic ứng dụng: Cần duy trì tính nhất quán dữ liệu do không có join và transaction ở cấp cơ sở dữ liệu.
- Sửa đổi schema: Lên kế hoạch và áp dụng thay đổi schema cho tất cả shard.
- Tạo báo cáo: Tạo báo cáo bằng cách tổng hợp nhiều shard.
Bài học rút ra
Những bài học chính từ hành trình mở rộng của Pinterest:
- Sự đơn giản rất quan trọng: Chọn công nghệ dễ hiểu giúp giải quyết vấn đề và giảm rủi ro.
- Ưu tiên khả năng mở rộng: Trong môi trường tăng trưởng nhanh, hãy ưu tiên khả năng mở rộng ngay cả khi phải đánh đổi một số tính năng cơ sở dữ liệu.
- Thiết kế để mở rộng theo chiều ngang: Chọn kiến trúc có thể bổ sung tài nguyên khi tệp người dùng tăng lên.
Chưa có bình luận nào.