Memcache (d) vs. Varnish dla przyspieszenia 3-warstwowej architektury sieciowej

111

Próbuję przyspieszyć mój test porównawczy (trójwarstwowa architektura sieciowa) i mam kilka ogólnych pytań związanych z Memcache (d) i Varnish.

  • Jaka jest różnica?
    Wydaje mi się, że Varnish znajduje się za serwerem WWW, cache'uje strony internetowe i nie wymaga zmian w kodzie, wystarczy konfiguracja.
    Z drugiej strony Memcached jest systemem buforowania ogólnego przeznaczenia i jest używany głównie do buforowania wyników z bazy danych i wymaga zmiany getmetody (pierwsze wyszukiwanie w pamięci podręcznej).

  • Czy mogę używać obu? Lakier na serwerze WWW i Memcached do buforowania bazy danych?

  • Jaka jest lepsza opcja?

    (scenariusz 1 - głównie zapis,
    scenariusz 2 - głównie odczyt,
    scenariusz 3 - odczyt i zapis są podobne)

user449219
źródło

Odpowiedzi:

269
  • Lakier znajduje się przed serwerem WWW; działa jako odwrotne proxy http, które buforuje.
  • Możesz używać obu.
  • Głównie pisz - Varnish będzie musiał wyczyścić strony, których dotyczy problem. Spowoduje to obciążenie i niewielkie korzyści dla zmodyfikowanych stron.
  • Najczęściej czytane - większość z nich pokryje prawdopodobnie lakier.
  • Podobny odczyt i zapis - Varnish będzie obsługiwał wiele stron za Ciebie, Memcache dostarczy informacje o stronach, które zawierają mieszankę znanych i nowych danych, umożliwiając szybsze generowanie stron.

Przykład, który mógłby dotyczyć stackoverflow.com: dodanie tego komentarza unieważniło pamięć podręczną strony, więc ta strona musiałaby zostać wyczyszczona z Varnish (a także mojej strony profilowej, która prawdopodobnie nie jest warta buforowania na początku. Pamiętając o unieważnieniu wszystkich strony, których dotyczy problem, mogą stanowić problem). Wszystkie komentarze są jednak nadal w Memcache, więc baza danych musi tylko napisać ten komentarz. Baza danych nie musi nic robić, aby wygenerować stronę. Wszystkie komentarze są pobierane przez Memcache, a strona jest ponownie odtwarzana, dopóki ktoś nie wpłynie na nią ponownie (być może poprzez głosowanie na moją odpowiedź). Ponownie, baza danych zapisuje głosowanie, wszystkie inne dane są pobierane z Memcache, a życie toczy się szybko.

Memcache chroni Twoją bazę danych przed wykonaniem dużej ilości pracy związanej z czytaniem, Varnish chroni dynamiczny serwer WWW przed obciążeniem procesora, dzięki czemu generujesz strony rzadziej (i nieco zmniejsza obciążenie bazy danych, jeśli nie w przypadku Memcache).

Jeff Ferland
źródło
3
to: „(być może głosując na moją odpowiedź)” sprawiło, że zagłosowałem za Twoją odpowiedzią
Cesc,
dlatego nie zaleca się stosowania lakieru w witrynach takich jak stackoverflow (lub takich jak Facebook ze stroną kanału aktywności). czy to jest
Mohammad Reza Esmaeilzadeh
@jbferland Moje pytanie w twoim przykładzie dotyczy tego, że na górze tej strony znajduje się moje zdjęcie z liczbą uzyskanych punktów, jak możemy buforować za pomocą Varnish, ale pokazać dynamikę tego obszaru?
Hossj
@Hossj przy użyciu tagów ESI.
Johny Pie
Lakier może znajdować się przed serwerem WWW, ale także za serwerem WWW. Może być również w tym samym czasie z przodu i za tym samym serwerem WWW ;-) Na przykład Varnish nie obsługuje SSL, więc nie jest rzadkością posiadanie serwera WWW przed Varnish do obsługi HTTPS. Ruch jest następnie przekazywany do Varnish, który następnie komunikuje się z serwerem WWW aplikacji - który może być tym samym serwerem, co serwer obsługujący ruch HTTPS.
mat.
32

Moje doświadczenie pochodzi z używania Varnish na Drupalu. Najprościej jak to możliwe, odpowiadam:

Ogólnie rzecz biorąc, Varnish działa w przypadku ruchu nieuwierzytelnionego (za pośrednictwem plików cookie), a pamięć podręczna buforuje ruch uwierzytelniony.

Więc używaj obu.

Joe Hyde
źródło
5
Udało ci się to, tak przy okazji, myślę, że Varnish działa lepiej w buforowaniu anonimowych użytkowników ...
Allan Jikamu