5

Załóżmy, że masz instancję 1, wystąpienie2 i instancję3 działającą w AWS.Jaki jest najlepszy sposób przekazywania użytkownikom plików w środowisku równoważenia obciążenia AWS?

Wszystkie działają z Apache, a uruchamiana aplikacja internetowa musi umożliwiać użytkownikom przesyłanie obrazów, co ma miejsce w przypadku wielu projektów.

Również przy wyświetlaniu obrazu należy go przyciąć do odpowiedniego rozmiaru, dlatego należy upewnić się, że wszystkie wystąpienia mają zawsze dostęp do tych samych plików.

Załóżmy, że użytkownik przesyła obraz do instancji1, a inny użytkownik odwiedza stronę, na której ten sam obraz jest wyświetlany w rozmiarze 100 x 100, i trafia on w instancję2. Inny użytkownik próbuje zobaczyć ten sam obraz w rozmiarze 300x300 na instancji3. I wiele innych rozmiarów, które nie są łatwe do przewidzenia.

W zasadzie potrzebujesz rozproszonego systemu plików, używam Gluster FS. Tak więc wszystkie instancje mają dostęp do tych samych plików, gdy pojawi się żądanie obejrzenia obrazu, mam skrypt PHP, który sprawdza, czy obraz został już przeskalowany do podanych wymiarów, jeśli tak, pokaże je, jeśli nie, zmieni rozmiar to, a następnie pokaż ponownie.

Gluster FS działa bardzo sprawnie i jestem z niego bardzo zadowolony, z tym, że myślę, że wymyślam nowe koło, a AWS powinien mieć na to jakieś rozwiązanie. Z najwyższą komendą widzę, że glusterfs zawsze używa części mojego procesora.

Używam również CloutFront do buforowania danych wyjściowych mojego skryptu zmiany rozmiaru, który zmniejsza obciążenie serwera w dobrym stopniu, ale Gluster FS jest nadal kosztowny w działaniu.

Możesz użyć rsync i jakiegoś rodzaju zadania cron, aby zrobić to samo bez Gluster FS, ale to dużo pracy i niezbyt niezawodne, ponieważ musisz wiedzieć, kiedy uruchomić proces rsyncing, i nadal nie będziesz uzyskać wspaniałe korzyści oferowane przez Gluster FS. Próbowałem też s3fs i chciałbym powiedzieć, że był to absolutny koszmar.

Dyski NFS również wydają się bardzo prymitywne w porównaniu do Gluster FS, myślę, że używają UDP, więc traktują twoje dane tak, jak to nie ma znaczenia.

Jaki jest najlepszy sposób robienia czegoś takiego? Próbowałem znaleźć rozproszony system plików oferowany przez AWS, ponieważ myślę, że wielu programistów będzie miało takie same lub podobne problemy, ale nie ma żadnych.

Możesz powiedzieć, po prostu prześlij na s3, ale s3 mi nie pomoże, muszę wiedzieć, czy obraz jest już zmieniany, czy nie, a następnie zmienić rozmiar i służyć lub po prostu służyć, więc potrzebuję czegoś, co mogę napisać skrypt dla.

Można również powiedzieć, dobrze dlaczego nie można zapisać wszystkie obrazy, a następnie przesłać je wszystkie do s3, powód nie mogę zrobić, jest to, że

  1. Istnieje około 1 miliona zdjęć i 100 rozmiary, więc szukamy ogłoszenie gigantyczną ilość plików do przeliczenia
  2. mogą istnieć nowe rozmiary dodawane codziennie, więc rozmiar pierwszą strategię nie działa
+2

Doskonałe pytanie. Nie bardzo rozumiem, dlaczego ograniczasz się do pisania skryptu podczas sprawdzania, czy obraz istnieje, czy nie. Dlaczego po prostu nie poprzestawać, hostować wszystko na S3 i używać dostępnych pakietów SDK, aby sprawdzić, czy plik istnieje, czy też przesłać nowe obrazy do S3? – Viccari

Odpowiedz

0

bym Aproach go z 2 S3 wiadra:

  • Wiadro z obrazem głównym: przesyłaj obrazy w oryginalnej rozdzielczości/najlepszej rozdzielczości używanej na stronie, bez czasu wygaśnięcia.
  • Wiadro z pamięci podręcznej: tworzenie obrazów na żądanie, można użyć timthumb, aby utworzyć je z żądanymi rozmiarami i ustawić czas wygaśnięcia.

Gdy użytkownik zażąda sprawdzanego obrazu, jeśli istnieje w wiadrze z pamięci podręcznej, w przeciwnym razie należy go utworzyć, zapisać na pojemniku pamięci podręcznej i wysłać go stamtąd.

Uwagi:

  • uważaj z timthumb, stare wersje mają problemy z bezpieczeństwem, można sprawdzić alternatywy.
  • Squid-cache może pomóc też można zastąpić wiadro cache z innej instancji EC2 z nim

To jest tylko moja aproach ale odpowiedz i uchwycić jej głębsze

Powiązane problemy