The story of GOG.com Cache - PHPers 2014 ( PL )

31
WIELOWARSTWOWY CACHE Na przyk ładzie serwisu GOG.com Maciej Włodarkiewicz

description

PHPers 2014

Transcript of The story of GOG.com Cache - PHPers 2014 ( PL )

Page 1: The story of GOG.com Cache - PHPers 2014 ( PL )

WIELOWARSTWOWY CACHENa przykładzie serwisu GOG.com

Maciej Włodarkiewicz

Page 2: The story of GOG.com Cache - PHPers 2014 ( PL )

O mnie

GG Network S.A.

Web Backend Lead

GOG.com

Head of Web Development

7 lat doświadczenia przy dużych aplikacjach internetowych

5 lat doświadczenia jako kierownik zespołu

Page 3: The story of GOG.com Cache - PHPers 2014 ( PL )

Agenda

1. GOG.com - kim jesteśmy?

2. Wyzwania, którym musimy sprostać

3. Walka z odległością

4. Wykorzystanie cache w GOG.com

5. Podsumowanie i wnioski

Page 4: The story of GOG.com Cache - PHPers 2014 ( PL )

GOG.com - kim jesteśmy?

Historia Start w 2008 pod skrzydłami CD Projekt - zespół 10 osób

Obecnie zatrudnionych jest 70 osób

Obecna pozycja #1 globalnej dystrybucji klasycznych gier na PC i Mac

#2 globalnej dystrybucji gier indie na PC i Mac

Partnerzy 180+ twórców i wydawców gier

Klienci Ponad 2.7 miliona unikalnych wejść miesięcznie z całego świata

Gry Ponad 700 tytułów w katalogu

Ponad 39 milionów gier na kontach użytkowników

Page 5: The story of GOG.com Cache - PHPers 2014 ( PL )

Wyzwania, którym musimy sprostać

Globalny zasięg

Szybkość dostępu

Dynamika odwiedzalności

Page 6: The story of GOG.com Cache - PHPers 2014 ( PL )

Globalny zasięg

Regularne wejścia na stronęGOG.com ma odnotowane przynajmniej jedno wejście z każdego kraju na świecie

Page 7: The story of GOG.com Cache - PHPers 2014 ( PL )

Szybkość dostępu

1%spadku sprzedaży przy wydłużeniu ładowania Amazon.com o 100 ms

30%użytkowników opuszcza

Amazon.com jeśli czas ładowania przekracza 4 sek

7%spadku konwersji po

każdej sekundzie ładowania Amazon.com

Czas ładowania strony ma wpływ na jej pozycję w wynikach wyszukiwania Google!

http://blog.edgecast.com/post/42404930702/ecommerce-performance-website-speed-impacts-your

Page 8: The story of GOG.com Cache - PHPers 2014 ( PL )

Dynamika odwiedzalności

Free Game: Dungeon Keeper

Fall Insomnia Promo

DRM-Free Winter Sale

EA Exclusives Weekend Promo

Page 9: The story of GOG.com Cache - PHPers 2014 ( PL )

Walka z odległością - początki GOG.com

2008 DataCenter w Kanadzie (Montreal)

Page 10: The story of GOG.com Cache - PHPers 2014 ( PL )

Walka z odległością

Problem:

Prędkość ograniczona do maksymalnej prędkości łącza

Każdy router powoduje opóźnienie

Połączenie narażone jest na zmiany topologii sieci oraz jej awarie

Każdy błąd powoduje retransmisje danych

Rozwiązanie:

Zastosowanie CDN / ADN

content bliżej użytkownika

obliczenia dalej odbywają się w jednym datacenter

Page 11: The story of GOG.com Cache - PHPers 2014 ( PL )

Walka z odległością

2011 DataCenter w Polsce (Warszawa);

sieć rozproszona EdgeCast (POP’y)

Page 12: The story of GOG.com Cache - PHPers 2014 ( PL )

Content Delivery Network - CDN

Tryby pracy: Tryby dostępu do plików:

Pull ADN (Application Delivery Network); aplikacja pobiera zawartość

Push sami uploadujemy na serwery zewnętrzne

Open niezabezpieczone, dostępne dla wszystkich

Secure chronione poprzez podpisywanie URL z krótkim TTL

Page 13: The story of GOG.com Cache - PHPers 2014 ( PL )

Cache pełnych stron

Problem:

Nie można cachować gotowych stron – każda posiada dane spersonalizowane dla użytkownika

Czym różnią się strony dla poszczególnych użytkowników?

Czy są jakieś strony, które są całkowicie różne dla poszczególnych użytkowników?

Rozwiązanie:

Gotowy HTML trzymany w całości w cache

Personalizacja poprzez AJAX

Szybkość działania

HTML generowany jednorazowo dla wszystkich

Oszczędność transferu

Lepsze skalowanie ruchu

Page 14: The story of GOG.com Cache - PHPers 2014 ( PL )

Cache pełnych stron globalnie

Browser ADN Backend

CDN

Page 15: The story of GOG.com Cache - PHPers 2014 ( PL )

Problemy ADN

Problemy:

Jako zewnętrzna usługa, nie jest w pełni konfigurowalna i dostosowana do naszych potrzeb

Czym więcej punktów dostępowych (POP) tym lepsze user-experience ale też mniejsze hity

Brak dobrej obsługi SSL

Sposoby ich rozwiązania:

Aby zniwelować braki ADN używamy lokalnego reverse-proxy cache

Varnish-Cache

Page 16: The story of GOG.com Cache - PHPers 2014 ( PL )

Browser ADN Backend

Varnish-Cache

CDN

Page 17: The story of GOG.com Cache - PHPers 2014 ( PL )

Browser ADN Backend

Varnish-Cache

Varnish

CDN

Page 18: The story of GOG.com Cache - PHPers 2014 ( PL )

Varnish-Cache

Zalety Łatwy w konfiguracji

Rozszerzalny przy użyciu wstawek C

Nie pozwala na dogpile

Dodatkowe możliwości Expires At

Last-Modified

GZIP

Page 19: The story of GOG.com Cache - PHPers 2014 ( PL )

Cache wewnętrzny

Browser ADN BackendVarnish

CDN

Page 20: The story of GOG.com Cache - PHPers 2014 ( PL )

Cache wewnętrzny

Browser ADN BackendVarnish Cache wewnętrzny

CDN

Page 21: The story of GOG.com Cache - PHPers 2014 ( PL )

Cache wewnętrzny

Memcached

Cache pomiędzy elementami infrastruktury, np cache pokrywający bazę danych

Dane właściwe dla użytkownika takie jak lista posiadanych gier, wishlist etc.

Katalog gier z cenami uwzględniającymi promocje

XCache

Dane niezmienne i niezależne od użytkownika

Cache danych użytkowników daje bardzo mały hit-rate

Tylko na niewielkie dane, ograniczona pojemność poszczególnego obiektu, oraz ilości obiektów

Page 22: The story of GOG.com Cache - PHPers 2014 ( PL )

Browser cache

Browser ADN BackendVarnish Cache wewnętrzny

CDN

Page 23: The story of GOG.com Cache - PHPers 2014 ( PL )

Browser ADN BackendVarnish Cache wewnętrzny

Browser cache

Browser cache

CDN

Page 24: The story of GOG.com Cache - PHPers 2014 ( PL )

Browser cache

HTML5 Local Storage Wspierany przez większość przeglądarek

Key / Value

Limit do 5 MB

Szybsza odpowiedź

Prawie niewidoczne oczekiwanie na personalizację

(Trochę) mniejszy ruch

Strona może działać „offline”

Page 25: The story of GOG.com Cache - PHPers 2014 ( PL )

Wiele różnych poziomów cache

Zarządzanie inwalidacją cache Stosowanie długiego cache z wymuszeniem inwalidacji jest trudną i kosztowną operacją, czasem prawie niemożliwą jak np.: cache przeglądarki, CDN

Stosujemy krótki cache ~1 minutowy.

Nawet nałożeniu się warstw zapewnia świeżość w ~2 minuty.

Cache 1minutowy od 1 godzinnego albo 1 dniowego różni się wystarczająco nieznacznie

Page 26: The story of GOG.com Cache - PHPers 2014 ( PL )

Wnioski:

HTML jest w cache

Koszyk trzymany jest na szybkim tymczasowym nośniku

Użytkownik jest zalogowany i jego dane są dostępne w cache lub personalizacja jest wyłączona

Efekty i korzyści:

Nie ma ruchu na bazie danych do momentu transakcji

Idealnie skalowalny system

Bardzo szybki dostęp na całym świecie

Podsumowanie

Page 27: The story of GOG.com Cache - PHPers 2014 ( PL )

Wyzwania, którym sprostaliśmy

Globalny zasięg

Szybkość dostępu

Dynamika odwiedzalności

Page 28: The story of GOG.com Cache - PHPers 2014 ( PL )

Podsumowanie

Wnioski:

Dostosowujmy architekturę do potrzeb

CDN znacznie zwiększa możliwości strony, szczególnie przy globalnym zasięgu

Ale to nie wystarczy, stosujmy dodatkowo cache wewnątrz infrastruktury

Krótki TTL mocno upraszcza logikę

Plany:

Stworzenie od podstaw własnego systemu klasy ADN (już jesteśmy w trakcie pierwszych testów!)

Rozproszenie reszty architektury

Page 29: The story of GOG.com Cache - PHPers 2014 ( PL )

Technologie w GOG.com

ADN

CDN

Varnish-Cache

MemCached

PHP-XCache

HTML5 Local Storage

Browser Cache

akamai.com

edgecast.com

varnish-cache.org

memcached.org

xcache.lighttpd.net

developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Storage

developers.google.com/speed/docs/best-practices/caching

Page 30: The story of GOG.com Cache - PHPers 2014 ( PL )

SZUKAMY WEBDEVÓWWięcej informacji u mnie lub na stronie GOG.com/work

Page 31: The story of GOG.com Cache - PHPers 2014 ( PL )

DZIĘKUJĘ ZA UWAGĘ…i zapraszam po darmowego Wiedźmina :)

SZUKAMY WEBDEVÓWWięcej informacji u mnie lub na stronie GOG.com/work