paint-brush
Cách áp dụng mã hóa xóa để bảo vệ dữ liệuby@minio
6,138
6,138

Cách áp dụng mã hóa xóa để bảo vệ dữ liệu

MinIO8m2023/10/17
Read on Terminal Reader

Mã hóa xóa được áp dụng để bảo vệ dữ liệu cho bộ lưu trữ phân tán vì nó có tính linh hoạt và hiệu quả. Nó chia các tệp dữ liệu thành các khối dữ liệu và khối chẵn lẻ rồi mã hóa nó để dữ liệu chính có thể phục hồi được ngay cả khi một phần dữ liệu được mã hóa không có sẵn. Các hệ thống lưu trữ phân tán có thể mở rộng theo chiều ngang dựa vào mã hóa xóa để bảo vệ dữ liệu bằng cách lưu dữ liệu được mã hóa trên nhiều ổ đĩa và nút. Nếu một ổ đĩa hoặc nút bị lỗi hoặc dữ liệu bị hỏng, dữ liệu gốc có thể được xây dựng lại từ các khối được lưu trên các ổ đĩa và nút khác.
featured image - Cách áp dụng mã hóa xóa để bảo vệ dữ liệu
MinIO HackerNoon profile picture
0-item


Mã hóa xóa là phương pháp bảo vệ dữ liệu quan trọng cho các hệ thống lưu trữ phân tán. Bài đăng trên blog này giải thích cách mã hóa xóa đáp ứng các yêu cầu của doanh nghiệp về bảo vệ dữ liệu và cách triển khai mã hóa trong MinIO.

Bảo vệ dữ liệu và lỗi phần cứng

Bảo vệ dữ liệu là điều cần thiết trong bất kỳ môi trường doanh nghiệp nào vì lỗi phần cứng, cụ thể là lỗi ổ đĩa, là điều thường xuyên xảy ra.


Theo truyền thống, các loại công nghệ RAID hoặc sao chép/sao chép khác nhau được sử dụng để cung cấp khả năng chịu lỗi phần cứng. Sao chép và sao chép dựa vào một hoặc nhiều bản sao dữ liệu dự phòng hoàn chỉnh - đây là một cách tốn kém để tiêu tốn dung lượng lưu trữ. Các công nghệ phức tạp hơn như RAID5 và RAID6 cung cấp khả năng chịu lỗi tương tự đồng thời giảm chi phí lưu trữ. RAID là một giải pháp tốt để bảo vệ dữ liệu trên một nút duy nhất, nhưng không thể mở rộng quy mô do các hoạt động xây dựng lại tốn thời gian cần thiết để đưa các ổ đĩa bị lỗi hoạt động trở lại.


Nhiều hệ thống phân tán sử dụng tính năng sao chép 3 chiều để bảo vệ dữ liệu, trong đó dữ liệu gốc được ghi đầy đủ vào 3 ổ đĩa khác nhau và bất kỳ ổ đĩa nào cũng có thể sửa chữa hoặc đọc dữ liệu gốc. Việc sao chép không chỉ kém hiệu quả về mặt sử dụng bộ nhớ mà còn kém hiệu quả về mặt vận hành khi khôi phục sau lỗi. Khi một ổ đĩa bị lỗi, hệ thống sẽ tự chuyển sang chế độ chỉ đọc với hiệu suất giảm trong khi sao chép toàn bộ ổ đĩa còn nguyên vẹn sang ổ đĩa mới để thay thế ổ đĩa bị lỗi.



Sao chép ba chiều

Mã hóa xóa

Mã hóa xóa được áp dụng để bảo vệ dữ liệu cho bộ nhớ phân tán vì nó có tính linh hoạt và hiệu quả. Nó chia các tệp dữ liệu thành các khối dữ liệu và khối chẵn lẻ rồi mã hóa nó để dữ liệu chính có thể phục hồi được ngay cả khi một phần dữ liệu được mã hóa không có sẵn. Các hệ thống lưu trữ phân tán có thể mở rộng theo chiều ngang dựa vào mã hóa xóa để bảo vệ dữ liệu bằng cách lưu dữ liệu được mã hóa trên nhiều ổ đĩa và nút. Nếu một ổ đĩa hoặc nút bị lỗi hoặc dữ liệu bị hỏng, dữ liệu gốc có thể được xây dựng lại từ các khối được lưu trên các ổ đĩa và nút khác.


Mã hóa xóa có thể chịu được số lỗi ổ đĩa tương tự như các công nghệ khác với hiệu quả tốt hơn nhiều bằng cách phân loại dữ liệu trên các nút và ổ đĩa. Có nhiều thuật toán mã hóa xóa khác nhau và các mã có thể phân tách khoảng cách tối đa (MDS) như Reed-Solomon đạt được hiệu quả lưu trữ cao nhất.



Xóa dữ liệu sọc mã hóa và tính chẵn lẻ trên các ổ đĩa.


Trong lưu trữ đối tượng, đơn vị dữ liệu cần được bảo vệ là một đối tượng. Một đối tượng có thể được lưu trữ trên n ổ đĩa. Nếu k biểu thị lỗi có thể xảy ra thì k < n và với mã MDS, hệ thống có thể đảm bảo chấp nhận lỗi ổ đĩa n - k, nghĩa là k ổ đĩa đủ để truy cập vào bất kỳ đối tượng nào.


Xét một đối tượng có kích thước M byte thì kích thước của mỗi đối tượng được mã hóa là M/k (bỏ qua kích thước của siêu dữ liệu). So với bản sao N-way được trình bày ở trên, với mã hóa xóa được định cấu hình cho n = 5 và k = 3, hệ thống lưu trữ phân tán có thể chịu được việc mất 2 ổ đĩa, đồng thời cải thiện hiệu suất lưu trữ lên 80%. Ví dụ: đối với 10 PB sao chép dữ liệu sẽ cần hơn 30 PB dung lượng lưu trữ, trong khi lưu trữ đối tượng sẽ cần 15-20 PB để lưu trữ và bảo vệ an toàn cùng một dữ liệu bằng cách sử dụng mã hóa xóa. Mã hóa xóa có thể được cấu hình cho các tỷ lệ dữ liệu khác nhau đối với các khối chẵn lẻ, mang lại nhiều hiệu quả lưu trữ. MinIO duy trì một công cụ tính mã xóa hữu ích để giúp xác định các yêu cầu trong môi trường của bạn.

Tổng quan về Mã hóa xóa MinIO

MinIO bảo vệ dữ liệu bằng mã hóa xóa nội tuyến theo từng đối tượng (tài liệu MinIO chính thức để tham khảo ) được viết bằng mã lắp ráp để mang lại hiệu suất cao nhất có thể. MinIO sử dụng các hướng dẫn Intel AVX512 để tận dụng tối đa tài nguyên CPU máy chủ trên nhiều nút để mã hóa xóa nhanh. CPU tiêu chuẩn, ổ NVMe nhanh và mạng 100 Gbps hỗ trợ ghi các đối tượng được mã hóa xóa ở tốc độ gần bằng dây.


MinIO sử dụng mã Reed-Solomon để phân chia các đối tượng thành các khối dữ liệu và chẵn lẻ có thể được cấu hình theo bất kỳ mức dự phòng mong muốn nào. Điều này có nghĩa là trong thiết lập 16 ổ đĩa với 8 cấu hình chẵn lẻ, một đối tượng được chia thành 8 dữ liệu và 8 khối chẵn lẻ. Ngay cả khi bạn mất tới 7 ((n/2)–1) ổ đĩa, dù là ổ đĩa chẵn lẻ hay dữ liệu, bạn vẫn có thể tái tạo lại dữ liệu một cách đáng tin cậy từ các ổ đĩa còn lại. Việc triển khai MinIO đảm bảo rằng các đối tượng có thể được đọc hoặc ghi các đối tượng mới ngay cả khi nhiều thiết bị bị mất hoặc không khả dụng.



Mã xóa bảo vệ dữ liệu mà không cần tốn chi phí liên quan đến các phương pháp thay thế.


MinIO chia các đối tượng thành các khối dữ liệu và khối chẵn lẻ dựa trên kích thước của bộ xóa, sau đó phân phối ngẫu nhiên và thống nhất các khối dữ liệu và khối chẵn lẻ trên các ổ đĩa trong một bộ sao cho mỗi ổ đĩa chứa không quá một khối cho mỗi đối tượng. Mặc dù một ổ đĩa có thể chứa cả khối dữ liệu và khối chẵn lẻ cho nhiều đối tượng, nhưng một đối tượng không có nhiều hơn một khối trên mỗi ổ đĩa, miễn là có đủ số lượng ổ đĩa trong hệ thống. Đối với các đối tượng được phiên bản , MinIO chọn cùng một ổ đĩa để lưu trữ dữ liệu và chẵn lẻ trong khi duy trì sự chồng chéo bằng không trên bất kỳ ổ đĩa nào.


Bảng bên dưới cung cấp các ví dụ về mã hóa xóa trong MinIO với các tùy chọn chẵn lẻ và dữ liệu có thể định cấu hình cũng như tỷ lệ sử dụng bộ nhớ đi kèm.


Tổng số ổ đĩa (n)

Ổ đĩa dữ liệu (d)

Ổ đĩa chẵn lẻ (p)

Tỷ lệ sử dụng bộ nhớ

16

số 8

số 8

2,00

16

9

7

1,79

16

10

6

1,60

16

11

5

1,45

16

12

4

1,34

16

13

3

1,23

16

14

2

1.14


Bố cục mặt sau của MinIO thực sự khá đơn giản. Mỗi đối tượng đi vào đều được gán một bộ xóa. Một bộ xóa về cơ bản là một tập hợp các ổ đĩa và một cụm bao gồm một hoặc nhiều bộ xóa, được xác định bởi tổng số đĩa.


Chúng ta hãy xem một ví dụ đơn giản để hiểu định dạng và bố cục được sử dụng trong MinIO.


Điều quan trọng cần lưu ý là định dạng liên quan đến tỷ lệ dữ liệu trên các ổ đĩa chẵn lẻ - cho dù chúng ta có bốn nút với mỗi ổ đĩa đơn hay bốn nút với mỗi nút có 100 ổ đĩa (MinIO thường được triển khai trong cấu hình JBOD dày đặc).


Chúng tôi có thể định cấu hình bốn nút của mình với 100 ổ đĩa mỗi nút để sử dụng kích thước cài đặt xóa là 16, mặc định. Đây là cách bố trí hợp lý và là một phần của định nghĩa về tính toán mã hóa xóa. Cứ 16 ổ đĩa là một bộ xóa được tạo thành từ 8 ổ dữ liệu và 8 ổ đĩa chẵn lẻ. Trong trường hợp này, bộ xóa dựa trên 400 ổ đĩa vật lý, được chia đều cho các ổ dữ liệu và ổ chẵn lẻ, đồng thời có thể chịu được việc mất tới 175 ổ đĩa.


Sử dụng cấu hình mã hóa xóa mặc định MinIO cung cấp khả năng chịu đựng việc mất tới một nửa số ổ đĩa mà không có thời gian ngừng hoạt động hoặc mất dữ liệu.


Siêu dữ liệu XL của MinIO, được viết nguyên tử với đối tượng, chứa tất cả thông tin liên quan đến đối tượng đó. Không có siêu dữ liệu nào khác trong MinIO. Những hàm ý rất ấn tượng - mọi thứ đều khép kín với đối tượng, giữ cho tất cả đều đơn giản và tự mô tả. Siêu dữ liệu XL cho biết thuật toán mã xóa, ví dụ: hai dữ liệu có hai giá trị chẵn lẻ, kích thước khối và tổng kiểm tra. Việc tổng kiểm tra được ghi cùng với dữ liệu cho phép MinIO được tối ưu hóa bộ nhớ trong khi hỗ trợ truyền dữ liệu trực tuyến, mang lại lợi thế rõ ràng so với các hệ thống lưu giữ dữ liệu truyền phát trong bộ nhớ, sau đó ghi vào đĩa và cuối cùng tạo tổng kiểm tra CRC-32.


Xóa các đối tượng được mã hóa được phân loại trên các ổ đĩa dưới dạng khối dữ liệu và chẵn lẻ với siêu dữ liệu XL tự mô tả.


Khi một đối tượng lớn, tức là. lớn hơn 10 MB, được ghi vào MinIO, API S3 sẽ chia nó thành một bản tải lên nhiều phần. Kích thước phần được xác định bởi khách hàng khi tải lên. S3 yêu cầu mỗi phần tối thiểu phải có dung lượng 5 MB (trừ phần cuối cùng) và không quá 5 GB. Một đối tượng có thể có tới 10.000 bộ phận dựa trên thông số kỹ thuật của S3. Hãy tưởng tượng một đối tượng có dung lượng 320 MB. Nếu đối tượng này được chia thành 64 phần, MinIO sẽ ghi các phần đó vào ổ đĩa dưới dạng part.1, part.2,...cho đến part.64. Các phần có kích thước gần bằng nhau, ví dụ: đối tượng 320 MB được tải lên dưới dạng nhiều phần sẽ được chia thành 64 phần 5 MB.


Mỗi phần được tải lên đều được mã hóa xóa theo sọc. Part.1 là phần đầu tiên của đối tượng được tải lên và tất cả các phần đều có sọc ngang trên các ổ đĩa. Mỗi phần được tạo thành từ các khối dữ liệu, khối chẵn lẻ và siêu dữ liệu XL. MinIO xoay vòng ghi để hệ thống không phải lúc nào cũng ghi dữ liệu vào cùng ổ đĩa và tính chẵn lẻ vào cùng ổ đĩa. Mọi đối tượng đều được xoay độc lập, cho phép sử dụng thống nhất và hiệu quả tất cả các ổ đĩa trong cụm, đồng thời tăng cường khả năng bảo vệ dữ liệu.


Để truy xuất một đối tượng, MinIO thực hiện phép tính băm để xác định vị trí đối tượng được lưu, đọc hàm băm và truy cập vào bộ xóa và ổ đĩa cần thiết. Khi đối tượng được đọc, có các khối dữ liệu và chẵn lẻ như được mô tả trong siêu dữ liệu XL. Bộ xóa mặc định trong MinIO là 12 dữ liệu và 4 chẵn lẻ, nghĩa là miễn là MinIO có thể đọc bất kỳ 12 ổ đĩa nào thì đối tượng có thể được phục vụ.

Lợi ích của việc mã hóa xóa và triển khai MiniIO

Mã hóa xóa có một số lợi thế chính so với các công nghệ khác được sử dụng để bảo vệ dữ liệu trong các hệ thống phân tán.


Có một số lý do tại sao mã hóa xóa phù hợp với việc lưu trữ đối tượng hơn RAID. Mã hóa xóa MinIO không chỉ bảo vệ các đối tượng khỏi bị mất dữ liệu trong trường hợp nhiều ổ đĩa và nút bị lỗi, MinIO còn bảo vệ và khắc phục ở cấp độ đối tượng. Khả năng chữa lành một đối tượng tại một thời điểm là một lợi thế đáng kể so với RAID chữa lành ở mức âm lượng. Một đối tượng bị hỏng có thể được khôi phục trong MinIO trong vài giây so với hàng giờ trong RAID. Nếu một ổ đĩa bị hỏng và được thay thế, MinIO sẽ nhận ra ổ đĩa mới, thêm nó vào bộ xóa rồi xác minh các đối tượng trên tất cả các ổ đĩa. Quan trọng hơn, việc đọc và ghi không ảnh hưởng lẫn nhau, mang lại hiệu suất trên quy mô lớn. Hiện có các triển khai MinIO với hàng trăm tỷ đối tượng trên dung lượng lưu trữ petabyte.


Việc triển khai mã xóa trong MinIO giúp cải thiện hiệu quả hoạt động trong trung tâm dữ liệu. Không giống như sao chép, việc xây dựng lại hoặc đồng bộ hóa lại dữ liệu giữa các ổ đĩa và nút không mất nhiều thời gian. Nghe có vẻ tầm thường, nhưng việc di chuyển/sao chép các đối tượng có thể rất tốn kém và một ổ đĩa 16TB bị lỗi và bị sao chép qua mạng trung tâm dữ liệu sang một ổ đĩa khác sẽ gây ra một khoản thuế rất lớn cho hệ thống lưu trữ và mạng.


Nếu bài đăng trên blog này khơi dậy sự tò mò của bạn thì chúng tôi có sẵn Erasure Coding Primer dài hơn. Tải xuống MinIO và bắt đầu bảo vệ dữ liệu bằng mã hóa xóa ngay hôm nay.


Cũng được xuất bản ở đây .