Upload
gogcom-dev-team
View
416
Download
1
Embed Size (px)
Citation preview
DYSTRYBUCJA GIER W ŚWIECIE ONLINE przykład architektury webowego systemu rozproszonego
GOG Galaxy Pipeline
Maciej Włodarkiewicz
O mnie
GOG.com Producer
Czym się zajmuję? Prowadzeniem projektów, architekturą systemów
Wcześniej: Head of Web Development - GOG Head of Web Backend - GG
GOG.com - plaHorma 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 Pipeline
2. Start GOG Galaxy
3. Budowa i działanie systemu
4. GOG Galaxy Pipeline 2.0
5. plany na przyszłość
Założenia projektu GOG Galaxy Pipeline
Problemy graczy oraz developerów
• Za dużo patchy, użytkownicy nie wiedzą co skąd pobrać i jak
wykonać update do najnowszej wersji
• Gracze muszą manualnie zarządzać instalacją
• Do ściągania dużych plików potrzebny jest własny Download
Manager albo GOG Downloader
• Budowa patch’y trwa długo i jest skomplikowane
Założenia projektu GOG Galaxy Pipeline
Wymagania
• 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
Założenia projektu GOG Galaxy Pipeline
Dlaczego nie użyliśmy gotowego systemu
kontroli wersji ?
ponieważ instalacji oraz aktualizacja gry jest dużo bardziej
skomplikowana niż samo pobranie plików
Start GOG Galaxy
• 6 Maja - start GOG Galaxy
• 19 Maja - wydanie Wiedźmina 3
• GOG Galaxy obsługiwało wersję pudełkową TW3, dla której
przygotowaliśmy:
- preload
- day1patch
Wydanie Wiedźmina 3 - statystyki z pierwszego miesiąca
• 21.5 PB danych dostarczonych do graczy
• do 600 Gbps ruchu
• … czyli 2 pełne gry na sekundę
• 600 000 aktywacji gry na poprzez GOG Galaxy
• bez problemów
CONTENT SYSTEM
Budowa i działanie systemu - upload gry
CLOUD STORAGE
GOG GALAXY
desktop web
GAME BUILDER
Budowa i działanie systemu - Struktura gry
• Gra złożona jest do jednego pliku bigfile
• Bigfile jest opisany przez plik z meta danmi 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 - 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®
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
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
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 - 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
Kosztowny proces budowania gry
• 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
Czas dostarczenia gry na serwery
• Cała gra budowana jest do jednego pliku
• Wiedźmin 3 miał 26Gb w dniu premiery
• Pojedynczy plik 26GB musi zostać rozpropagowany na wszystkie serwery Cloud
Storage
• Całkowity czas wykonania oraz dostarczenia aktualizacji trwa nawet 3dni!
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
Budowa i działanie systemu - Struktura gry 2.0
GAME_PL.DAT
GAME.EXE GAME_PL.DAT GAME_EN.DAT
GAME.EXE
GAME_EN.DATGAME.EXE
MANIFEST_PL MANIFEST_EN
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 zmian
• 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
Nowa usługa webowa - Dev Portal
• Interfejs graficzny do Content System API
• Możliwość publikacji wybranej wersji gry w GOG Galaxy
• Technologie: Varnish Cache, PHP 5.6, Symfony2, HHVM, AngularJS
CONTENT SYSTEM
Budowa i działanie systemu - Dev Portal
CLOUD STORAGE
GOG GALAXY
desktop web
GAME RECEIVER
CLOUD STORAGE
CONTENT SYSTEM
DEV PORTAL
Plany na przyszłość
• Pełna kontrola developerów nad całością procesu wydawania gier?
• Obsługa wielu gier AAA
• Dalsza optymalizacja oraz usprawnianie systemów
• PHP7 ?
Podsumowanie wydania Wiedźmina 3 na GOG Galaxy
hvps://www.youtube.com/watch?v=9vh5mxm5Jy8