5

Giả sử bạn có instance1, instance2 và instance3 chạy trong AWS.Cách tốt nhất để cho phép mọi người tải tệp lên trong môi trường cân bằng tải AWS là gì?

Tất cả đều đang chạy Apache và ứng dụng web mà bạn chạy cần cho phép người dùng tải lên hình ảnh là trường hợp trong nhiều dự án.

Ngoài ra khi bạn đang hiển thị hình ảnh bạn cần cắt nó đúng kích cỡ, do đó, về cơ bản bạn cần đảm bảo rằng tất cả các phiên bản đều có quyền truy cập vào cùng một tệp vào mọi lúc.

Vì vậy, giả sử người dùng tải hình ảnh lên trường hợp 1 và một người dùng khác đang truy cập một trang có cùng hình ảnh được hiển thị ở kích thước 100x100 và anh ấy truy cập thể hiện2. Một người dùng khác đang cố gắng xem cùng một hình ảnh có kích thước 300x300 trên cá thể3. Và nhiều kích thước khác không dễ dự đoán được.

Vì vậy, về cơ bản bạn cần một hệ thống tệp được phân phối, tôi đang sử dụng Gluster FS. Vì vậy, tất cả các cá thể đều có quyền truy cập vào cùng một tệp, khi có yêu cầu xem hình ảnh, tôi có một tập lệnh PHP để kiểm tra xem hình ảnh đó đã được thay đổi kích thước cho các thứ nguyên nhất định hay không, nếu có nó sẽ hiển thị chúng nếu không nó sẽ thay đổi kích thước và sau đó hiển thị lại.

Gluster FS đang hoạt động rất suôn sẻ và tôi rất hài lòng với nó, ngoại trừ việc tôi nghĩ rằng tôi đang sáng tạo lại bánh xe và AWS nên có một số giải pháp cho việc này. Với lệnh trên cùng, tôi có thể thấy rằng glusterfs luôn sử dụng một số CPU của tôi.

Tôi cũng sử dụng CloutFront để lưu bộ nhớ cache đầu ra của tập lệnh thay đổi kích thước của tôi, làm giảm tải máy chủ ở mức độ tốt nhưng Gluster FS vẫn tốn kém để chạy.

Bạn có thể sử dụng rsync và một số công việc cron để làm tương tự mà không cần Gluster FS nhưng đó là rất nhiều công việc và không đáng tin cậy, bởi vì bạn cần biết khi nào kích hoạt quá trình rsyncing, và bạn vẫn sẽ không có được những lợi ích tuyệt vời mà Gluster FS cung cấp. Tôi cũng đã thử s3fs và tôi chỉ muốn nói đó là một cơn ác mộng tuyệt đối.

Ổ đĩa NFS cũng có vẻ rất nguyên thủy so với Gluster FS, tôi nghĩ rằng họ sử dụng UDP, vì vậy họ xử lý dữ liệu của bạn như nó không quan trọng.

Vậy cách tốt nhất để làm điều gì đó như thế này là gì? Tôi đã cố gắng để tìm một hệ thống tập tin phân phối được cung cấp bởi AWS vì tôi nghĩ rằng nhiều nhà phát triển sẽ có vấn đề tương tự hoặc tương tự nhưng không có bất kỳ.

Bạn có thể nói chỉ cần tải lên s3, nhưng s3 không giúp tôi, tôi cần biết nếu hình ảnh đã được thay đổi kích cỡ hay không, sau đó thay đổi kích thước và phục vụ hoặc chỉ phục vụ, vì vậy tôi cần một cái gì đó mà tôi có thể viết kịch bản cho.

Bạn cũng có thể nói rõ tại sao bạn không thay đổi kích thước tất cả các hình ảnh đầu tiên và sau đó tải chúng lên tất cả để s3, lý do tôi không thể làm điều đó là

  1. Có khoảng 1 triệu hình ảnh, và 100 kích thước, vì vậy bạn, chúng tôi đang tìm kiếm quảng cáo một số lượng khổng lồ các tập tin được chuyển đổi
  2. có thể có kích thước mới được bổ sung mỗi ngày, vì vậy thay đổi kích thước chiến lược đầu tiên không hoạt động
+2

xuất sắc câu hỏi. Tôi đã không hoàn toàn hiểu tại sao bạn bị giới hạn viết một kịch bản khi xác minh xem một hình ảnh có tồn tại hay không. Tại sao bạn không chỉ cần đi trước, lưu trữ tất cả mọi thứ trong S3, và sử dụng các SDK có sẵn để kiểm tra xem tập tin có tồn tại hay không, và tải lên các hình ảnh đã thay đổi kích cỡ mới lên S3? – Viccari

Trả lời

0

tôi sẽ aproach nó với 2 S3 nhóm:

  • Hình ảnh chính: tải lên hình ảnh ở độ phân giải thô/độ phân giải tốt nhất được sử dụng trên trang web, không có thời gian hết hạn.
  • Thùng bộ nhớ cache: tạo hình ảnh theo yêu cầu, bạn có thể sử dụng timthumb để tạo chúng với kích thước được yêu cầu và đặt thời gian hết hạn.

Khi người dùng yêu cầu hình ảnh bạn kiểm tra nếu tồn tại trên nhóm bộ nhớ cache, nếu không bạn tạo nó, lưu trữ trên nhóm bộ nhớ cache và gửi nó từ đó.

Lưu ý:

  • Coi chừng với timthumb, các phiên bản cũ có vấn đề bảo mật, bạn có thể kiểm tra lựa chọn thay thế.
  • Squid-cache có thể giúp quá, bạn có thể thay thế các thùng nhớ cache với một ví dụ EC2 với nó

này chỉ aproach của tôi, nhưng cảm thấy tự do để trả lời và nắm bắt nó sâu sắc hơn

Các vấn đề liên quan