Cách khắc phục vấn đề performance khi khôi phục EBS volume từ snapshot
Minh Bui
Bài viết này hướng dẫn cách giải quyết vấn đề về performance khi tạo EBS volume từ snapshot, bao gồm các phương pháp như EBS initialization và Fast Snapshot Restore.
Tổng quát
Khi làm việc với EBS volume mới được khôi phục từ snapshot, chắc hẳn nhiều bạn đã từng gặp phải vấn đề về performance kém ban đầu. Ví dụ như khi đọc data từ một volume mới được tạo từ snapshot, tốc độ đọc sẽ rất chậm.
Bài viết này sẽ giải thích tại sao điều này xảy ra và hướng dẫn các cách khắc phục vấn đề này.
Khái niệm cơ bản
EBS Volume là gì?
Amazon Elastic Block Store (EBS) volume là block storage được cung cấp bởi AWS, cung cấp persistent storage có khả năng mở rộng cho các EC2 instance. Bạn có thể backup dữ liệu của volume thông qua EBS snapshot.
EBS Snapshot là gì?
EBS snapshot là một tính năng của AWS cho phép bạn tạo các bản sao (point-in-time copies) của EBS volume. Khi tạo EBS snapshot, dữ liệu của source volume sẽ được copy và lưu trữ trong S3 bucket.
Tại sao gặp vấn đề khi truy cập dữ liệu từ volume mới tạo?
Cơ chế Lazy Loading
Khi restore EBS volume từ snapshot, AWS sử dụng cơ chế lazy loading. Tức là ban đầu EBS Volume sẽ chỉ load những thông tin cần thiết và các block tối thiểu để volume có thể chuyển sang trạng thái available nhanh chóng, các block còn lại sẽ được load dần dần từ snapshot và lưu vào EBS khi truy cập vào dữ liệu.
Vấn đề về latency cao
Vấn đề về latency cao xảy ra khi chúng ta cố gắng truy cập vào những vùng của volume mà data chưa được load. Điều này xảy ra vì data cần phải được fetch từ snapshot và load vào volume trước khi có thể được access.
Khi truy cập vào block chưa được load:
- Request sẽ trigger việc fetch data từ S3 (nơi lưu snapshot)
- Data được download và write vào EBS volume
- Chỉ sau đó data mới có thể được access
Quá trình này tạo ra latency đáng kể so với việc read data đã có sẵn trên volume.
Các cách để cải thiện latency
Tiếp theo mình sẽ review các kỹ thuật có thể giúp bạn cải thiện vấn đề latency khi làm việc với EBS volume mới tạo từ snapshot.
1. EBS Initialization (Pre-warming)
EBS initialization, hay còn gọi là pre-warming, là quá trình fetch toàn bộ các storage block từ S3 và ghi vào EBS volume.
Có thể dùng các tool opensource như dd, fio để đọc toàn bộ dữ liệu từ volume. Quá trình này sẽ bắt buộc EBS phải load toàn bộ data từ snapshot vào volume, đảm bảo rằng tất cả các block đã được khởi tạo và có thể truy cập ngay lập tức.
Sử dụng dd command
Trên Linux system, chúng ta có thể initialize volume bằng dd command. DD được cài đặt mặc định trên các hệ thống Linux.
Ví dụ, nếu volume của bạn được attach vào EC2 instance với device name là /dev/xvdf, bạn có thể chạy command sau để initialize nó:
Command:
sudo dd if=/dev/xvdf of=/dev/null bs=1M
Lưu ý về EBS Initialization
Các Linux command như dd và fio sẽ cần thời gian để chạy và load hết data, do đó với các volume lớn hơn, có thể mất nhiều giờ để hoàn thành.
2. EBS Fast Snapshot Restore (FSR)
Nếu bạn muốn volume của mình cung cấp provisioned performance ngay lập tức, bạn có thể sử dụng Amazon EBS Fast Snapshot Restore (FSR).
FSR là gì?
Amazon EBS fast snapshot restore (FSR) là tính năng cho phép restore một volume từ snapshot, mà đảm bảo rằng volume này đã được load data từ trước, không gây ra bất cứ vấn đề gì về performance. Việc này giúp bạn có thể sử dụng volume với performance đầy đủ ngay lập tức sau khi restore mà không phải chờ đợi quá trình initialization hoàn tất.
Những điều cần lưu ý về FSR
Chi phí:
- FSR không phải là tính năng miễn phí
- Sẽ bị tính phí cho mỗi phút mà fast snapshot restore được enable cho một snapshot trong một Availability Zone cụ thể
- Chi phí tối thiểu là một giờ
Cách enable FSR
FSR được mặc định là disable. Nếu enable nó cho một snapshot, bạn sẽ bị tính phí cho đến khi disable nó.
Sử dụng Console:
Select snapshot và choose Actions → Snapshot Setting → Manage fast snapshot restore
Chọn các zone cần enable FSR và nhấn Enable
Sau khi sử dụng FSR, nếu bạn thử restore lại một volume và truy cập, bạn sẽ thấy nó có performance bình thường, không bị chậm nữa.
Tổng kết
Như vậy là vừa rồi mình đã hướng dẫn cách giải quyết vấn đề về performance và độ trễ khi làm việc với EBS volume được tạo từ snapshot. Các phương pháp chính bao gồm:
- EBS Initialization (Pre-warming): Sử dụng dd hoặc fio command để pre-load data từ snapshot vào volume. Phương pháp này miễn phí nhưng mất thời gian với volume lớn.
- Fast Snapshot Restore (FSR): Giải pháp premium cho phép volume deliver full performance ngay lập tức. Phù hợp khi cần performance ngay từ đầu và có budget cho FSR.
Tuỳ vào nhu cầu về thời gian và budget mà bạn có thể lựa chọn phương pháp phù hợp.