Jak współdzielić zasoby między wieloma serwerami WWW?

16

Mam wiele serwerów linuksowych podłączonych do modułu równoważenia obciążenia i lubię udostępniać zasoby (takie jak zdjęcia, filmy i inne rzeczy) między tymi serwerami. Jak najlepiej to zrobić?

Obecnie zamontowałem na serwerze plików wszystkie serwery WWW, ale martwię się, że spadnie on pod dużym natężeniem ruchu. Jak mogę tego uniknąć?

Z góry dziękuję.

getmizanur
źródło
Tutaj przydatne są takie rzeczy jak Cassandra (bazy danych NoSQL).
Alexis Wilke,
Zastanawiasz się nad użyciem lakieru do poprawy wydajności przy dużym natężeniu ruchu? en.wikipedia.org/wiki/Varnish_%28software%29
Thorbjørn Ravn Andersen

Odpowiedzi:

12

Istnieje wiele sposobów na zrobienie tego w zależności od potrzeb.

  • Skorzystaj z centralnego serwera plików zamontowanego z FFS NFS na serwerach
  • Taki sam jak powyżej, ale zbędny, więc jeśli jeden upadnie, drugi przejmie kontrolę
  • Użyj narzędzia synchronizacji (na przykład rsync) i hostuj pliki lokalnie na serwerach WWW. Następnie skonfiguruj cronjob, aby synchronizował pliki między serwerami w określonych odstępach czasu.
  • Użyj sieci CDN, takiej jak Amazon S3, Akamai itp.

Pierwsze dwa są najlepsze, jeśli pojawi się wiele nowych plików. Trzeci byłby idealnym rozwiązaniem, jeśli nie dodajesz ani nie zmieniasz plików, ponieważ użytkownicy często otrzymają 404 na treści statyczne, które nie zostały jeszcze zsynchronizowane.

Ta ostatnia opcja może być idealna na wiele sposobów, ale może również okazać się najdroższą z 4. Aby ją wesprzeć, musisz również przepisać strony internetowe.

Frederik Nielsen
źródło
Dużym problemem z rsync jest to, że prawdopodobnie dostaniesz 404, jeśli prześlesz nowe dane, a rsync nie nastąpi bardzo szybko ... Również system taki jak Cassandra (punkt 4) jest bezpłatny, chociaż oczywiście posiadanie 10 serwerów nie jest za darmo ... więc może powinienem powiedzieć bez dodatkowych opłat (chociaż trzeba trochę programowania, aby wszystko działało.)
Alexis Wilke
@AlexisWilke - Masz rację co do rsync, a ja również wspomniałem o tym w odpowiedzi. Wyjaśniłem to teraz w odpowiedzi.
Frederik Nielsen
Odp: # 3 „Czas martwy” między nowym wdrożonym a zsynchronizowanym nowym zasobem można zminimalizować, jeśli użyjesz obserwatora systemu plików (takiego jak strażnik Facebooka ) i narzędzia do szybkiej synchronizacji (np. Csync2 ). Nie, opóźnienie nigdy nie spadnie do zera, ale jest bardzo minimalne i może być łatwiejsze do wdrożenia niż inne alternatywy.
pepoluan
2

Innym doskonałym sposobem na zmniejszenie obciążenia serwerów WWW i równoważenie obciążenia jest użycie squid (a mianowicie squid3). Ustaw go jako odwrotne proxy z buforowaniem. Będzie buforować zawartość statyczną, taką jak zdjęcia itp. Na HDD (domyślnie) lub RAM (szybciej i najlepiej), jeśli ustawisz go w ten sposób. Jest w stanie zaokrąglić robota do innych serwerów kałamarnic, również w przypadku przeciążenia dowolnego konkretnego węzła.

Aihngel Tech
źródło
1
Myślę, że tego rodzaju buforowanie kończy się niepowodzeniem, jeśli chcesz bardzo dynamicznej witryny. Ponieważ przy dużej dynamice nadal musisz trafić na jeden główny serwer zaplecza, aby uzyskać dużo danych. Myślę, że użytkownik chce zamiast tego podzielić pracę zaplecza.
Alexis Wilke,
1
Twoja odpowiedź jest prawidłowa na temat potencjalnego zmniejszenia obciążenia, ale nie odpowiada na pytanie dotyczące udostępniania plików zasobów między wieloma serwerami.
@AlexisWilke działa (nie), jeśli nie masz poprawnie skonfigurowanej kałamarnicy. Dostosuj sposób buforowania (lub buforowania) w ustawieniach, ale może się okazać, że żadna strona nigdy nie jest całkowicie dynamiczna. Zawsze możesz coś buforować. Również Andre, bardzo pomaga dzielenie się zasobami, jak opisuje tytuł, ale dzielenie się plikami nie tyle. Pytanie brzmiało, jak uchronić strony przed upadkiem pod dużym obciążeniem. Squid świetnie sobie z tym radzi.
Aihngel Tech
1

Ponieważ zwykle potrzeba większej liczby serwerów wynika z zasobów potrzebnych do prowadzenia dynamicznych witryn / aps, rozważ hostowanie zasobów statycznych w innej subdomenie / domenie. (jak static.twojadomena.com)

Następnie możesz użyć innego serwera / serwerów, aby je hostować. Hosting plików statycznych nie zużywa bardzo dużo zasobów, więc potrzebujesz dużo mniej serwerów do przechowywania treści statycznych. Uwolnisz także niektóre zasoby na serwerach dotyczące zawartości dynamicznej.

W zależności od modułu równoważenia obciążenia możesz również zrobić to w tej samej domenie, gdy moduł równoważenia obciążenia decyduje, którego serwera użyć do którego żądania, ale jeśli używasz osobnej domeny, możesz łatwo umieścić swoje zasoby statyczne w sieci CDN, jeśli potrzeba powinna się pojawić!

Josef mówi Przywróć Monikę
źródło
1

Jednym z rozwiązań tego wyzwania, które zastosowałem, jest posiadanie głównej kopii plików do odczytu / zapisu na współużytkowanym dysku NFS, ale także trzymanie kopii tylko do odczytu na każdym serwerze WWW, aby awaria hosta NFS spowodowała dostęp do pliku w trybie tylko do odczytu, zamiast całkowicie je utracić.

  • Pliki na żywo na centralnym hoście, współdzielone z hostami internetowymi przez NFS
  • rsync działa co 15 minut, aby zachować kopię tylko do odczytu na każdym hoście.
  • check_linkSkrypt bash uruchamia każdą minutę, aby upewnić się, że NFS jest nadal istnieje i jeśli nie zamienia dowiązania symbolicznego do odczytu tylko do skopiowania.

Więcej szczegółów można znaleźć w tym artykule od pierwszego uruchomienia tego systemu.

Plusy:

  • Odczyty plików są bardzo dostępne
  • Brak warunków wyścigu dla zapisów plików
  • Nowe pliki są natychmiast dostępne dla wszystkich hostów internetowych.

Wady:

  • trochę skomplikowane.
  • liczba kopii tylko do odczytu skaluje się z liczbą hostów internetowych, co może być nadmierne, jeśli masz więcej niż dwa.
  • Zapisy plików nie są wysoce dostępne.
  • Potencjał do 1 minuty przestoju przed przejściem do kopii tylko do odczytu.
Adam Franco
źródło
0

Możesz rozważyć bazę danych NoSQL. Są przeznaczone do pracy w klastrach, zapewniając ostateczną spójność. Ale uważaj, nie są to KWASY.

Oto wprowadzenie , które pomoże ci zdecydować, jakiego rodzaju bazy danych NoSQL możesz użyć do swoich celów.

Oto lista zasobów związanych z dostępnym NoSQL.

Azzy
źródło
4
Jak ta odpowiedź pomaga w problemie z synchronizacją plików?
Titus
@titus W NoSQL, gdy zapis następuje na jednym z węzłów, zostanie on zreplikowany na innych węzłach w klastrze. Poziomy spójności Cassandra mogą pomóc w wyjaśnieniu
Azzy,
więc sposobem jest przechowywanie wszystkich plików w db NoSQL?
Titus
@titus możesz, ale bazy danych NoSQL mogą zrobić znacznie więcej niż przechowywać pliki, wszystko zależy od twoich potrzeb.
Azzy,
2
OP poprosił o rozwiązanie konkretnego problemu: „ wiele serwerów linuksowych podłączonych do modułu równoważenia obciążenia ... współdzielą zasoby (takie jak zdjęcia, filmy i inne rzeczy) między tymi serwerami. Twoja odpowiedź jest bardzo ogólna, możesz zasugerować i wyjaśnić konkretne narzędzia (a najlepiej ich konfiguracje), aby rozwiązać problem?
kdbanman
0

Dlaczego nie wypróbować rozwiązania DFS, zapewniają one wysoki poziom redundancji, a wolumin może być współdzielony przez dowolną liczbę osób. Gluster jest moim ulubionym i jest bardzo łatwy w instalacji i konfiguracji w dowolnej znanej dystrybucji Linuksa

Arash mo
źródło