Serwis cachujący zdjęcia

Serwis cachujący zdjęcia
M1
  • Rejestracja:około 6 lat
  • Ostatnio:6 miesięcy
  • Postów:7
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ć?

cerrato
Moderator Kariera
  • Rejestracja:około 7 lat
  • Ostatnio:około godziny
  • Lokalizacja:Poznań
  • Postów:8759
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ć?

edytowany 1x, ostatnio: cerrato
S4
  • Rejestracja:około 3 lata
  • Ostatnio:około rok
  • Postów:1268
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ć.

M1
  • Rejestracja:około 6 lat
  • Ostatnio:6 miesięcy
  • Postów:7
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?

Schadoow
  • Rejestracja:około 13 lat
  • Ostatnio:około godziny
  • Postów:1064
2

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

M1
  • Rejestracja:około 6 lat
  • Ostatnio:6 miesięcy
  • Postów:7
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)

cerrato
Moderator Kariera
  • Rejestracja:około 7 lat
  • Ostatnio:około godziny
  • Lokalizacja:Poznań
  • Postów:8759
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ą.


Zobacz pozostałe 6 komentarzy
loza_prowizoryczna
OVH to za duży gracz - to nie czasem ci którzy serwery mieli upchane po kontenerach na ruskim kontenerowcu zatrzymanym za niewypłacalność armatora w porcie w Amsterdamie? Stary już jestem to szczegóły mogły mi się pomieszać ;)
cerrato
Ja jedynie kojarzę, że im się spaliła serwerownia i część danych klientów poszła się kochać, bo backupy mieli w tym samym DC co główne serwery :D Co nie zmienia faktu, że i tak są duzi/to jeden z większych graczy na rynku.
loza_prowizoryczna
Dobrze kojarzysz ;) Faktem jest że są tani - więc to co oni piszą w ofercie to najlepiej podzielić przez limity które oferują.
cerrato
najlepiej podzielić przez limity - @loza_prowizoryczna: tylko się zastanawiam - w zakresie dzielenia prze limity: czy brak ograniczeń potraktować jako zero, czy nieskończoność. Bo nie wiem, czy mówimy teraz o limes'ach, czy raczej o zakazie dzielenia przez zero ;)
loza_prowizoryczna
W takiej sytuacji zostaje tylko empiria. Skoro model nie daje rady to trzeba go zastąpić takim co daje się dopasować do danych. (zazwyczaj Javą).
Schadoow
  • Rejestracja:około 13 lat
  • Ostatnio:około godziny
  • Postów:1064
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ą.

edytowany 2x, ostatnio: Schadoow
S4
  • Rejestracja:około 3 lata
  • Ostatnio:około rok
  • Postów:1268
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.

edytowany 1x, ostatnio: S4t
LU
  • Rejestracja:około 15 lat
  • Ostatnio:5 miesięcy
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.

edytowany 4x, ostatnio: Lucassith
cerrato
Cachować możesz na dysku lub w pamięci - kiepsko widzę 20TB obrazków w cache w RAM :P
LU
Dlatego Cachować możesz na dysku
Fafu
  • Rejestracja:prawie 17 lat
  • Ostatnio:10 miesięcy
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.

AN
A storage na OVH nie jest droższy niż BlackBlaze? Dodatkowo sporo roboty z przechowywaniem tego na różnych serwerach
Fafu
Weźmiesz kimsufi albo soyoustart i masz tanio. Ale wiadomo sporo roboty. Najlepiej backblaze bo dużo taniej niż Amazon.
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)