Lấy ảnh trên S3 Amazon chậm
Chào mọi người, mình có vấn đề thắc mắc mong mọi người giúp đỡ ạ. Hiện tại hệ thống mình đang dùng S3 của amazon để lưu trữ hình ảnh, người dùng của app thì ở Việt Nam nên mình chọn region ở singapo nhưng request lấy hình rất chậm. Như vậy thì do nguyên nhân là gì ạ, mình có nên mua một con server đặt ở vn để chuyên lưu ảnh ứng dụng của mình không. Với lại mình thấy mọi người thường dùng EC2 nhưng mình thấy vì server đặt xa nên thường rất chậm, mình nghĩ rằng một con server cùi đặt ở vn phục vụ user vn thì sẽ nhanh hơn con server khủng của amazon đặt ở xa, như vậy có đúng không nhỉ Mong mọi người giúp đỡ, cảm ơn
1 CÂU TRẢ LỜI
Đối với dịch vụ hướng đến người dùng là users ở Việt Nam thì bạn chọn AWS region Singapore là tốt nhất rồi
Việc hiển thị ảnh thì là ở phía người dùng, nhanh hay chậm thì còn phụ thuộc vào tốc độ mạng của người dùng nên mình cũng không rõ là vấn đề của bạn về việc "request lấy hình rất chậm" là bạn test ở trên máy nào, với đường truyền ra sao. Bạn nên thử ở nhiều máy khác, với những đường truyền khác xem. Về server EC2 cũng tương tự như vậy.
Đương nhiên là về tốc độ sẽ không thể nào so sánh với việc lưu trữ trên một server đặt ở Việt Nam được. Hơn nữa, chi phí bỏ ra để sử dụng EC2 của AWS cũng đắt hơn nhiều so với việc thuê server ở Việt Nam.
Tuy nhiên đổi lại bạn nhận được tính khả dụng, tính ổn định, và khả năng mở rộng rất cao đến từ các dịch vụ của AWS (trong khi dùng server ở Việt Nam thì bạn phải lo rất nhiều thứ về infrastructure). Nếu dịch vụ của bạn coi trọng những thứ đó thì mình khuyên bạn vẫn hãy nên gắn bó với sự lựa chọn hiệu tại của mình
Cảm ơn bạn, vì dự án mình đang dùng S3 đồng thời dùng Lambda để resize hình ảnh nữa, với một size ảnh cố định thì request đầu tiên nó sẽ chạy qua function lambda để resize ảnh, lưu vào folder, các request tiếp theo thì chỉ lấy ảnh ra thôi. Có phải đây là nguyên nhân gây chậm không nhỉ, bởi vì mình nghĩ nguyên nhân không phải do đường truyền. Vì dự án mình làm có nhiều API trả nhiều đường dẫn ảnh cùng lúc (mỗi màn hình trên mobile show khá nhiều ảnh), mobile gọi lên S3 lấy về để show thì nó khá chậm, ảnh hưởng khá lớn đến trải nghiệm của người dùng. Bạn có giải pháp gì hay trong tình huống của mình không, cho mình suggest với, cảm ơn bạn nhiều (bow)
@vhung việc phải resize ảnh với nhiều kích cỡ khác nhau thì nó cũng chỉ xảy ra một lần thôi, nên mình không nghĩ nó là nguyên nhân làm chậm được (^^;)
Cũng có thể như bạn nói, do màn hình của bạn hiển thị khá nhiều ảnh nên để tải hết về sẽ mất nhiều thời gian, bạn có thể tham khảo các kỹ thuật về Lazy Loading để tăng trải nghiệm người dùng xem sao
Kỷ thuật lazy loading như bạn nói apply cho phía client nhỉ, bên mobile cũng sử dụng kỷ thuật đó rồi, dữ liệu sẽ show ra trước và hình ảnh sẽ load dần để show lên cho đến khi hoàn tất, nhưng thấy ảnh load vẫn chậm á bạn
@vhung Đúng rồi bạn, Lazy loading là làm ở phía client, chỉ load ảnh khi người dùng scroll đến gần chỗ nó cần được hiện ra.
Vậy mà vẫn chậm thì bạn thử xem lại kích cỡ và dung lượng ảnh xem sao Khi người dùng up ảnh lên thì nén lại, resize với kích cỡ nhỏ hơn, và hiển thị trên mobile thì chỉ hiển thị ảnh kích cỡ nhỏ (thumbnail), khi click vào ảnh mới load ra ảnh full chẳng hạn