Thiết kế Distributed File System với GFS Phần 1

Bài viết được sự cho phép của tác giả Kiên Nguyễn

Tiếp theo chuỗi bài viết về Toàn tập về thiết kế Scalable Web Application II và Distributed cache là gì? – điều gì khiến nó trở nên mạnh mẽ?, hôm nay Kieblog hân hạnh giới thiệu chuỗi bài về Distributed File System Design (Thiết kế hệ thống phân tán lữu trữ file).

  Bài toán đồng thuận trong Distributed Systems
  Distributed cache là gì? – điều gì khiến nó trở nên mạnh mẽ?

Bài viết tập trung vào thiết kế hệ thống (Design System) cho việc lưu trữ file. Đảm bảo tính scalable cho system và sử dụng Distributed Concepts (Hệ thống phân tán).

Bắt đầu ngay thôi nào!

1. Tiếp cận với Distributed File System

Hiện nay, hẳn không lập trình viên nào còn lạ lẫm với Google Drive, Dropbox. Đây là những hệ thống quản lý file ở quy mô lớn, scalable cho hàng tỷ người dùng, hàng triệu triệu request mỗi giây.

Việc một lượng lớn người sử dụng đặt yếu tố mở rộng (Scalable) lên hàng đầu. À nhân tiện thì bài viết này cũng có sử dụng một số phần nội dung về Google File System (GFS). Anh em có thể tham khảo thêm về GFS ở phần tham khảo của bài viết.

Để đảm bảo tính ổn định của hệ thống, như dữ liệu đã public về design thông qua GFS, ta có thể biết các hệ thống này đang thiết kế theo hướng phân tán (Distributed File System).

Nói sơ về Google File System thì nó là design cách quản lý cơ sở dữ liệu của Google. Trong GFS:

  • Customized for Google
  • Hỗ trợ lưu Large File
  • Eventual Consistency (đảm bảo tính nhất quán)
Distributed File SystemKiến trúc Google File System. Nguồn ảnh/ Source: The Google File System – Google Research

2. Chunk và Replica trong Google File System

Khi thiết kế về Google File System được chia sẻ, ta biết rõ rằng Google hỗ trợ lưu file với kích thước vô cùng lớn. Các file có thể có kích thước vào khoảng TeraByte, MegaByte.

Tất nhiên nội dung các file sẽ được chia sẻ ra thành nhiều phần và lưu trữ ở nhiều Chunk khác nhau. Không bao giờ một file có kích thước quá lớn được lưu trữ vào duy nhất một machine.

Distributed File SystemMỗi file sẽ được phân tách thành các phần có kích thước 64MB. (Số lượng chunk có kích thước 64MB tùy thuộc vào kích thước file)

Tuy nhiên nếu một phần file chỉ ở một chunk vẫn xảy ra rủi ro về file. Nếu một chunk gặp vấn đề và down, các phần để tập hợp một file có thể không đủ. Dẫn tới file bị broken.

Để giải quyết vấn đề này, mỗi part of file sẽ lưu trữ ở 3 chunk khác nhau. Nếu một chunk down, vẫn có cách để lấy file đó ở các chunk khác. Việc lưu trữ ở nhiều chunk nhỏ đảm bảo cho sự phân tán (Distributed) trong Distributed File System.

Dễ dàng scaling khi có nhiều file hoặc nội dung file lớn.

Distributed File SystemPhần nội dung số 1 sẽ lưu ở 3 chunk khách nhau là Server 1, Server 2 và Server 3.

3. Chunk Location Table System

Trường hợp file được chia thành các phần nhỏ. Mỗi lúc cần truy xuất file ở một node, ta sẽ sử dụng Location Table System.

Bảng này cho biết part đó đang nằm ở đâu?. Chunk nào?

Distributed File System

Trường hợp ở trên File được chia thành 8 phần. Các chunk id đại diện cho từng phần (tất nhiên là duy nhất Unique). Vị trí của các chunk nằm trên replica nào sẽ được ghi vào table này. Table này có thể lưu trữ vào RAM ở Master.

Trên đây là cái nhìn tổng quan nhất về Distributed File System và Google File System. Cách thức lưu trữ file lớn và những gì lưu trữ ở chunk. Tiếp theo, ở phần hai sẽ bàn về How System Work?, bổ sung một số thiết kế detail.

Anh em có thể tiếp tục đón đọc phần 2 chuỗi bài viết này ở đây.

4. Tham khảo

Thank for your time spend to read – Have nice day with your family – Happy Coding!

Bài viết gốc được đăng tải tại kieblog.vn

Có thể bạn quan tâm:

Xem thêm Việc làm Developer hấp dẫn trên TopDev