SlideShare a Scribd company logo
1 of 33
Download to read offline
WIELOWARSTWOWY CACHE 
Na przykładzie serwisu GOG.com 
Maciej Włodarkiewicz
O mnie 
GOG.com 
Head of Web Development 
GG Network S.A. 
Web Backend Lead 
7 lat doświadczenia 
przy dużych aplikacjach internetowych 
5 lat doświadczenia 
jako kierownik zespołu
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
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
Wyzwania, którym musimy sprostać 
Globalny 
zasięg 
Szybkość 
dostępu 
Dynamika 
odwiedzalności
Globalny zasięg 
Regularne wejścia na stronę 
GOG.com ma odnotowane przynajmniej jedno wejście z każdego kraju na świecie
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
Dynamika odwiedzalności 
Free Game: 
Dungeon Keeper 
Fall Insomnia 
Promo 
DRM-Free 
Winter Sale 
EA Exclusives 
Weekend Promo
Walka z odległością - początki GOG.com 
2008 
DataCenter w Kanadzie (Montreal)
Walka z odległością
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
Walka z odległością 
2011 
DataCenter w Polsce (Warszawa); 
sieć rozproszona EdgeCast (POP’y)
Content Delivery Network - CDN 
Tryby pracy: Tryby dostępu do plików: 
Push 
sami uploadujemy na serwery 
zewnętrzne 
Pull 
ADN (Application Delivery 
Network); aplikacja pobiera 
zawartość 
Open 
niezabezpieczone, dostępne 
dla wszystkich 
Secure 
chronione poprzez 
podpisywanie URL zkrótkim 
TTL
Content Delivery Network - CDN 
static assets games files 
gog.com pages secure.gog.com
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
Cache pełnych stron globalnie 
CDN 
Browser ADN Backend
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
Browser ADN Backend 
Varnish-Cache 
CDN
Browser ADN Backend 
Varnish-Cache 
Varnish 
CDN
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
Cache wewnętrzny 
CDN 
Browser ADN Varnish Backend
Cache wewnętrzny 
Browser ADN Varnish Backend Cache 
wewnętrzny 
CDN
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
Browser cache 
Browser ADN Varnish Backend Cache 
wewnętrzny 
CDN
Browser ADN Varnish Backend Cache 
wewnętrzny 
Browser 
cache 
Browser cache 
CDN
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”
Wiele różnych poziomów cache 
Zarządzanie inwalidacją cache Stosowanie długiego cache z wymuszeniem inwalidacji jest 
trudną i kosztowną operacją, 
Inwalidacja plików na CDN przez zmianę nazwy 
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
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
Wyzwania, którym sprostaliśmy 
Globalny 
zasięg 
Szybkość 
dostępu 
Dynamika 
odwiedzalności
Podsumowanie 
Wnioski: 
Dostosowujmy architekturę do potrzeb 
ADN/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
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
SZUKAMY WEBDEVÓW 
Więcej informacji u mnie lub na stronie GOG.com/work
SZUKAMY WEBDEVÓW 
Więcej informacji u mnie lub na stronie GOG.com/work 
DZIĘKUJĘ ZA UWAGĘ 
…i zapraszam po darmowego Wiedźmina :)

More Related Content

What's hot

4Developers 2015: Szybciej niż Struś Pędziwiatr - WebSockets w aplikacjach we...
4Developers 2015: Szybciej niż Struś Pędziwiatr - WebSockets w aplikacjach we...4Developers 2015: Szybciej niż Struś Pędziwiatr - WebSockets w aplikacjach we...
4Developers 2015: Szybciej niż Struś Pędziwiatr - WebSockets w aplikacjach we...PROIDEA
 
Jak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzieńJak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzieńPaweł Kondraciuk
 
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...The Software House
 
DynamoDB – podstawy modelowania danych dla opornych
DynamoDB – podstawy modelowania danych dla opornychDynamoDB – podstawy modelowania danych dla opornych
DynamoDB – podstawy modelowania danych dla opornychThe Software House
 
Kubernetes (Canary) Deployments
Kubernetes (Canary) DeploymentsKubernetes (Canary) Deployments
Kubernetes (Canary) DeploymentsThe Software House
 
Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]
Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]
Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]Droptica
 
Jak poprawić Core Web Vitals w aplikacji Next.js
Jak poprawić Core Web Vitals w aplikacji Next.jsJak poprawić Core Web Vitals w aplikacji Next.js
Jak poprawić Core Web Vitals w aplikacji Next.jsThe Software House
 
Testowanie rozwiązań serverless z LocalStack
Testowanie rozwiązań serverless z LocalStackTestowanie rozwiązań serverless z LocalStack
Testowanie rozwiązań serverless z LocalStackThe Software House
 
Metaprogramowanie w JS
Metaprogramowanie w JSMetaprogramowanie w JS
Metaprogramowanie w JSDawid Rusnak
 
Drupal jako modularny i rozszerzalny CMS [PL]
Drupal jako modularny i rozszerzalny CMS [PL]Drupal jako modularny i rozszerzalny CMS [PL]
Drupal jako modularny i rozszerzalny CMS [PL]Droptica
 
TV i video w Internecie
TV i video w InternecieTV i video w Internecie
TV i video w InternecieDivante
 
Hugo - make webdev fun again
Hugo - make webdev fun againHugo - make webdev fun again
Hugo - make webdev fun againMarcin Gajda
 
Apache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użyciaApache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użyciaWojciech Lichota
 
LXC - kontener pingwinów
LXC - kontener pingwinówLXC - kontener pingwinów
LXC - kontener pingwinówgnosek
 
Lokalny development z kubernetes
Lokalny development z kubernetesLokalny development z kubernetes
Lokalny development z kubernetesPiotr Mińkowski
 

What's hot (20)

Swoole w PHP. Czy to ma sens?
Swoole w PHP. Czy to ma sens?Swoole w PHP. Czy to ma sens?
Swoole w PHP. Czy to ma sens?
 
Websockety w PHP
Websockety w PHPWebsockety w PHP
Websockety w PHP
 
4Developers 2015: Szybciej niż Struś Pędziwiatr - WebSockets w aplikacjach we...
4Developers 2015: Szybciej niż Struś Pędziwiatr - WebSockets w aplikacjach we...4Developers 2015: Szybciej niż Struś Pędziwiatr - WebSockets w aplikacjach we...
4Developers 2015: Szybciej niż Struś Pędziwiatr - WebSockets w aplikacjach we...
 
PHP-PM. Hit czy kit?
PHP-PM. Hit czy kit?PHP-PM. Hit czy kit?
PHP-PM. Hit czy kit?
 
Jak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzieńJak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzień
 
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
 
WordCamp Gdynia 2016
WordCamp Gdynia 2016WordCamp Gdynia 2016
WordCamp Gdynia 2016
 
DynamoDB – podstawy modelowania danych dla opornych
DynamoDB – podstawy modelowania danych dla opornychDynamoDB – podstawy modelowania danych dla opornych
DynamoDB – podstawy modelowania danych dla opornych
 
Kubernetes (Canary) Deployments
Kubernetes (Canary) DeploymentsKubernetes (Canary) Deployments
Kubernetes (Canary) Deployments
 
Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]
Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]
Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]
 
Jak poprawić Core Web Vitals w aplikacji Next.js
Jak poprawić Core Web Vitals w aplikacji Next.jsJak poprawić Core Web Vitals w aplikacji Next.js
Jak poprawić Core Web Vitals w aplikacji Next.js
 
Testowanie rozwiązań serverless z LocalStack
Testowanie rozwiązań serverless z LocalStackTestowanie rozwiązań serverless z LocalStack
Testowanie rozwiązań serverless z LocalStack
 
Metaprogramowanie w JS
Metaprogramowanie w JSMetaprogramowanie w JS
Metaprogramowanie w JS
 
Drupal jako modularny i rozszerzalny CMS [PL]
Drupal jako modularny i rozszerzalny CMS [PL]Drupal jako modularny i rozszerzalny CMS [PL]
Drupal jako modularny i rozszerzalny CMS [PL]
 
TV i video w Internecie
TV i video w InternecieTV i video w Internecie
TV i video w Internecie
 
Hugo - make webdev fun again
Hugo - make webdev fun againHugo - make webdev fun again
Hugo - make webdev fun again
 
Apache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użyciaApache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użycia
 
LXC - kontener pingwinów
LXC - kontener pingwinówLXC - kontener pingwinów
LXC - kontener pingwinów
 
Lokalny development z kubernetes
Lokalny development z kubernetesLokalny development z kubernetes
Lokalny development z kubernetes
 
Feo w-joomla
Feo w-joomlaFeo w-joomla
Feo w-joomla
 

Similar to The story of GOG.com Cache - 4developers 2014 ( PL )

The story of GOG.com Cache - PHPers 2014 ( PL )
 The story of GOG.com Cache - PHPers 2014 ( PL ) The story of GOG.com Cache - PHPers 2014 ( PL )
The story of GOG.com Cache - PHPers 2014 ( PL )GOG.com dev team
 
PLNOG 4: Przemysław Frasunek - CDN w Polsce - czyli jak my to robimy
PLNOG 4: Przemysław Frasunek - CDN w Polsce - czyli jak my to robimyPLNOG 4: Przemysław Frasunek - CDN w Polsce - czyli jak my to robimy
PLNOG 4: Przemysław Frasunek - CDN w Polsce - czyli jak my to robimyPROIDEA
 
PLNOG 6: Marcin Kaptur, Tomasz Charewicz - Onet VOD
PLNOG 6: Marcin Kaptur, Tomasz Charewicz - Onet VODPLNOG 6: Marcin Kaptur, Tomasz Charewicz - Onet VOD
PLNOG 6: Marcin Kaptur, Tomasz Charewicz - Onet VODPROIDEA
 
PLNOG 18 - Sebastian Pasternacki - Bezpieczeństwo sieci operatorskich oraz en...
PLNOG 18 - Sebastian Pasternacki - Bezpieczeństwo sieci operatorskich oraz en...PLNOG 18 - Sebastian Pasternacki - Bezpieczeństwo sieci operatorskich oraz en...
PLNOG 18 - Sebastian Pasternacki - Bezpieczeństwo sieci operatorskich oraz en...PROIDEA
 
PLNOG 3: Tomasz Paszkowski Wysokowydajny system składowania plików graficzny...
PLNOG 3: Tomasz Paszkowski  Wysokowydajny system składowania plików graficzny...PLNOG 3: Tomasz Paszkowski  Wysokowydajny system składowania plików graficzny...
PLNOG 3: Tomasz Paszkowski Wysokowydajny system składowania plików graficzny...PROIDEA
 
PLNOG 21: Łukasz Trąbiński, Konrad Pilch - Jak_sterować_ogólnopolską_siecią_C...
PLNOG 21: Łukasz Trąbiński, Konrad Pilch - Jak_sterować_ogólnopolską_siecią_C...PLNOG 21: Łukasz Trąbiński, Konrad Pilch - Jak_sterować_ogólnopolską_siecią_C...
PLNOG 21: Łukasz Trąbiński, Konrad Pilch - Jak_sterować_ogólnopolską_siecią_C...PROIDEA
 
Word up warszawa 2015
Word up warszawa 2015Word up warszawa 2015
Word up warszawa 2015Tomasz Dziuda
 
Optymalizacja hostingu
Optymalizacja hostinguOptymalizacja hostingu
Optymalizacja hostinguDivante
 
IT od kuchni w Nokaut.pl
IT od kuchni w Nokaut.pl IT od kuchni w Nokaut.pl
IT od kuchni w Nokaut.pl 3camp
 
Wprowadzenie do Big Data i Apache Spark
Wprowadzenie do Big Data i Apache SparkWprowadzenie do Big Data i Apache Spark
Wprowadzenie do Big Data i Apache SparkSages
 
Projektowanie wysokowydajnych i skalowalnych serwisów WWW - Warstwa danych
Projektowanie wysokowydajnych i skalowalnych serwisów WWW - Warstwa danychProjektowanie wysokowydajnych i skalowalnych serwisów WWW - Warstwa danych
Projektowanie wysokowydajnych i skalowalnych serwisów WWW - Warstwa danychAntoni Orfin
 
Cometari Dedicated Solutions Oferta ogólna
Cometari Dedicated Solutions Oferta ogólnaCometari Dedicated Solutions Oferta ogólna
Cometari Dedicated Solutions Oferta ogólnaJakub Hajek
 
Architektura serwisu gg.pl 2 przemek łącki (2)
Architektura serwisu gg.pl 2   przemek łącki (2)Architektura serwisu gg.pl 2   przemek łącki (2)
Architektura serwisu gg.pl 2 przemek łącki (2)Cendoo
 
PLNOG 8: Paweł Pytlakowski - Hosting i backup danych w środowisku operatorskim
PLNOG 8: Paweł Pytlakowski - Hosting i backup danych w środowisku operatorskim PLNOG 8: Paweł Pytlakowski - Hosting i backup danych w środowisku operatorskim
PLNOG 8: Paweł Pytlakowski - Hosting i backup danych w środowisku operatorskim PROIDEA
 
Qnap - rozwiązania, portfolio, zastosowanie
Qnap  - rozwiązania, portfolio, zastosowanieQnap  - rozwiązania, portfolio, zastosowanie
Qnap - rozwiązania, portfolio, zastosowanieEIP Sp. z o.o.
 
Wersjonowanie kodu. Dobre praktyki na przykładzie przejścia z CVS na GITa
Wersjonowanie kodu. Dobre praktyki na przykładzie przejścia z CVS na GITaWersjonowanie kodu. Dobre praktyki na przykładzie przejścia z CVS na GITa
Wersjonowanie kodu. Dobre praktyki na przykładzie przejścia z CVS na GITamarekmisztal
 

Similar to The story of GOG.com Cache - 4developers 2014 ( PL ) (20)

The story of GOG.com Cache - PHPers 2014 ( PL )
 The story of GOG.com Cache - PHPers 2014 ( PL ) The story of GOG.com Cache - PHPers 2014 ( PL )
The story of GOG.com Cache - PHPers 2014 ( PL )
 
PLNOG 4: Przemysław Frasunek - CDN w Polsce - czyli jak my to robimy
PLNOG 4: Przemysław Frasunek - CDN w Polsce - czyli jak my to robimyPLNOG 4: Przemysław Frasunek - CDN w Polsce - czyli jak my to robimy
PLNOG 4: Przemysław Frasunek - CDN w Polsce - czyli jak my to robimy
 
PLNOG 6: Marcin Kaptur, Tomasz Charewicz - Onet VOD
PLNOG 6: Marcin Kaptur, Tomasz Charewicz - Onet VODPLNOG 6: Marcin Kaptur, Tomasz Charewicz - Onet VOD
PLNOG 6: Marcin Kaptur, Tomasz Charewicz - Onet VOD
 
PLNOG 18 - Sebastian Pasternacki - Bezpieczeństwo sieci operatorskich oraz en...
PLNOG 18 - Sebastian Pasternacki - Bezpieczeństwo sieci operatorskich oraz en...PLNOG 18 - Sebastian Pasternacki - Bezpieczeństwo sieci operatorskich oraz en...
PLNOG 18 - Sebastian Pasternacki - Bezpieczeństwo sieci operatorskich oraz en...
 
PLNOG 3: Tomasz Paszkowski Wysokowydajny system składowania plików graficzny...
PLNOG 3: Tomasz Paszkowski  Wysokowydajny system składowania plików graficzny...PLNOG 3: Tomasz Paszkowski  Wysokowydajny system składowania plików graficzny...
PLNOG 3: Tomasz Paszkowski Wysokowydajny system składowania plików graficzny...
 
PLNOG 21: Łukasz Trąbiński, Konrad Pilch - Jak_sterować_ogólnopolską_siecią_C...
PLNOG 21: Łukasz Trąbiński, Konrad Pilch - Jak_sterować_ogólnopolską_siecią_C...PLNOG 21: Łukasz Trąbiński, Konrad Pilch - Jak_sterować_ogólnopolską_siecią_C...
PLNOG 21: Łukasz Trąbiński, Konrad Pilch - Jak_sterować_ogólnopolską_siecią_C...
 
Word up warszawa 2015
Word up warszawa 2015Word up warszawa 2015
Word up warszawa 2015
 
Optymalizacja hostingu
Optymalizacja hostinguOptymalizacja hostingu
Optymalizacja hostingu
 
It od kuchni w nokaut.pl
It od kuchni w nokaut.plIt od kuchni w nokaut.pl
It od kuchni w nokaut.pl
 
IT od kuchni w Nokaut.pl
IT od kuchni w Nokaut.pl IT od kuchni w Nokaut.pl
IT od kuchni w Nokaut.pl
 
Wprowadzenie do Big Data i Apache Spark
Wprowadzenie do Big Data i Apache SparkWprowadzenie do Big Data i Apache Spark
Wprowadzenie do Big Data i Apache Spark
 
Projektowanie wysokowydajnych i skalowalnych serwisów WWW - Warstwa danych
Projektowanie wysokowydajnych i skalowalnych serwisów WWW - Warstwa danychProjektowanie wysokowydajnych i skalowalnych serwisów WWW - Warstwa danych
Projektowanie wysokowydajnych i skalowalnych serwisów WWW - Warstwa danych
 
Cometari Dedicated Solutions Oferta ogólna
Cometari Dedicated Solutions Oferta ogólnaCometari Dedicated Solutions Oferta ogólna
Cometari Dedicated Solutions Oferta ogólna
 
Provident
ProvidentProvident
Provident
 
Architektura serwisu gg.pl 2 przemek łącki (2)
Architektura serwisu gg.pl 2   przemek łącki (2)Architektura serwisu gg.pl 2   przemek łącki (2)
Architektura serwisu gg.pl 2 przemek łącki (2)
 
PLNOG 8: Paweł Pytlakowski - Hosting i backup danych w środowisku operatorskim
PLNOG 8: Paweł Pytlakowski - Hosting i backup danych w środowisku operatorskim PLNOG 8: Paweł Pytlakowski - Hosting i backup danych w środowisku operatorskim
PLNOG 8: Paweł Pytlakowski - Hosting i backup danych w środowisku operatorskim
 
Qnap - rozwiązania, portfolio, zastosowanie
Qnap  - rozwiązania, portfolio, zastosowanieQnap  - rozwiązania, portfolio, zastosowanie
Qnap - rozwiązania, portfolio, zastosowanie
 
MongoDB 2011
MongoDB 2011MongoDB 2011
MongoDB 2011
 
Wydajny frontend 2023
Wydajny frontend 2023Wydajny frontend 2023
Wydajny frontend 2023
 
Wersjonowanie kodu. Dobre praktyki na przykładzie przejścia z CVS na GITa
Wersjonowanie kodu. Dobre praktyki na przykładzie przejścia z CVS na GITaWersjonowanie kodu. Dobre praktyki na przykładzie przejścia z CVS na GITa
Wersjonowanie kodu. Dobre praktyki na przykładzie przejścia z CVS na GITa
 

More from GOG.com dev team

In-depth caching in Varnish - GOG Varnish Meetup, march 2019
In-depth caching in Varnish - GOG Varnish Meetup, march 2019In-depth caching in Varnish - GOG Varnish Meetup, march 2019
In-depth caching in Varnish - GOG Varnish Meetup, march 2019GOG.com dev team
 
Always up to date, testable and maintainable documentation with OpenAPI
Always up to date, testable and maintainable documentation with OpenAPIAlways up to date, testable and maintainable documentation with OpenAPI
Always up to date, testable and maintainable documentation with OpenAPIGOG.com dev team
 
Symfony without the framework
Symfony without the frameworkSymfony without the framework
Symfony without the frameworkGOG.com dev team
 
Versioning challenges in micro services of Gwent
Versioning challenges in micro services of GwentVersioning challenges in micro services of Gwent
Versioning challenges in micro services of GwentGOG.com dev team
 
Przetwarzanie rozproszone z wykorzystaniem komunikacji asynchronicznej w grze...
Przetwarzanie rozproszone z wykorzystaniem komunikacji asynchronicznej w grze...Przetwarzanie rozproszone z wykorzystaniem komunikacji asynchronicznej w grze...
Przetwarzanie rozproszone z wykorzystaniem komunikacji asynchronicznej w grze...GOG.com dev team
 
Event sourcing w PHP (by Piotr Kacała)
Event sourcing w PHP (by Piotr Kacała)Event sourcing w PHP (by Piotr Kacała)
Event sourcing w PHP (by Piotr Kacała)GOG.com dev team
 
Design Thinking Workshop: Empathy in the User Experience
Design Thinking Workshop: Empathy in the User ExperienceDesign Thinking Workshop: Empathy in the User Experience
Design Thinking Workshop: Empathy in the User ExperienceGOG.com dev team
 
Lean UX - How to start with Lean Startup in User Experience
Lean UX - How to start with Lean Startup in User ExperienceLean UX - How to start with Lean Startup in User Experience
Lean UX - How to start with Lean Startup in User ExperienceGOG.com dev team
 

More from GOG.com dev team (9)

In-depth caching in Varnish - GOG Varnish Meetup, march 2019
In-depth caching in Varnish - GOG Varnish Meetup, march 2019In-depth caching in Varnish - GOG Varnish Meetup, march 2019
In-depth caching in Varnish - GOG Varnish Meetup, march 2019
 
Always up to date, testable and maintainable documentation with OpenAPI
Always up to date, testable and maintainable documentation with OpenAPIAlways up to date, testable and maintainable documentation with OpenAPI
Always up to date, testable and maintainable documentation with OpenAPI
 
Symfony without the framework
Symfony without the frameworkSymfony without the framework
Symfony without the framework
 
Versioning challenges in micro services of Gwent
Versioning challenges in micro services of GwentVersioning challenges in micro services of Gwent
Versioning challenges in micro services of Gwent
 
Przetwarzanie rozproszone z wykorzystaniem komunikacji asynchronicznej w grze...
Przetwarzanie rozproszone z wykorzystaniem komunikacji asynchronicznej w grze...Przetwarzanie rozproszone z wykorzystaniem komunikacji asynchronicznej w grze...
Przetwarzanie rozproszone z wykorzystaniem komunikacji asynchronicznej w grze...
 
Event sourcing w PHP (by Piotr Kacała)
Event sourcing w PHP (by Piotr Kacała)Event sourcing w PHP (by Piotr Kacała)
Event sourcing w PHP (by Piotr Kacała)
 
Design Thinking Workshop: Empathy in the User Experience
Design Thinking Workshop: Empathy in the User ExperienceDesign Thinking Workshop: Empathy in the User Experience
Design Thinking Workshop: Empathy in the User Experience
 
Lean UX - How to start with Lean Startup in User Experience
Lean UX - How to start with Lean Startup in User ExperienceLean UX - How to start with Lean Startup in User Experience
Lean UX - How to start with Lean Startup in User Experience
 
Varnish cache
Varnish cacheVarnish cache
Varnish cache
 

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

  • 1. WIELOWARSTWOWY CACHE Na przykładzie serwisu GOG.com Maciej Włodarkiewicz
  • 2. O mnie GOG.com Head of Web Development GG Network S.A. Web Backend Lead 7 lat doświadczenia przy dużych aplikacjach internetowych 5 lat doświadczenia jako kierownik zespołu
  • 3. 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
  • 4. 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
  • 5. Wyzwania, którym musimy sprostać Globalny zasięg Szybkość dostępu Dynamika odwiedzalności
  • 6. Globalny zasięg Regularne wejścia na stronę GOG.com ma odnotowane przynajmniej jedno wejście z każdego kraju na świecie
  • 7. 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
  • 8. Dynamika odwiedzalności Free Game: Dungeon Keeper Fall Insomnia Promo DRM-Free Winter Sale EA Exclusives Weekend Promo
  • 9. Walka z odległością - początki GOG.com 2008 DataCenter w Kanadzie (Montreal)
  • 11. 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
  • 12. Walka z odległością 2011 DataCenter w Polsce (Warszawa); sieć rozproszona EdgeCast (POP’y)
  • 13. Content Delivery Network - CDN Tryby pracy: Tryby dostępu do plików: Push sami uploadujemy na serwery zewnętrzne Pull ADN (Application Delivery Network); aplikacja pobiera zawartość Open niezabezpieczone, dostępne dla wszystkich Secure chronione poprzez podpisywanie URL zkrótkim TTL
  • 14. Content Delivery Network - CDN static assets games files gog.com pages secure.gog.com
  • 15. 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
  • 16. Cache pełnych stron globalnie CDN Browser ADN Backend
  • 17. 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
  • 18. Browser ADN Backend Varnish-Cache CDN
  • 19. Browser ADN Backend Varnish-Cache Varnish CDN
  • 20. 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
  • 21. Cache wewnętrzny CDN Browser ADN Varnish Backend
  • 22. Cache wewnętrzny Browser ADN Varnish Backend Cache wewnętrzny CDN
  • 23. 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
  • 24. Browser cache Browser ADN Varnish Backend Cache wewnętrzny CDN
  • 25. Browser ADN Varnish Backend Cache wewnętrzny Browser cache Browser cache CDN
  • 26. 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”
  • 27. Wiele różnych poziomów cache Zarządzanie inwalidacją cache Stosowanie długiego cache z wymuszeniem inwalidacji jest trudną i kosztowną operacją, Inwalidacja plików na CDN przez zmianę nazwy 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
  • 28. 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
  • 29. Wyzwania, którym sprostaliśmy Globalny zasięg Szybkość dostępu Dynamika odwiedzalności
  • 30. Podsumowanie Wnioski: Dostosowujmy architekturę do potrzeb ADN/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
  • 31. 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
  • 32. SZUKAMY WEBDEVÓW Więcej informacji u mnie lub na stronie GOG.com/work
  • 33. SZUKAMY WEBDEVÓW Więcej informacji u mnie lub na stronie GOG.com/work DZIĘKUJĘ ZA UWAGĘ …i zapraszam po darmowego Wiedźmina :)