Khủng hoảng của Notion: Họ đã giải quyết vấn đề cơ sở dữ liệu như thế nào
Năm 2021, độ phổ biến của Notion tăng vọt, nhưng dịch vụ của nó trở nên chậm chạp không thể chịu đựng được. Vấn đề nằm ở mô hình dữ liệu độc đáo của nó, nơi mọi thứ đều là một khối, có thể là một đoạn văn bản, một hình ảnh, hoặc chính một trang hoàn chỉnh. Cấu trúc này cho phép khả năng linh hoạt đáng kinh ngạc nhưng cũng đồng nghĩa với việc ngay cả một tài liệu đơn giản cũng có thể dẫn đến hàng trăm hoặc hàng nghìn mục nhập cơ sở dữ liệu.
Mỗi khối được lưu trữ dưới dạng một hàng trong cơ sở dữ liệu Postgres với ID duy nhất của riêng nó. Khối lượng dữ liệu khổng lồ cuối cùng đã khiến người dùng nhận thấy độ trễ tăng lên khi yêu cầu dữ liệu trang. Cơ sở dữ liệu đơn khối duy nhất của Notion không thể xử lý được tải, và quy trình vacuum Postgres của chúng bắt đầu cài đặt liên tục, dẫn đến các bảng phình to và hiệu suất giảm sút.
Giải pháp: Phân tán ngang và Sharding
Notion quyết định sharding cơ sở dữ liệu của họ, tạo ra 32 phiên bản cơ sở dữ liệu vật lý, mỗi phiên bản có 15 lược đồ logic riêng biệt. Mỗi lược đồ sẽ có bảng riêng của nó, như khối, không gian làm việc và nhận xét, tổng cộng 480 shard trên 32 cơ sở dữ liệu vật lý. Cơ chế định tuyến được xác định ở cấp độ ứng dụng để xác định vị trí lưu trữ dữ liệu.
Thách thức: Di chuyển dữ liệu và giới hạn kết nối
Notion phải di chuyển dữ liệu hiện có của họ sang các shard mới trong khi duy trì tính nhất quán dữ liệu. Họ đã sử dụng sao chép logic Postgres để liên tục áp dụng các thay đổi mới vào các cơ sở dữ liệu mới. Quá trình này liên quan đến việc thiết lập ba bản tin Postgres trên mỗi cơ sở dữ liệu hiện có, với mỗi bản tin bao gồm năm lược đồ logic trên các cơ sở dữ liệu mới. Các đăng ký được tạo ra để sử dụng một trong ba bản tin, có hiệu quả bao phủ toàn bộ tập hợp dữ liệu liên quan.
Tuy nhiên, việc kiểm thử đã phát hiện ra một vấn đề nghiêm trọng: mỗi shard cũ được ánh xạ đến ba shard mới, yêu cầu họ phải giảm số lượng kết nối trên mỗi phiên bản PG bouncer hoặc tăng lên gấp 3 lần. Họ đã chọn tăng giới hạn kết nối, cho phép họ duy trì số lượng kết nối phù hợp trước khi triển khai các thay đổi vào sản xuất.
Kết quả: Tăng công suất và cải thiện hiệu suất
Dự án recharting là một thành công đáng kể đối với Notion. Một số kết quả chính bao gồm:
- Tăng công suất
- Cải thiện hiệu suất
- Sử dụng CPU và IOPS giảm đáng kể, với mức sử dụng mới chỉ ở mức khoảng 20% trong giờ cao điểm so với 90% trước đây
- Kiến trúc mới này đã định vị Notion để xử lý sự tăng trưởng người dùng liên tục và nhu cầu dữ liệu liên tục.
Tóm lại, khủng hoảng của Notion đã được giải quyết thông qua sự kết hợp của việc mở rộng quy mô theo chiều ngang và sharding, di chuyển dữ liệu cẩn thận và các giải pháp khéo léo cho các giới hạn kết nối. Kiến trúc mới của họ đã định vị họ để tiếp tục phát triển và thành công.