4. 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
5. 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
6. 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ść
8. 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
11. 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
12. 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
14. 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
15.
16. 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
18. CONTENT SYSTEM
Budowa i działanie systemu - upload gry
CLOUD STORAGE
GOG GALAXY
desktop web
GAME BUILDER
19. 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
20. 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
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®
24. 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. 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
27. 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
28. 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
29. GOG Galaxy ADN PHPVarnish CacheApp cache
CDN
Budowa i działanie systemu - Content-System API - cache
30. CONTENT SYSTEM
Budowa i działanie systemu - upload gry
CLOUD STORAGE
GOG GALAXY
desktop web
GAME BUILDER
31. CONTENT SYSTEM
Budowa i działanie systemu - pobieranie meta danych
CLOUD STORAGE
GOG GALAXY
desktop web
CONTENT SYSTEM
32. CONTENT SYSTEM
Budowa i działanie systemu - lokalne porównanie plików
CLOUD STORAGE
GOG GALAXY
desktop web
CONTENT SYSTEM
33. CONTENT SYSTEM
Budowa i działanie systemu - uzyskanie dostępu do plików gry
CLOUD STORAGE
GOG GALAXY
desktop web
CONTENT SYSTEM
34. CONTENT SYSTEM
Budowa i działanie systemu - pobieranie plików
CLOUD STORAGE
GOG GALAXY
desktop web
CONTENT SYSTEM
36. 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
37. 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!
40. 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
41. GOG Galaxy Pipeline 2.0
Proponowane rozwiązania
• Rezygnacja z budowania gry do jednego pliku
• Stworzenie narzędzi do automatycznego budowania oraz wrzucania gier
42. 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
43. 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
44. 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
45. 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
47. 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
48. 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
49. CONTENT SYSTEM
Budowa i działanie systemu - upload gry 2.0
CLOUD STORAGE
GOG GALAXY
desktop web
GAME BUILDER
GAME RECEIVER
CLOUD STORAGE
50. CONTENT SYSTEM
Budowa i działanie systemu - upload gry 2.0
CLOUD STORAGE
GOG GALAXY
desktop web
GAME RECEIVER
CLOUD STORAGE
CONTENT SYSTEM
52. 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
53. CONTENT SYSTEM
Budowa i działanie systemu - Dev Portal
CLOUD STORAGE
GOG GALAXY
desktop web
GAME RECEIVER
CLOUD STORAGE
CONTENT SYSTEM
DEV PORTAL
56. 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 ?