Giới thiệu
Trong bài này ta nói về một dịch vụ rất lâu đời của AWS là S3 (Simple Storage Service). Cùng tìm hiểu tại sao chúng ta lại nên sử dụng nó và vài trường hợp + lời khuyên hữu ích trong việc cải thiện hiệu suất của S3.
Trước khi tìm hiểu về S3, cùng xem qua nếu ta dùng hệ thống lưu trữ truyền thống thì có vấn đề gì và cần giải quyết thế nào.
Thách thức
Khi phát triển ứng dụng, những tài nguyên như hình ảnh, video hoặc dữ liệu khách hàng đều cần phải lưu trữ. Thông thường ta tạo một con máy ảo để triển khai ứng dụng và cũng dùng nó để lưu trữ dữ liệu, đây là cách phổ biến nhất.
Với cách lưu trữ trên thì có hai thách thức sau:
- Làm sao để tăng kích cỡ của dung lượng lưu trữ nếu dung lượng ổ đĩa đã là tối đa
- Làm sao để đáp ứng được tỉ lệ mất dữ liệu luôn nhỏ nhất
Thách thức đầu tiên nếu ứng dụng ta triển khai trên Data Center thì không đơn giản. Ta phải thêm ổ đĩa lớn hơn, dùng lệnh để mount nó vào máy chủ, sau đó copy dữ liệu cũ qua.
Thách thức thứ hai ta cần cấu hình sao lưu dữ liệu và chuyển nó qua một con máy ảo khác. Nhưng cũng không đảm bảo nếu con máy ảo dùng để lưu sao lưu dữ liệu nó cũng chết.
Lữu trữ phân tán
Để giải quyết hai vấn đề trên, Distributed Data Store được phát triển. Distributed Data Store là một mạng lưới gồm nhiều máy tính, với mỗi máy là một Node, và dữ liệu được lưu trữ ở nhiều Node khác nhau.
Bằng cách này ta có thể lưu trữ gần như không giới hạn vì chỉ cần thêm một Node để tăng dung lượng lưu trữ. Và dữ liệu của ta luôn luôn được lưu ở nhiều hơn một Node, do đó sẽ làm giảm được tỉ lệ mất dữ liệu nhiều nhất.
AWS cung cấp một giải pháp cho Distributed Data Store được gọi là AWS Simple Storage Service (AWS S3).
AWS S3
S3 là dịch vụ lưu trữ dạng Distributed Data Store và rất dễ để sử dụng. Dữ liệu được lưu trong S3 ở dạng Object, hay còn được gọi là Object Store.
S3 cung cấp giải pháp lưu trữ dữ liệu không giới hạn và đáp ứng được khả năng tỉ lệ mất dữ liệu thấp. S3 có thể lưu trữ rất nhiều dạng dữ liệu khác nhau như là hình, video, JSON hoặc tệp tin Binary. Miễn là kích cỡ của một tệp tin không quá 5 TB.
S3 Object Store
Cách truyền thống để lưu dữ liệu là dạng thư mục và tệp tin:
- Tệp tin đại điện cho dữ liệu
- Thư mục là cách để nhóm nhiều tệp tin liên quan với nhau
Đối với Object Store cách lưu dữ liệu sẽ khác. Dữ liệu được lưu trữ như Object với 3 thuộc tính:
- Globally Unique Identifier (GUID): định danh cho object, tương tự như dường dẫn của tệp tin ở dưới máy tính
- Metadata của tệp tin: dùng để lưu các thông tin ngoài lề như là loại tệp tin, kích cỡ, ngày tạo, …
- Thuộc tính data dùng để lưu dữ liệu
S3 bucket
Tương tự như thư mục dùng để chứa một nhóm tệp tin thì Bucket dùng để chứa một nhóm Object.
Trường hợp sử dụng
Một vài trường hợp sử dụng phổ biến của S3:
- Dùng để lưu trữ các dữ liệu của người dùng như hình ảnh, video
- Dùng để hosting trang Web tĩnh
- Sao lưu
Hosting trang Web tĩnh
Thông thường để hosting được một trang Web tĩnh. Việc đầu tiên ta cần làm là tạo một con máy ảo, cài Apache hoặc Nginx lên nó để hosting, khá mất thời gian. S3 cung cấp một tính năng giúp ta hosting một trang Web tĩnh cực kì nhanh.
Ta chỉ cần làm các bước đơn giản sau đây. Tạo S3 bucket:
aws s3 mb s3://scaleup-spa
Tải tệp tin lên trên S3:
aws s3 cp index.html s3://scaleup-spa/index.html
Nếu bạn cần tải một thư mục thì làm như sau:
aws s3 cp dist s3://scaleup-spa/ --recursive
Tiếp theo chạy câu lệnh CLI để cập nhật lại S3 Policy cho phép người dùng bên ngoài có thể truy cập được:
aws s3api put-bucket-policy --bucket scaleup-spa --policy file://bucket-policy.json
Nội dung tệp tin bucket-policy.json
:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AddPerm",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::scaleup-spa/*"
]
}
]
}
Cuối cùng bật tính năng Web tĩnh:
aws s3 website s3://scaleup-spa --index-document index.html
Để truy cập được trang Web ta dùng url với định dạng sau:
http://<bucket-name>.s3-website-<region>.amazonaws.com
URL của bucket scaleup-spa:
http://scaleup-spa.s3-website-us-west-2.amazonaws.com
Sao lưu
Đây cũng là một cách dùng phổ biến của S3. Vì S3 được thiết kế với độ bền lên tới 99.999999999%
, có nghĩa là nếu ta lưu 100,000,000,000
tệp tin trên S3 thì trong vòng 1 năm ta có thể chỉ bị mất 1 tệp tin.
Thông thường ta sẽ tạo Linux Cronjob rồi dùng câu lệnh CLI để sync dữ liệu từ local lên trên S3. Ví dụ:
export BACKUP_FOLDER=dist
aws s3 sync $BACKUP_FOLDER s3://scaleup-backup/dist
Nếu ta muốn hồi phục dữ liệu ta chỉ cần tải nó từ S3 về máy chủ:
export LOCAL_PATH=restore
aws s3 cp --recursive s3://scaleup-backup/dist $LOCAL_PATH
Performance
Một số tips để tăng hiệu xuất của ứng dụng khi dùng S3.
CDN
Thay vì truy cập trang Web tĩnh với URL của S3, ta có thể Cache nội dung đó với CDN và tăng tốc độ tải trang tới người dùng. Dịch vụ CDN của AWS tên là CloudFront.
Tên của tệp tin
Trong S3 thì Object được lưu trữ theo thứ tự Alphabetical của tên tệp tin (key). S3 dùng key để xác định Object đó được lưu ở phần nào. Điểm ta cần lưu ý là nếu ta lưu Object với key bắt đầu với ký tự giống nhau sẽ giới hạn I/O Performance.
Ví dụ các Object được lưu với key như sau trong S3 sẽ giới hạn I/O Performance:
image1.png
image2.png
image3.png
image4.png
Ta sửa bằng cách thêm vào trước key một chuỗi bất kì:
a17c3-image1.png
ff211-image2.png
l10e2-image3.png
rd717-image4.png
Khi lưu như vậy I/O Performance của S3 sẽ được tăng lên.
Kết luận
Vậy là ta đã tìm hiểu xong về S3 và tại sao ta lại nên sử dụng nó. Như bạn thấy, rất nhiều lợi ích khi ta sử dụng S3 so với lưu trữ dưới ổ đĩa.
Nếu bài viết có gì sai hoặc cần cập nhật thì liên hệ Admin.
Tham gia nhóm chat của DevOps VN tại Telegram.
Kém tiếng Anh và cần nâng cao trình độ giao tiếp: Tại sao bạn học không hiệu quả?