Jak wydaliśmy wiedźmina, GOG.com IT
-
Upload
gogcom-dev-team -
Category
Technology
-
view
295 -
download
1
Transcript of Jak wydaliśmy wiedźmina, GOG.com IT
JAK WYDALIŚMY WIEDŹMINA “PRZYGOTOWANIA, SĄDNA NOC, AŻ PO SZAMPANA"
Łukasz Buczyński / Maciej Włodarkiewicz
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
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
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
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 - 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@
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.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 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
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
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 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
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
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
Podsumowanie wydania Wiedźmina 3 na GOG Galaxy
hzps://www.youtube.com/v/9vh5mxm5Jy8