Serwis cachujący zdjęcia

0

Cześć, zastanawiam się jak ugryźć temat.
Mam serwis który pobiera dane z plików xml z różnych stron (użytkownik podaje linka do xmla, serwis go parsuje). Xmle zawierają między innymi linki do zdjęć. Zdjęcia te są później wyświetlane w panelu serwisu i na stronach trzecich (będę je nazywał dalej klientami). Do tej pory po sparsowaniu i zapisaniu danych z xmla wszystkie zdjęcia były pobierane, zapisywane na s3 i serwis i klienci pobierali zdjęcia z s3. Na ten moment przestaje się to sprawdzać ze względu na przyrost danych do pobrania. Użytkownicy mają czasem 100 a czasem kilkaset k zdjęć w pliku. Istotne jest tez to że wyświetlona jest tylko część zdjęć, nie byłoby potrzeby pobierania wszystkiego.

Planuję zrobić mikroserwis który na żądanie będzie pobierał zdjęcie i przechowywał w cache. W serwisie i w klientach zamiast linku do naszej s3 bylby link do mikroserwisu z urlem do zdjęcia w query.
Jak to cachować? zapisywać pobrane zdjęcia u siebie czy może sprawdzi się podpięcie mikroserwisu pod cloud flare? Już od darmowej wersji oferuje cdn więc chyba powinno zadziałać?

3

Pytania:

  • jaki masz na to budżet?
  • jaki czas chcesz/musisz trzymać te zdjęcia?
  • czy wiesz, ile miejsca te zdjęcia będą zajmować?
1

Czy wiesz jakie zdjęcia potrzebujesz? Czy potrzebujesz zdjęcia skalować. Do takich rzeczy służą CDNy.
Storge jest jedną z tańszych rzeczy i może się okazać, że czas, który przepalisz na jakieś okrywanie koła przekroczy koszty trzymania wszystkiego. Jak masz linki do zdjęć to możesz, że hostować od partnerów przez jakiegoś cache, chyba że ruch, jaki generujecie może ich zabić.

0
cerrato napisał(a):

Pytania:

  • jaki masz na to budżet?
  • jaki czas chcesz/musisz trzymać te zdjęcia?

mamy kilka dedyków więc zakładam że zrobię to w ramach istniejącej infrastruktury, w ostateczności 0,5 - 1k zł/miesiąc
czas jak najdłuższy, teoretycznie mógłbym w nieskończoność

S4t napisał(a):

Czy wiesz jakie zdjęcia potrzebujesz? Czy potrzebujesz zdjęcia skalować. Do takich rzeczy służą CDNy.
Storge jest jedną z tańszych rzeczy i może się okazać, że czas, który przepalisz na jakieś okrywanie koła przekroczy koszty trzymania wszystkiego. Jak masz linki do zdjęć to możesz, że hostować od partnerów przez jakiegoś cache, chyba że ruch, jaki generujecie może ich zabić.

wiem jakie zdjęcia potrzebuję, skalujemy je w dół do 2 rozdzielczości (miniatury)
Gorzej niź jest teraz już się chyba nie da :) Pobieramy zdjęcia, zapisujemy oryginał i 2 miniaturki, trzymamy to w s3 i dodatkowo przepuszczamy przez cloud flare żeby mniej płacić za transfer wychodzący z s3. Nazbierało się tego już ponad 20 TB więc rachunek jest spory. Mogę zrezygnować z trzymania oryginałów co pewnie zbiłoby koszty storage o 80%. Wolałbym jednak pobierać zdjęcie na żądanie bo nie jestem stanie określić jaki % zdjęć jest używany. Pomijając zredukowanie storage zyskam na tym jeszcze to że nie będę generował niepotrzebnie ruchu u klienta.

@S4t: jakiś konkretny cache do hostowania masz na mysli?

2

a jaki masz ruch z tego 20TB ? Ile GB miesiecznie klienci pobieraja? Czy często pobierane są te same pliki ?

0
Schadoow napisał(a):

a jaki masz ruch z tego 20TB ? Ile GB miesiecznie klienci pobieraja? Czy często pobierane są te same pliki ?

dane z ostatnich 30 dni
300k userów, 10mln requestów, 275GB pobrane z czego cf cachuje niecałe 60% (160GB)

1

Storge jest jedną z tańszych rzeczy i może się okazać, że czas, który przepalisz na jakieś okrywanie koła przekroczy koszty trzymania wszystkiego

@s4t - Dokładnie do tego zmierzałem, kiedy zadawałem pytania :D
Na przykład na OVH (przykład pierwszy lepszy z brzegu, pewnie są lepsze oferty) https://www.ovhcloud.com/pl/web-hosting/compare/ masz 500GB na hostingu współdzielonym za jakieś 44 zł netto miesięcznie. Także - stawiasz sobie swój serwis na jakimś VPS, a do tego podpinasz sobie jeden (albo kilka hostingów) jako storage i masz temat ogarnięty za 50-100 zł. miesięcznie.

0,5 - 1k zł/miesiąc

No to jak pisałem powyżej - za 50 zł miesięcznie masz hosting 500GB. Także w Twoim budżecie ogarniesz kilka/kilkanaście TB danych, co chyba jest wystarczające.

Wolałbym jednak pobierać zdjęcie na żądanie bo nie jestem stanie określić jaki % zdjęć jest używany

Moim zdaniem dobrze by było w takim razie zrobić jakieś statystyki zużycia, bo może się okazać, że trzymasz kilkanaście TB danych, z których nikt nigdy nie skorzystał. A za miejsce na ich trzymanie płacisz. Poza tym - jak się dowiesz, co jest aktualnie potrzebne, a co trzymasz "w razie WU" to można pójść w kierunku przerzucenia tych archiwalnych danych na jakiś serwer do backupów. Nie pamiętam teraz nazwy tej usługi, ale są takie usługi/chmury, które są przeznaczone typowo do trzymania danych jako backup. To znaczy - płacisz głównie za transfer oraz jakąś niewielką opłatę za trzymanie. Wrzucasz tam dane, do których nie potrzebujesz dostępu na bieżąco i sobie leżą. A potem, w razie czego to możesz je pobrać - tylko to się wiąże z dodatkową opłatą.

1

Tak juz wczesniej wspomnieli poprzednicy storagy jest najtańszym zasobem.

Przenalizowałbym:

  1. czy potrzebuje geolokacji ?
  2. może zrobienie proxy na s3 i pobieranie na ządanie + krótki TTL na pliki w S3. Ale to trzeba by przekalkulowac czy bedzie taniej czy drozej.
  3. Odejście od S3 i postawienie min.io np na hetznerze koszt 20TB na hetznerze to ~50EUR

plus numer 3 min.io wspiera api s3. minus musisz sam jebac sie z infrastrukturą.

1

@S4t: jakiś konkretny cache do hostowania masz na mysli?

Kiedyś robiłem podobny system w oparciu o chmurę prywatna i https://ceph.io/en/. Wyglądało to podobnie jak tu: https://aws.amazon.com/blogs/networking-and-content-delivery/resizing-images-with-amazon-cloudfront-lambdaedge-aws-cdn-blog/. Czyli w storagu lądowały oryginały, przy pierwszym użyciu miniaturki była taka generowana i trzymana w cache.

1

Cache dla obrazków serwowanych przez HTTP jest dość rozległy, musisz wspierać ETagi / Modified Since etc.

Sam jakiś czas temu zrobiłem jakiś czas temu coś podobnego dla własnego użytku. Jeżeli chcesz wstępnie przetestować to tutaj link do kodu, napisany w RUST obsługuje wielowątkowość:
https://github.com/lucassith/pixvert

Możesz też uruchomić od razu na dockerze:
https://hub.docker.com/r/lucassith/pixvert_rs

Pozwala cachować dane i by default forwarduje headery cache z serwera który serwuje, na tej podstawie też sama aplikacja rewaliduje obrazki. Natomiast masz możliwość overridowania konkretnego URLa pod własny cache.

Cachować możesz na dysku lub w pamięci, zależnie od potrzeby.

Możesz też dowolnie skalować i konwertować na różne rastrowe formaty np WebP. Planowałem wrzucić top notch JPEG-XL ale jeszcze nie obsługuje wszystkich przeglądarek.

U mnie działa ze sklepem internetowym i dla mnie działa stabilnie, obsługuje średnio 100 wejść dziennie, serwuje pareset obrazków przy jednej sesji chociaż nie za każdym wejściem bo cache przeglądarki sam się zajmuje serwowaniem już pobranych plików.

0

Najłatwiej chyba przejść na alternatywny serwis do S3 obsługujący kompatybilne API, np. popularne BackBlaze
Jeśli chcesz mieć naprawdę tanio to parę dedyków w OVH gdzie masz nielimitowany transfer.

1 użytkowników online, w tym zalogowanych: 0, gości: 1