SlideShare une entreprise Scribd logo
1  sur  65
Télécharger pour lire hors ligne
JAK WYDALIŚMY WIEDŹMINA
“PRZYGOTOWANIA, SĄDNA NOC, AŻ PO SZAMPANA"
Łukasz Buczyński / Maciej Włodarkiewicz
O nas
GOG.com - pla?orma cyfrowej dystrybucji gier
Historia Start w 2008 pod skrzydłami CD Projekt, zespół kilku osób
Obecnie zatrudnionych jest ponad 100 osób
Obecna pozycja #1 globalnej dystrybucji klasycznych gier na PC i Mac
#2 globalnej dystrybucji gier indie na PC i Mac
Partnerzy 250+ twórców i wydawców gier
Klienci Ponad 5 miliony unikalnych wejść miesięcznie z całego
świata
Gry Ponad 1400 tytułów w katalogu
Ponad 40 milionów gier na kontach użytkowników
Agenda
1. Założenia projektu GOG Galaxy
2. Budowa i działanie systemu
3. Infrastruktura GOG
GOG Galaxy Pipeline
Założenia projektu GOG Galaxy
Założenia projektu GOG Galaxy
• Uproszczenie instalacji oraz aktualizacji gier
• Automatyczne dostarczanie aktualizacji do graczy
• Automatyzacja procesu budowania gier
• Minimalizacja czasu instalacji
• Wsparcie premier gier, także wersji pudełkowej
Ilość plików do manualnego pobrania - przykład Dying Light
Premiera gry w wydaniu pudełkowym
• Pre-load - możliwość pobrania znaczącej części gry przez
fizyczną premierą. Znacznie skraca czas potrzebny do zagrania
• 0-day patch - uruchomienie dostępu do gry wszystkim
graczom dokładnie w tym samym momencie
Wydanie Wiedźmina 3 - statystyki
• 600 000 aktywacji gry w pierwszych dniach od premiery w
pla?ormie GOG Galaxy
• bez problemów
GOG Galaxy Pipeline
Budowa systemu
Budowa i działanie systemu
Naszym głównym założeniem było odseparowanie logiki pobierania gier od ich
fizycznego położenia oraz wsparcie dla wielu storage’y plikowych, głównie w
chmurze
CONTENT SYSTEM
Budowa i działanie systemu
CLOUD STORAGE
GOG GALAXY
desktop web
GAME BUILDER
CONTENT SYSTEM
Budowa i działanie systemu - Content System
CLOUD STORAGE
GOG GALAXY
desktop web
CONTENT SYSTEM
Budowa i działanie systemu - Content-System API
• Aplikacja PHP
• Generuje dane dostępowe do procesu ściągania gier
• Przechowuje meta dane wszystkich gier
• API całkowicie niezależne od użytego Cloud Storage
• Technologie: Varnish Cache, PHP 5.6, Symfony2, HHVM
Budowa i działanie systemu - Content-System API - wydajność
• PHP + HHVM + Symfony2
• 1000 r/s z pojedynczej maszyny (8x core)
• 15.000 r/s dla meta-danych - Varnish Cache
• Prosta konstrukcja zapewnia skalowanie prawie liniowe
• Mikro serwis, skalowany oraz rozwijany osobno
• Pełne HA, redundancja każdego elementu
GOG Galaxy ADN PHPVarnish CacheApp cache
CDN
Budowa i działanie systemu - Content-System API - cache
CONTENT SYSTEM
Budowa i działanie systemu - Cloud Storage
CLOUD STORAGE
GOG GALAXY
desktop web
CONTENT SYSTEM
Budowa i działanie systemu - Struktura gry
• Gra złożona jest do jednego pliku bigfile
• Bigfile jest opisany przez plik z meta danymi manifest
• Bigfile składa się z depotów, konkretnych fragmentów gry np. plików językowych
• Do wydania nowej wersji gry potrzebny jest upload nowego bigfile
• Aplikacja desktopowa pobiera update różnicowo z rozdzielczością jednego pliku
Budowa i działanie systemu - Struktura gry
GAME_PL.DAT
GAME.EXE GAME_PL.DAT GAME_EN.DAT
GAME.EXE
GAME_EN.DATGAME.EXE
MANIFEST_PL MANIFEST_EN
Budowa i działanie systemu - Struktura gry
GAME_PL.DAT
GAME.EXE GAME_PL.DAT GAME_EN.DAT
GAME.EXE
GAME_EN.DATGAME.EXE
MANIFEST_PL MANIFEST_EN
Budowa i działanie systemu - Cloud Storage
• Przechowuje pliki gier
• Użytkownicy ściągają gry bezpośrednio z Cloud Storage
• Technologie: EdgeCast® oraz Akamai@
DataCenter (Warszawa) oraz
sieć rozproszona CDN
Budowa i działanie systemu - Cloud Storage - zasięg
Budowa i działanie systemu - Cloud Storage - tryby pracy
Tryby pracy: Tryby dostępu do plików:
Pull - nieużywany
Push - game builder Open - meta dane
Secure - pliki gier
CONTENT SYSTEM
Budowa i działanie systemu - GOG Galaxy
CLOUD STORAGE
GOG GALAXY
desktop web
CONTENT SYSTEM
Budowa i działanie systemu - GOG Galaxy
• Aplikacja desktopowa na Windows oraz OSX
• Potrafi przeanalizować lokalne pliki gry oraz porównuje je ze Cloud Storage
• Pozwala na pobranie poprzednich wersji gry - rollback system
• Obsługuję wiele wersji gry na raz - branches
• Technologie: C++, Chromium embeded, AngularJS
CONTENT SYSTEM
Budowa i działanie systemu - upload gry
CLOUD STORAGE
GOG GALAXY
desktop web
GAME BUILDER
CONTENT SYSTEM
Budowa i działanie systemu - pobieranie meta danych
CLOUD STORAGE
GOG GALAXY
desktop web
CONTENT SYSTEM
CONTENT SYSTEM
Budowa i działanie systemu - lokalne porównanie plików
CLOUD STORAGE
GOG GALAXY
desktop web
CONTENT SYSTEM
CONTENT SYSTEM
Budowa i działanie systemu - uzyskanie dostępu do plików gry
CLOUD STORAGE
GOG GALAXY
desktop web
CONTENT SYSTEM
CONTENT SYSTEM
Budowa i działanie systemu - pobieranie plików
CLOUD STORAGE
GOG GALAXY
desktop web
CONTENT SYSTEM
GOG Galaxy Pipeline
Analiza wybranych problemów
GOG.com Galaxy - problem #1
Długi czas dostarczenia gry do CDN
• Cała gra budowana jest do jednego pliku
• Nawet najmniejsza zmiana wymusza ponowny upload całej gry
• Każdy mały update generuje zawsze duży upload
GOG.com Galaxy - problem #2
Długi czas dostarczenia gry do graczy z CDN
• Cała gra budowana jest do jednego pliku
• Wiedźmin 3 miał 50Gb w dniu premiery
• Pojedynczy plik 50GB musi zostać rozpropagowany na wszystkie POP’y
• Całkowity czas wykonania oraz dostarczenia aktualizacji trwa nawet 3 dni!
GOG Galaxy Pipeline
GOG Galaxy Pipeline 2.0
games in-development
GOG Galaxy Pipeline 2.0
Nowe wymagania
• Niektóre gry uaktualniane są codziennie
• Developerzy chcą wydawać aktualizacje natychmiast
• a Użytkownicy chcą otrzymywać je jak najszybciej jest to możliwe
• Co raz więcej gier wydawanych jest w modelu in-development
GOG Galaxy Pipeline 2.0
Proponowane rozwiązania
• Rezygnacja z budowania gry do jednego pliku
• Stworzenie narzędzi do automatycznego budowania oraz wrzucania gier
GOG Galaxy Pipeline 2.0 - rozwiązanie #1
Rezygnacja z budowania całej gry do jednego pliku
• Gry będą dzielone na chunki o wielkości 10MB
• Mniejsze pliki grupowane są do pełnego chunka
• Każdy z nich opisany jest przez hash czyli skrót z swojej zawartości
GOG Galaxy Pipeline 2.0 - rozwiązanie #2
Narzędzia dla developerów gier
• Oddajemy narzędzia do wrzucania gier do developerów
• Content System API przechowuje informacje o wszyskich wrzuconych chunkach
oraz ich hashach
• Umożliwia to deduplikację danych podczas uploadu
• Upload dyferencyjny
GOG Galaxy Pipeline 2.0 - rozwiązanie #2
Narzędzia dla developerów gier
• Developerzy zyskują możliwość samodzielnego publikowania zmian
• Developerzy rozproszeni są po całym świecie
• Developerzy pracują 24/7
GOG Galaxy Pipeline
Nowa usługa webowa - Game Receiver
narzędzia dla developerów
Nowa usługa webowa - Game Receiver
• Aplikacja PHP
• Przyjmuje bezpośredni upload od developerów poprzez HTTPS
• Propaguje asynchronicznie pliki do dowolnej ilości Cloud Storage
• Aby być bliżej developerów, aplikacja została rozproszona po całym świecie
• Technologie: Varnish Cache, PHP 5.6, Symfony2, HHVM, RabbitMQ, Celery
Budowa i działanie systemu - Game Receiver - wydajność
• PHP + HHVM + Symfony2
• Celery + RabbitMQ
• Prosta konstrukcja zapewnia skalowanie prawie liniowe
• Serwery dostawiane są zgodnie z zapotrzebowaniem od developerów
• Mikro serwis, skalowany oraz rozwijany osobno
• Pełne HA, redundancja każdego elementu
CONTENT SYSTEM
Budowa i działanie systemu - upload gry 2.0
CLOUD STORAGE
GOG GALAXY
desktop web
GAME BUILDER
GAME RECEIVER
CLOUD STORAGE
CONTENT SYSTEM
Budowa i działanie systemu - upload gry 2.0
CLOUD STORAGE
GOG GALAXY
desktop web
GAME RECEIVER
CLOUD STORAGE
CONTENT SYSTEM
GOG Galaxy
Infrastruktura GOG
Infrastruktura GOG w liczbach
• Stale rosnąca infrastruktura, przyrost ok 200% na rok
• Ponad 100 serwerów fizycznych
• Blisko 800 serwerów wirtualnych
• Prawie 200 serwerów wirtualnych w biurze
• Od 15 do 30 wcketów na dzień
• Ruch sieciowy między 20 a 200 Gbps
Infrastruktura GOG w liczbach
Infrastruktura z lotu ptaka
• Każde urządzenie w redundancji
• Wiele sesji BGP
• Między rackami 2x10Gbps
Pojedynczy compute node
• 2x1Gbps, dlaczego ?
• Bonding
• Osobne sieci vlan dla usług
• Między rackami 2x10Gbps
• XEN
• Wszędzie bridge
Typowy projekt
• Każdy projekt ma szablonową konstrukcję
• Acwve/Acwve vs Acwve/Standby
• LB tests
Co dalej ?
• Skalowanie na zawołanie?
• Wrzutka kodu, co z aktualizacjami?
• Wąskie gardła? :-)
• Statystyki, dashboardy
• Logi, centralizacja, wizualizacja
• Co robi aplikacja?
Jak pomóc devom zrozumieć serwery :)
• Newrelic - analiza działania aplikacji
• XDebug - profilowania kodu
• Wykresy - statystyki i anomalie
• Logi - czemu się popsuło
Knujemy
• Co mówi biznes? setki tysięcy pobrań pierwszego dnia!
• Ile użytkowników? setki tysięcy użytkowników online!
• Jakie łącza? setki gigabitów ruchu!
• Jak to wszystko skonfigurować? automatyzacja!
Cele wydaniowe:
• Nie kupujemy sprzętu! / Wynajmujemy !
• Automatyzacja konfiguracji oraz deploymentu
• Dystrybucja plików poprzez CDN, @EdgeCast
• Wzrost ruchu o ponad 1500%, co z pozostałymi usługami?
• Prefetch przed wydaniem
• Dzień premiery
Ansible
• Szablony/role
• zmienne w roli
Dystrybucja kodu
• Capistrano?
• Inne?
• Własne :)
CRUSADER
Możliwości Crusadera - cechy
• Budowanie kodu (docker) w specyficznym środowisku
• Budowanie paczek debianowych
• Świadomość infrastruktury lb+workery
• Wygaszanie workerów przed deployem
• Wersjonowanie paczek
• Szybki rollback
• Notyfikacje
Możliwości Crusadera - działanie
0-day
• Start o północy
• Dashboardy
• Łącza
• CPU
• Ilość zalogowanych
Podsumowanie wydania Wiedźmina 3 na GOG Galaxy
hzps://www.youtube.com/v/9vh5mxm5Jy8
PYTANIA?
SZUKAMY LUDZI!
Więcej informacji u nas lub na stronie GOG.com/work
DZIĘKUJĘ ZA UWAGĘ

Contenu connexe

Tendances

“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
 
Kubernetes (Canary) Deployments
Kubernetes (Canary) DeploymentsKubernetes (Canary) Deployments
Kubernetes (Canary) DeploymentsThe Software House
 
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
 
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
 
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
 
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
 
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
 
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
 
Hugo - make webdev fun again
Hugo - make webdev fun againHugo - make webdev fun again
Hugo - make webdev fun againMarcin Gajda
 
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
 
Migrate API w Drupalu [PL]
Migrate API w Drupalu [PL]Migrate API w Drupalu [PL]
Migrate API w Drupalu [PL]Droptica
 
Kubernetes - 0 do 1 - 4Developers Warszawa 2019
Kubernetes - 0 do 1 - 4Developers Warszawa 2019Kubernetes - 0 do 1 - 4Developers Warszawa 2019
Kubernetes - 0 do 1 - 4Developers Warszawa 2019Michał Kurzeja
 

Tendances (16)

Websockety w PHP
Websockety w PHPWebsockety w PHP
Websockety w PHP
 
“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...
 
Kubernetes (Canary) Deployments
Kubernetes (Canary) DeploymentsKubernetes (Canary) Deployments
Kubernetes (Canary) Deployments
 
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ń
 
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
 
PHP-PM. Hit czy kit?
PHP-PM. Hit czy kit?PHP-PM. Hit czy kit?
PHP-PM. Hit czy kit?
 
DynamoDB – podstawy modelowania danych dla opornych
DynamoDB – podstawy modelowania danych dla opornychDynamoDB – podstawy modelowania danych dla opornych
DynamoDB – podstawy modelowania danych dla opornych
 
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
 
Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]
Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]
Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]
 
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]
 
Hugo - make webdev fun again
Hugo - make webdev fun againHugo - make webdev fun again
Hugo - make webdev fun again
 
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
 
Migrate API w Drupalu [PL]
Migrate API w Drupalu [PL]Migrate API w Drupalu [PL]
Migrate API w Drupalu [PL]
 
Kubernetes - 0 do 1 - 4Developers Warszawa 2019
Kubernetes - 0 do 1 - 4Developers Warszawa 2019Kubernetes - 0 do 1 - 4Developers Warszawa 2019
Kubernetes - 0 do 1 - 4Developers Warszawa 2019
 

Similaire à Jak wydaliśmy wiedźmina, GOG.com IT

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
 
The story of GOG.com Cache - 4developers 2014 ( PL )
The story of GOG.com Cache - 4developers 2014 ( PL )The story of GOG.com Cache - 4developers 2014 ( PL )
The story of GOG.com Cache - 4developers 2014 ( PL )GOG.com dev team
 
ROS3D - Podsumowanie prac nad projektem
ROS3D - Podsumowanie prac nad projektemROS3D - Podsumowanie prac nad projektem
ROS3D - Podsumowanie prac nad projektemOpen-RnD
 
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
 
4Developers: Jarek Wojczakowski- Technologie w świecie gier mobilnych
4Developers: Jarek Wojczakowski- Technologie w świecie gier mobilnych4Developers: Jarek Wojczakowski- Technologie w świecie gier mobilnych
4Developers: Jarek Wojczakowski- Technologie w świecie gier mobilnychPROIDEA
 
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
 
TV i video w Internecie
TV i video w InternecieTV i video w Internecie
TV i video w InternecieDivante
 
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
 
Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow ...
Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow ...Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow ...
Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow ...Mateusz Paprocki, PMP
 
PLNOG 4: Krzysztof Góźdź - Od ssh do batuty - czyli jak z administratora stać...
PLNOG 4: Krzysztof Góźdź - Od ssh do batuty - czyli jak z administratora stać...PLNOG 4: Krzysztof Góźdź - Od ssh do batuty - czyli jak z administratora stać...
PLNOG 4: Krzysztof Góźdź - Od ssh do batuty - czyli jak z administratora stać...PROIDEA
 
Architektura serwera gier online
Architektura serwera gier onlineArchitektura serwera gier online
Architektura serwera gier onlineMaciej Mróz
 
Zbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zapleczaZbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zapleczaGameDesire Academy
 
SQLDay2013_PawełPotasiński_ParallelDataWareHouse
SQLDay2013_PawełPotasiński_ParallelDataWareHouseSQLDay2013_PawełPotasiński_ParallelDataWareHouse
SQLDay2013_PawełPotasiński_ParallelDataWareHousePolish SQL Server User Group
 
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio player
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio playerFull Stack JavaScript case study na podstawie Maracuya Jukebox audio player
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio playerMarek Będkowski
 
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
 
Ochrona przed atakami DDoS na platformie x86. Czy można mieć jednocześnie wyd...
Ochrona przed atakami DDoS na platformie x86. Czy można mieć jednocześnie wyd...Ochrona przed atakami DDoS na platformie x86. Czy można mieć jednocześnie wyd...
Ochrona przed atakami DDoS na platformie x86. Czy można mieć jednocześnie wyd...Redge Technologies
 
Word up warszawa 2015
Word up warszawa 2015Word up warszawa 2015
Word up warszawa 2015Tomasz Dziuda
 
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
 

Similaire à Jak wydaliśmy wiedźmina, GOG.com IT (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 )
 
The story of GOG.com Cache - 4developers 2014 ( PL )
The story of GOG.com Cache - 4developers 2014 ( PL )The story of GOG.com Cache - 4developers 2014 ( PL )
The story of GOG.com Cache - 4developers 2014 ( PL )
 
ROS3D - Podsumowanie prac nad projektem
ROS3D - Podsumowanie prac nad projektemROS3D - Podsumowanie prac nad projektem
ROS3D - Podsumowanie prac nad projektem
 
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
 
4Developers: Jarek Wojczakowski- Technologie w świecie gier mobilnych
4Developers: Jarek Wojczakowski- Technologie w świecie gier mobilnych4Developers: Jarek Wojczakowski- Technologie w świecie gier mobilnych
4Developers: Jarek Wojczakowski- Technologie w świecie gier mobilnych
 
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
 
TV i video w Internecie
TV i video w InternecieTV i video w Internecie
TV i video w Internecie
 
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...
 
Od Zera do Farmera
Od Zera do FarmeraOd Zera do Farmera
Od Zera do Farmera
 
Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow ...
Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow ...Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow ...
Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow ...
 
PLNOG 4: Krzysztof Góźdź - Od ssh do batuty - czyli jak z administratora stać...
PLNOG 4: Krzysztof Góźdź - Od ssh do batuty - czyli jak z administratora stać...PLNOG 4: Krzysztof Góźdź - Od ssh do batuty - czyli jak z administratora stać...
PLNOG 4: Krzysztof Góźdź - Od ssh do batuty - czyli jak z administratora stać...
 
Architektura serwera gier online
Architektura serwera gier onlineArchitektura serwera gier online
Architektura serwera gier online
 
Zbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zapleczaZbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zaplecza
 
SQLDay2013_PawełPotasiński_ParallelDataWareHouse
SQLDay2013_PawełPotasiński_ParallelDataWareHouseSQLDay2013_PawełPotasiński_ParallelDataWareHouse
SQLDay2013_PawełPotasiński_ParallelDataWareHouse
 
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio player
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio playerFull Stack JavaScript case study na podstawie Maracuya Jukebox audio player
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio player
 
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
 
Ochrona przed atakami DDoS na platformie x86. Czy można mieć jednocześnie wyd...
Ochrona przed atakami DDoS na platformie x86. Czy można mieć jednocześnie wyd...Ochrona przed atakami DDoS na platformie x86. Czy można mieć jednocześnie wyd...
Ochrona przed atakami DDoS na platformie x86. Czy można mieć jednocześnie wyd...
 
Word up warszawa 2015
Word up warszawa 2015Word up warszawa 2015
Word up warszawa 2015
 
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
 

Plus de 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
 

Plus de 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
 

Jak wydaliśmy wiedźmina, GOG.com IT

  • 1.
  • 2. JAK WYDALIŚMY WIEDŹMINA “PRZYGOTOWANIA, SĄDNA NOC, AŻ PO SZAMPANA" Łukasz Buczyński / Maciej Włodarkiewicz
  • 4. GOG.com - pla?orma cyfrowej dystrybucji gier Historia Start w 2008 pod skrzydłami CD Projekt, zespół kilku osób Obecnie zatrudnionych jest ponad 100 osób Obecna pozycja #1 globalnej dystrybucji klasycznych gier na PC i Mac #2 globalnej dystrybucji gier indie na PC i Mac Partnerzy 250+ twórców i wydawców gier Klienci Ponad 5 miliony unikalnych wejść miesięcznie z całego świata Gry Ponad 1400 tytułów w katalogu Ponad 40 milionów gier na kontach użytkowników
  • 5. Agenda 1. Założenia projektu GOG Galaxy 2. Budowa i działanie systemu 3. Infrastruktura GOG
  • 6. GOG Galaxy Pipeline Założenia projektu GOG Galaxy
  • 7. Założenia projektu GOG Galaxy • Uproszczenie instalacji oraz aktualizacji gier • Automatyczne dostarczanie aktualizacji do graczy • Automatyzacja procesu budowania gier • Minimalizacja czasu instalacji • Wsparcie premier gier, także wersji pudełkowej
  • 8. Ilość plików do manualnego pobrania - przykład Dying Light
  • 9. Premiera gry w wydaniu pudełkowym • Pre-load - możliwość pobrania znaczącej części gry przez fizyczną premierą. Znacznie skraca czas potrzebny do zagrania • 0-day patch - uruchomienie dostępu do gry wszystkim graczom dokładnie w tym samym momencie
  • 10.
  • 11. Wydanie Wiedźmina 3 - statystyki • 600 000 aktywacji gry w pierwszych dniach od premiery w pla?ormie GOG Galaxy • bez problemów
  • 13. Budowa i działanie systemu Naszym głównym założeniem było odseparowanie logiki pobierania gier od ich fizycznego położenia oraz wsparcie dla wielu storage’y plikowych, głównie w chmurze
  • 14. CONTENT SYSTEM Budowa i działanie systemu CLOUD STORAGE GOG GALAXY desktop web GAME BUILDER
  • 15. CONTENT SYSTEM Budowa i działanie systemu - Content System CLOUD STORAGE GOG GALAXY desktop web CONTENT SYSTEM
  • 16. Budowa i działanie systemu - Content-System API • Aplikacja PHP • Generuje dane dostępowe do procesu ściągania gier • Przechowuje meta dane wszystkich gier • API całkowicie niezależne od użytego Cloud Storage • Technologie: Varnish Cache, PHP 5.6, Symfony2, HHVM
  • 17. Budowa i działanie systemu - Content-System API - wydajność • PHP + HHVM + Symfony2 • 1000 r/s z pojedynczej maszyny (8x core) • 15.000 r/s dla meta-danych - Varnish Cache • Prosta konstrukcja zapewnia skalowanie prawie liniowe • Mikro serwis, skalowany oraz rozwijany osobno • Pełne HA, redundancja każdego elementu
  • 18. GOG Galaxy ADN PHPVarnish CacheApp cache CDN Budowa i działanie systemu - Content-System API - cache
  • 19. CONTENT SYSTEM Budowa i działanie systemu - Cloud Storage CLOUD STORAGE GOG GALAXY desktop web CONTENT SYSTEM
  • 20. Budowa i działanie systemu - Struktura gry • Gra złożona jest do jednego pliku bigfile • Bigfile jest opisany przez plik z meta danymi manifest • Bigfile składa się z depotów, konkretnych fragmentów gry np. plików językowych • Do wydania nowej wersji gry potrzebny jest upload nowego bigfile • Aplikacja desktopowa pobiera update różnicowo z rozdzielczością jednego pliku
  • 21. Budowa i działanie systemu - Struktura gry GAME_PL.DAT GAME.EXE GAME_PL.DAT GAME_EN.DAT GAME.EXE GAME_EN.DATGAME.EXE MANIFEST_PL MANIFEST_EN
  • 22. Budowa i działanie systemu - Struktura gry GAME_PL.DAT GAME.EXE GAME_PL.DAT GAME_EN.DAT GAME.EXE GAME_EN.DATGAME.EXE MANIFEST_PL MANIFEST_EN
  • 23. Budowa i działanie systemu - Cloud Storage • Przechowuje pliki gier • Użytkownicy ściągają gry bezpośrednio z Cloud Storage • Technologie: EdgeCast® oraz Akamai@
  • 24. DataCenter (Warszawa) oraz sieć rozproszona CDN Budowa i działanie systemu - Cloud Storage - zasięg
  • 25. Budowa i działanie systemu - Cloud Storage - tryby pracy Tryby pracy: Tryby dostępu do plików: Pull - nieużywany Push - game builder Open - meta dane Secure - pliki gier
  • 26. CONTENT SYSTEM Budowa i działanie systemu - GOG Galaxy CLOUD STORAGE GOG GALAXY desktop web CONTENT SYSTEM
  • 27. Budowa i działanie systemu - GOG Galaxy • Aplikacja desktopowa na Windows oraz OSX • Potrafi przeanalizować lokalne pliki gry oraz porównuje je ze Cloud Storage • Pozwala na pobranie poprzednich wersji gry - rollback system • Obsługuję wiele wersji gry na raz - branches • Technologie: C++, Chromium embeded, AngularJS
  • 28. CONTENT SYSTEM Budowa i działanie systemu - upload gry CLOUD STORAGE GOG GALAXY desktop web GAME BUILDER
  • 29. CONTENT SYSTEM Budowa i działanie systemu - pobieranie meta danych CLOUD STORAGE GOG GALAXY desktop web CONTENT SYSTEM
  • 30. CONTENT SYSTEM Budowa i działanie systemu - lokalne porównanie plików CLOUD STORAGE GOG GALAXY desktop web CONTENT SYSTEM
  • 31. CONTENT SYSTEM Budowa i działanie systemu - uzyskanie dostępu do plików gry CLOUD STORAGE GOG GALAXY desktop web CONTENT SYSTEM
  • 32. CONTENT SYSTEM Budowa i działanie systemu - pobieranie plików CLOUD STORAGE GOG GALAXY desktop web CONTENT SYSTEM
  • 33. GOG Galaxy Pipeline Analiza wybranych problemów
  • 34. GOG.com Galaxy - problem #1 Długi czas dostarczenia gry do CDN • Cała gra budowana jest do jednego pliku • Nawet najmniejsza zmiana wymusza ponowny upload całej gry • Każdy mały update generuje zawsze duży upload
  • 35. GOG.com Galaxy - problem #2 Długi czas dostarczenia gry do graczy z CDN • Cała gra budowana jest do jednego pliku • Wiedźmin 3 miał 50Gb w dniu premiery • Pojedynczy plik 50GB musi zostać rozpropagowany na wszystkie POP’y • Całkowity czas wykonania oraz dostarczenia aktualizacji trwa nawet 3 dni!
  • 36. GOG Galaxy Pipeline GOG Galaxy Pipeline 2.0 games in-development
  • 37. GOG Galaxy Pipeline 2.0 Nowe wymagania • Niektóre gry uaktualniane są codziennie • Developerzy chcą wydawać aktualizacje natychmiast • a Użytkownicy chcą otrzymywać je jak najszybciej jest to możliwe • Co raz więcej gier wydawanych jest w modelu in-development
  • 38. GOG Galaxy Pipeline 2.0 Proponowane rozwiązania • Rezygnacja z budowania gry do jednego pliku • Stworzenie narzędzi do automatycznego budowania oraz wrzucania gier
  • 39. GOG Galaxy Pipeline 2.0 - rozwiązanie #1 Rezygnacja z budowania całej gry do jednego pliku • Gry będą dzielone na chunki o wielkości 10MB • Mniejsze pliki grupowane są do pełnego chunka • Każdy z nich opisany jest przez hash czyli skrót z swojej zawartości
  • 40. GOG Galaxy Pipeline 2.0 - rozwiązanie #2 Narzędzia dla developerów gier • Oddajemy narzędzia do wrzucania gier do developerów • Content System API przechowuje informacje o wszyskich wrzuconych chunkach oraz ich hashach • Umożliwia to deduplikację danych podczas uploadu • Upload dyferencyjny
  • 41. GOG Galaxy Pipeline 2.0 - rozwiązanie #2 Narzędzia dla developerów gier • Developerzy zyskują możliwość samodzielnego publikowania zmian • Developerzy rozproszeni są po całym świecie • Developerzy pracują 24/7
  • 42. GOG Galaxy Pipeline Nowa usługa webowa - Game Receiver narzędzia dla developerów
  • 43. Nowa usługa webowa - Game Receiver • Aplikacja PHP • Przyjmuje bezpośredni upload od developerów poprzez HTTPS • Propaguje asynchronicznie pliki do dowolnej ilości Cloud Storage • Aby być bliżej developerów, aplikacja została rozproszona po całym świecie • Technologie: Varnish Cache, PHP 5.6, Symfony2, HHVM, RabbitMQ, Celery
  • 44. Budowa i działanie systemu - Game Receiver - wydajność • PHP + HHVM + Symfony2 • Celery + RabbitMQ • Prosta konstrukcja zapewnia skalowanie prawie liniowe • Serwery dostawiane są zgodnie z zapotrzebowaniem od developerów • Mikro serwis, skalowany oraz rozwijany osobno • Pełne HA, redundancja każdego elementu
  • 45. CONTENT SYSTEM Budowa i działanie systemu - upload gry 2.0 CLOUD STORAGE GOG GALAXY desktop web GAME BUILDER GAME RECEIVER CLOUD STORAGE
  • 46. CONTENT SYSTEM Budowa i działanie systemu - upload gry 2.0 CLOUD STORAGE GOG GALAXY desktop web GAME RECEIVER CLOUD STORAGE CONTENT SYSTEM
  • 48. Infrastruktura GOG w liczbach • Stale rosnąca infrastruktura, przyrost ok 200% na rok • Ponad 100 serwerów fizycznych • Blisko 800 serwerów wirtualnych • Prawie 200 serwerów wirtualnych w biurze • Od 15 do 30 wcketów na dzień • Ruch sieciowy między 20 a 200 Gbps
  • 50. Infrastruktura z lotu ptaka • Każde urządzenie w redundancji • Wiele sesji BGP • Między rackami 2x10Gbps
  • 51. Pojedynczy compute node • 2x1Gbps, dlaczego ? • Bonding • Osobne sieci vlan dla usług • Między rackami 2x10Gbps • XEN • Wszędzie bridge
  • 52. Typowy projekt • Każdy projekt ma szablonową konstrukcję • Acwve/Acwve vs Acwve/Standby • LB tests
  • 53. Co dalej ? • Skalowanie na zawołanie? • Wrzutka kodu, co z aktualizacjami? • Wąskie gardła? :-) • Statystyki, dashboardy • Logi, centralizacja, wizualizacja • Co robi aplikacja?
  • 54. Jak pomóc devom zrozumieć serwery :) • Newrelic - analiza działania aplikacji • XDebug - profilowania kodu • Wykresy - statystyki i anomalie • Logi - czemu się popsuło
  • 55. Knujemy • Co mówi biznes? setki tysięcy pobrań pierwszego dnia! • Ile użytkowników? setki tysięcy użytkowników online! • Jakie łącza? setki gigabitów ruchu! • Jak to wszystko skonfigurować? automatyzacja!
  • 56. Cele wydaniowe: • Nie kupujemy sprzętu! / Wynajmujemy ! • Automatyzacja konfiguracji oraz deploymentu • Dystrybucja plików poprzez CDN, @EdgeCast • Wzrost ruchu o ponad 1500%, co z pozostałymi usługami? • Prefetch przed wydaniem • Dzień premiery
  • 58. Dystrybucja kodu • Capistrano? • Inne? • Własne :) CRUSADER
  • 59. Możliwości Crusadera - cechy • Budowanie kodu (docker) w specyficznym środowisku • Budowanie paczek debianowych • Świadomość infrastruktury lb+workery • Wygaszanie workerów przed deployem • Wersjonowanie paczek • Szybki rollback • Notyfikacje
  • 61. 0-day • Start o północy • Dashboardy • Łącza • CPU • Ilość zalogowanych
  • 62. Podsumowanie wydania Wiedźmina 3 na GOG Galaxy hzps://www.youtube.com/v/9vh5mxm5Jy8
  • 64. SZUKAMY LUDZI! Więcej informacji u nas lub na stronie GOG.com/work