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

65

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

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) orazsieć 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.0games 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 Receivernarzę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Ę