Trong bài viết này, chúng ta sẽ cùng khám phá câu chuyện đấu tranh của Adam D'Angelo, đồng sáng lập Quora, và những kỹ thuật sharding MySQL được sử dụng tại Quora để xử lý khối lượng dữ liệu khổng lồ.
Bắt đầu từ Giấc Mơ
Mùa hè năm 2005, Adam D'Angelo đã gia nhập Facebook và nhanh chóng trở thành Giám đốc Công nghệ (CTO). Tuy nhiên, Adam cảm thấy rằng công việc tại Facebook không còn phù hợp với đam mê và mục tiêu của mình, và thay vào đó, anh quyết định khởi nghiệp với Quora - một nền tảng hỏi đáp.
Nhu Cầu Dữ Liệu tại Quora
Quora đã nhanh chóng phát triển, với nhu cầu lưu trữ dữ liệu lên tới hàng chục terabyte và hàng trăm nghìn lượt truy vấn mỗi giây (QPS). Để đáp ứng nhu cầu này, Quora đã chọn MySQL để lưu trữ và cải thiện hiệu suất cho các dữ liệu quan trọng như câu hỏi, trả lời, lượt upvote và bình luận, vượt trội hơn so với các cơ sở dữ liệu NoSQL như HBase.
Giải Pháp Sharding MySQL
Các kỹ sư tại Quora đã kế thừa công nghệ sharding để chia nhỏ cơ sở dữ liệu MySQL trên nhiều máy chủ khác nhau với mục tiêu nâng cao hiệu suất hệ thống. Sharding là kỹ thuật phân tán một cơ sở dữ liệu lớn ra nhiều máy chủ để tăng khả năng lưu trữ và xử lý dữ liệu, giúp vượt qua giới hạn của các máy chủ đơn lẻ.
Khái Niệm Shard MySQL là gì?
Mỗi máy chủ đều có giới hạn về khả năng lưu trữ và xử lý dữ liệu. Sharding cho phép chia nhỏ khối lượng công việc từ một máy chủ duy nhất ra nhiều máy chủ, từ đó cải thiện khả năng lưu trữ và hiệu suất xử lý của toàn hệ thống.
Cách Thực Hiện Sharding MySQL tại Quora
Mặc dù MySQL cho phép thực hiện sharding, nhưng việc tự động hóa không được hỗ trợ. Các kỹ sư Quora đã kết hợp cả sharding dọc (vertical sharding) và horizontal sharding để quản lý dữ liệu.
Sharding Dọc (Vertical Sharding)
Vertical sharding là một kỹ thuật phân tán dữ liệu, nơi các bảng dữ liệu khác nhau được lưu trữ trên các máy chủ riêng biệt. Quora đã sử dụng mô hình leader-follower trong đó leader xử lý yêu cầu đọc-ghi và các follower chỉ xử lý yêu cầu đọc. Việc kết hợp này giúp cải thiện khả năng ghi và mở rộng.
Sharding Ngang (Horizontal Sharding)
Horizontal sharding chia nhỏ một bảng logic thành nhiều bảng vật lý. Mỗi bảng lớn được phân tán lên nhiều máy chủ khác nhau, giúp giảm tải cho từng máy chủ và cải thiện khả năng xử lý cùng với hiệu suất của hệ thống. Quora đã quyết định xây dựng giải pháp sharding riêng để tối ưu hóa quy trình làm việc.
Cấp Độ và Phương Pháp Thực Hiện Sharding
Hai cấp độ sharding quan trọng tại Quora là cấp độ cơ sở dữ liệu logic và cấp độ bảng. Các phương pháp phổ biến bao gồm phân vùng dựa trên hàm băm (hash-based partitioning) và phân vùng dựa trên phạm vi (range-based partitioning).
Thiết Kế API Truy Vấn Bảng Shard
Quora đã thiết kế API để nhận tham số và tạo các lệnh SQL, giúp giảm thiểu rủi ro tấn công SQL injection và hỗ trợ truy vấn dữ liệu hiệu quả từ các bảng đã được shard.
Đánh Giá Số Lượng Shard Thích Hợp
Việc xác định số lượng shard cần cân nhắc kỹ lưỡng, ngoại trừ việc giới hạn số lượng shard, không nên chia nhỏ dữ liệu quá nhiều để đảm bảo hiệu suất tối ưu.
Kết Luận
Quora đã trở thành một tên tuổi lớn trong ngành công nghệ, và Adam D'Angelo là một ví dụ điển hình cho những ai dám theo đuổi ước mơ. Việc áp dụng các kỹ thuật sharding MySQL đã giúp Quora xử lý khối lượng dữ liệu lớn một cách hiệu quả. Chúng tôi hi vọng bạn tìm thấy thông tin bổ ích từ bài viết này!
Tham gia Cộng Đồng Hệ Thống Thiết Kế Việt Nam: Chúng tôi đã tạo ra một nhóm để mọi người cùng chia sẻ và học hỏi về thiết kế hệ thống. Hãy tham gia để với mục tiêu xây dựng một cộng đồng mạnh mẽ về Hệ thống Thiết kế tại Việt Nam nhé!
Nhóm Facebook: https://www.facebook.com/groups/sydexa
Kênh TikTok: https://www.tiktok.com/@sydexa.com
source: viblo