Kiến trúc lưu trữ ảnh của Facebook

Tác giả sysadmin, T.M.Hai 12, 2023, 05:06:55 CHIỀU

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 1 Khách đang xem chủ đề.

Kiến trúc lưu trữ ảnh của Facebook


Facebook đã xây dựng Haystack, một hệ thống lưu trữ đối tượng được thiết kế để lưu trữ ảnh trên quy mô lớn. Nền tảng này lưu trữ hơn 260 tỷ hình ảnh, tương đương hơn 20 petabyte dữ liệu. Một tỷ bức ảnh mới được tải lên mỗi tuần, tương đương khoảng 60 terabyte dữ liệu. Lúc cao điểm, nền tảng này phục vụ hơn một triệu hình ảnh mỗi giây.

Hãy cùng tìm hiểu kiến trúc lưu trữ ảnh dựa trên NAS (Network-attached storage) của Facebook đã ngừng hoạt động và các vấn đề dẫn đến nhu cầu về hệ thống lưu trữ đối tượng mới (Haystack).

1. NAS đã ngừng hoạt động trên kiến trúc lưu trữ ảnh dựa trên NFS


Trình duyệt gửi yêu cầu đến máy chủ web Facebook cho một bức ảnh cụ thể.

Máy chủ web tạo url cho ảnh và hướng trình duyệt tới CDN. Nếu đó là lỗi bộ nhớ đệm, CDN sẽ trả về ảnh.

Nếu không, CDN sẽ gửi yêu cầu đến máy chủ ảnh. Máy chủ ảnh xử lý yêu cầu chứa url. Họ gắn kết tất cả các ổ đĩa được xuất bởi các thiết bị NAS này qua NFS. Họ lấy ảnh từ bộ lưu trữ NAS qua NFS (Hệ thống tệp mạng).

Ảnh được trả về CDN. CDN lưu trữ ảnh vào bộ nhớ đệm và chuyển tiếp nó tới trình duyệt.

2. Vấn đề với cơ sở hạ tầng lưu trữ ảnh này

Đối với mỗi ảnh được tải lên, Facebook tạo và lưu trữ bốn ảnh có kích thước khác nhau. Ảnh và việc tra cứu siêu dữ liệu liên quan trong NAS đã gây ra quá nhiều hoạt động trên ổ đĩa lên tới gần mười lần chỉ để truy xuất một hình ảnh.

Nhóm kỹ thuật đã giảm các hoạt động trên đĩa từ mười xuống còn ba bằng cách giảm kích thước thư mục của ổ đĩa NFS từ hàng nghìn tệp trên mỗi thư mục xuống còn hàng trăm.

Tìm nạp ảnh từ bộ lưu trữ bao gồm nhiều bước:

  • Tên tập tin được dịch sang số inode. Inode là mã định danh duy nhất cho một tập tin. Nó lưu trữ các thuộc tính (siêu dữ liệu) và vị trí đĩa của đối tượng tệp. Chỉ bước này có nhiều bước phụ.
  • Inode được đọc từ đĩa.
  • Các tập tin từ số inode được truy cập.

Nếu bạn cần hiểu inode, xử lý tệp và cách hoạt động của mạng trong hệ thống tệp phân tán. Bài viết này về hệ thống tập tin mạng thảo luận chi tiết về khái niệm này.

Trong hệ thống NAS, việc đọc siêu dữ liệu từ đĩa là một điểm nghẽn.

Hầu hết siêu dữ liệu ảnh chưa được đọc và tiêu tốn dung lượng lưu trữ đáng kể. Ngoài ra, siêu dữ liệu đã được tải từ đĩa vào bộ nhớ chính. Để tìm nạp ảnh ở quy mô hàng tỷ, điều này đã trở thành nút thắt thông lượng. Điều này giới hạn số lần đọc có thể được thực hiện trên đĩa trong một thời gian quy định.

3. Còn việc sử dụng CDN để phân phối ảnh thì sao?

Hai vấn đề với điều này:

Lưu trữ quá nhiều dữ liệu trên CDN không hiệu quả về mặt chi phí.

CDN sẽ chỉ phục vụ dữ liệu được tải lên gần đây và được truy cập thường xuyên. Khi nói đến ảnh của người dùng trên mạng xã hội, có một số lượng đáng kể các yêu cầu dài (ảnh ít phổ biến hơn). Tất cả các yêu cầu dài đều bỏ lỡ CDN.

4. Lưu trữ đối tượng Haystack

Haystack được thiết kế với một số điểm quan trọng sau:

  • Thông lượng cao và độ trễ thấp. Giữ các hoạt động của đĩa để tìm nạp tối đa một ảnh cho mỗi lần đọc.
  • Khả năng chịu lỗi.
  • Hiệu quả chi phí.

Duy trì các hoạt động của ổ đĩa để tìm nạp ảnh ở mức tối đa một ảnh cho mỗi lần đọc và giảm đáng kể siêu dữ liệu ảnh cho phép tải ảnh vào bộ nhớ chính đã khiến Haystack trở thành hệ thống lưu trữ có độ trễ thấp và thông lượng cao.

Việc tải siêu dữ liệu vào bộ nhớ chính giúp giảm đáng kể các hoạt động I/O của ổ đĩa, cung cấp số lần đọc mỗi giây nhiều hơn gấp 4 lần so với thiết lập dựa trên NAS.

Haystack có khả năng chịu lỗi và có tính sẵn sàng cao bằng cách sao chép ảnh trên các trung tâm dữ liệu ở các vị trí địa lý riêng biệt.

Nếu bạn muốn học cách thiết kế các hệ thống phân tán quy mô lớn bắt đầu ngay từ con số 0, hãy xem lộ trình học tập Kiến trúc phần mềm từ 0 đến thành thạo, bao gồm ba khóa học mà tôi đã viết.

Lộ trình học tập hướng dẫn bạn từng bước về các nguyên tắc cơ bản của kiến trúc phần mềm, cơ sở hạ tầng đám mây và thiết kế hệ thống phân tán, bắt đầu ngay từ con số 0. Bạn phải từ chỗ không có kiến thức về miền đến việc trở thành chuyên gia trong việc thiết kế các hệ thống phân tán quy mô web như YouTube, Netflix, ESPN, v.v.

5. Kiến trúc Haystack


Trong thiết kế lưu trữ ảnh này, những hình ảnh phổ biến được cung cấp từ CDN và những bức ảnh đuôi dài được Haystack xử lý.

Kiến trúc Haystack bao gồm 3 thành phần cốt lõi:

Lưu trữ Haystack, Thư mục và Bộ đệm.

Khi người dùng yêu cầu một bức ảnh, trình duyệt sẽ yêu cầu máy chủ web. Máy chủ web nhận sự trợ giúp của Thư mục Haystack để tạo URL ảnh.

6. Thư mục Haystack

Thư mục Haystack, ngoài việc tạo URL, còn ánh xạ các khối logic vào các khối vật lý. Máy chủ web sử dụng ánh xạ này để tạo URL ảnh. Ánh xạ này cũng có ích khi tải ảnh lên.

Các chức năng khác của thư mục là:

Cân bằng tải ghi trên các khối logic và đọc trên các khối vật lý.

Xác định xem yêu cầu về ảnh sẽ được xử lý bởi bộ đệm Haystack hay CDN.

Xác định các khối logic đã chuyển sang chế độ chỉ đọc vì lý do vận hành hoặc đã đạt đến dung lượng lưu trữ.

Yêu cầu ảnh sau đó được chuyển đến CDN. Nếu CDN bỏ sót, yêu cầu sẽ chuyển tiếp tới Haystack Cache.

7. Bộ đệm Haystack

Bộ đệm là bảng băm phân tán sử dụng id ảnh làm khóa để định vị dữ liệu. Nếu bộ đệm không giữ ảnh, nó sẽ tìm nạp ảnh từ lưu trữ và trả về CDN hoặc trình duyệt của người dùng.

Bộ đệm chủ yếu được sử dụng để chặn các yêu cầu đối với các máy lưu trữ Haystack có khả năng ghi. Bởi vì ngay khi một bức ảnh được tải lên, sẽ có yêu cầu đọc nó. Và hệ thống tệp của khối lượng công việc lưu trữ ảnh hoạt động tốt hơn khi thực hiện đọc hoặc ghi chứ không phải cả hai. Bộ đệm chặn tất cả các yêu cầu đọc đối với các máy lưu trữ có khả năng ghi để cải thiện thông lượng. Vì lý do này, ảnh sau khi tải lên lưu trữ hỗ trợ ghi sẽ được chủ động đẩy vào bộ đệm.

8. Lưu trữ Haystack

Các yêu cầu đọc và ghi vào các máy Haystack Store được cân bằng bởi Thư mục Haystack. lưu trữ là hệ thống lưu trữ liên tục cho các bức ảnh.

Các yêu cầu đọc tới lưu trữ chứa thông tin như id ảnh cho một ổ đĩa logic nhất định và từ một ổ đĩa vật lý nhất định. Nếu lưu trữ không tìm thấy ảnh thì sẽ trả về lỗi.

Để định vị ảnh, máy lưu trữ chỉ cần id ảnh và id ổ đĩa hợp lý.

Một máy lưu trữ quản lý nhiều tập vật lý, mỗi tập chứa hàng triệu bức ảnh. Mỗi ổ đĩa vật lý có kích thước 100 GB được ánh xạ tới một ổ đĩa logic.

Dung lượng lưu trữ của lưu trữ được sắp xếp theo khối lượng vật lý. Ví dụ: một máy chủ có dung lượng lưu trữ 10 terabyte sẽ bao gồm 100 ổ vật lý, mỗi ổ có 100 GB dung lượng lưu trữ.

Các khối vật lý trên các máy khác nhau được nhóm lại thành các khối logic. Khi một bức ảnh được lưu trữ trên một ổ đĩa logic, nó sẽ được ghi vào tất cả các ổ đĩa vật lý tương ứng với ổ đĩa logic đó.

Sự dư thừa này ngăn ngừa mất dữ liệu trong trường hợp ổ cứng và các lỗi phần cứng khác.

9. Phục hồi từ những thất bại

Hệ thống lưu trữ chạy trên phần cứng hàng hóa. Những lý do chính gây ra lỗi hệ thống bao gồm ổ cứng bị lỗi, bộ điều khiển RAID, bo mạch chủ, v.v.

Để đảm bảo tính sẵn sàng cao, các tác vụ nền của hệ thống được chạy nhằm phát hiện và sửa chữa lỗi. Kiểm tra định kỳ được thực hiện để kiểm tra tình trạng của máy móc trong lưu trữ và tính khả dụng của khối lượng hợp lý.

Nếu phát hiện sự cố với bất kỳ máy lưu trữ nào, tất cả các ổ đĩa logic trên máy đó sẽ ngay lập tức được đánh dấu là chỉ đọc.

Các nguyên nhân thất bại cơ bản được điều tra thủ công.

Vâng, mọi người! Điều này là khá nhiều đó. Nếu bạn thấy nội dung này hữu ích, hãy cân nhắc chia sẻ nội dung đó với mạng của bạn để tiếp cận tốt hơn.