Giới thiệu

Mọi object S3 đều có một thẻ Thực thể hoặc ETag được liên kết có thể được sử dụng để so sánh tệp và object.

Chúng ta sẽ đề cập đến những lợi thế của việc sử dụng AWS ETag được cung cấp để so sánh, cũng như cách tính ETag của local file.

S3 ETag là gì?

Theo Amazon:

ETag có thể hoặc không phải là một đoạn MD5 về object data

Về cơ bản, nếu đối tượng được tải lên bằng một thao tác PUT duy nhất và không sử dụng khóa KMS hoặc khóa KMS được quản lý của khách hàng để mã hóa thì ETag thu được chỉ là hexdigest MD5 của object.

Tuy nhiên, quan trọng hơn:

Nếu một object được tạo bởi thao tác Tải lên nhiều phần hoặc Sao chép một phần, ETag không phải là thông báo MD5, bất kể phương pháp mã hóa là gì.

Nếu nó không phải là một đoạn MD5 thì nó là gì ?!

Đối với tải lên nhiều phần, ETag là hexdigest MD5 của đoạn MD5 của mỗi phần được nối với nhau, tiếp theo là số phần được phân tách bằng dấu gạch ngang.

Ví dụ: đối với một đối tượng hai phần, ETag có thể trông giống như thế này:

d41d8cd98f00b204e9800998ecf8427e-2

Mà có thể được đại diện bởi:

hexmd5 (md5 (phần 1) + md5 (phần 2) ) – { số bộ phận }

Tại sao chúng không được sử dụng để so sánh?

Nhiều máy khách S3 lưu trữ giá trị tổng kiểm MD5 được tính toán trước của đối tượng để sử dụng trong các hoạt động so sánh và đồng bộ hóa. Điều này tốn thời gian và về cơ bản đã lỗi thời vì ETag hiện có có thể được sử dụng để so sánh dẫn đến các hoạt động tải lên / đồng bộ hóa nhanh hơn.

Thay vào đó, khách hàng nên triển khai một phương pháp để tính ETag để so sánh với local file.

Kỹ thuật đảo ngược S3 ETags

Với một chút nỗ lực và một vài giả định, chúng ta có thể đảo ngược quá trình tính toán ETag và thực hiện phương pháp tổng kiểm tra sẽ tính toán ETag hợp lệ cho các tệp cục bộ.

Điều này sẽ loại bỏ sự cần thiết phải tính toán trước tổng kiểm MD5 và tăng tốc các hoạt động đồng bộ hóa tệp / thư mục.

Điều kiện tiên quyết

Sau đây là cần thiết để tính toán ETag cho một tệp cục bộ:

  1. Bản thân tệp
  2. Partsize/chunksize được sử dụng để tải lên theo nhiều phần

Tính toán partsize / chunksize

Một số máy khách sẽ tải tệp lên S3 bằng cách sử dụng các phần có kích thước đồng nhất là bội số của kích thước 1MB (1048576 byte), một số khác đặt mặc định là 5, 8, 16 MB, v.v.

Giả sử tệp/đối tượng có các thuộc tính sau:

  • Kích thước: 6543277389 byte
  • Etag: d41d8cd98f00b204e9800998ecf8427e-38

Kích thước bộ phận được tính toán sẽ là173015040byte:

  1. 6543277389 / 38 = 172191510.237
  2. 172191510,237 % 1048576 = 225046,23699998856
  3. 172191510.237 + 1048576 – 225046.23699998856 = 173015040.0

Vậy chuyện gì đang xảy ra ở đây?

Dưới đây là bảng phân tích những gì đang xảy ra:

  1. Chia kích thước tệp / đối tượng cho số lượng phần
  2. Xác định hệ số gần nhất là 1 MB (1048576 byte) cho số đó

Tính toán S3 ETag cho một tệp cục bộ

Bây giờ bạn đã có thông tin đó, bạn có thể:

  1. Đọc tệp theo khối 173015040 byte
  2. Tính tổng kiểm MD5 cho mỗi đoạn và lưu trữ nó để sử dụng sau này
  3. Tính toán hexdigest md5 của tổng kiểm tra được ghép nối

Tổng kết

Nếu bạn có thắc mắc hoặc câu hỏi, vui lòng comment bên dưới.

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments