› Gry online
•Krótki czas od koncepcji do wyjścia na rynek (3-6 miesięcy)
• Rozwój w znacznej części po release
• Szybkie iteracje (czasem kilka update’ów dziennie)
• Ciągła analiza zachowania użytkowników
• A/B testing
• Wiele platform klienckich
• Desktopy, tablety, telefony
• Małe (5-10 osób), niezależne zespoły produktowe
• Wiele gier rozwijanych i utrzymywanych równolegle
• Złożona warstwa serwerowa
3.
› Serwery –całkiem inne problemy
• System rozproszony
• Wiele równorzędnych instancji serwerów
• Asynchroniczna komunikacja
• Wielowątkowe „od zawsze”
• Programowanie współbieżne jest trudne (a mutexy to zło!)
• Nieprzewidywalne obciążenie
• Skalowalnośd trzeba brad pod uwagę od samego początku
• Znacznie mniejsza tolerancja na błędy w kodzie
• Jeśli coś się może zepsud, to w koocu się zepsuje
• Szansa 1 na milion w serwerze oznacza zdarzenie pewne
• Infrastruktura jest zawodna
4.
› Nasze rozwiązanie
•Platforma serwerowa rozwijana przez dedykowany zespół jako wewnętrzny
produkt
• Rozwiązuje problemy wymagające specjalistycznej wiedzy lub powtarzalne
• Load balancing, failover, komunikacja z bazami danych ...
• Usługi specjalne (leaderboardy, listy przyjaciół, autentykacja, systemy
płatności ...)
• Logika gry odseparowana od reszty serwera
• Rozwijana przez zespół tworzący grę jednocześnie z rozwojem klienta
• Aby zrobid działającą grę, nie trzeba znad detali serwera
• W dużym stopniu ustandaryzowane środowisko
› Skalowalnośd
• Stawianienowej instancji serwera
• Autokonfiguracja (bottom → up)
• Rejestracja w usłudze nodebalancer
• Gaszenie instancji
• Transfer stanów gry na inne aktywne instancje
• Z reguły niewidoczne dla użytkowników
• W 100% zautomatyzowane, także dla instancji web
• DynamoDB jako baza klucz -> wartośd
• Serwisy backendowe nie skalują się automatycznie
7.
› Logika gry
•Uproszczony actor model (http://en.wikipedia.org/wiki/Actor_model)
• Serwer nie jest bezstanowy!
• Logika gry przetwarza i emituje wiadomości
• Komunikacja wyłącznie asynchroniczna
• Gwarantowana kolejnośd przesyłania komunikatów od A do B
• Brak bezpośredniej komunikacji z bazą danych
• Binarne bloby na poziomie bazy danych stanów gry
• Kompresja/dekompresja w locie
• Brak sztywnego protokołu sieciowego, można zakodowad co się chce jako tekst
• Format jest teoretycznie dowolny, ale używamy JSON
• Serwer nie rozumie logiki
• „czarna skrzynka” ładowania w czasie działania serwera przez dlopen()
• Może byd przeładowana w locie!
› Model developmentu
•Teamy są od siebie odizolowane, zarówno lokalnie jak i na produkcji
• Zależności zewnętrzne dostępne poprzez API
• Jeden „tech team” rozwijający platformę, działający jako grupa wsparcia dla
poszczególnych projektów
14.
› Środowisko
• Lokalniekażdy zespół ma swój komplet wirtualnych serwerów
• Co najmniej instancja www, serwer baz danych i serwer gier.
• Ręcznie zarządzana wirtualizacja na kilku hostach KVM
• Planujemy wdrożenie OpenStacka
• Wystawianie nowej wersji na środowisko lokalne jest automatyczne
• Serwer Continuous Integration śledzi branch „dev”
• Nowe wersje budowane wielokrotnie w ciągu dnia
• Zepsute buildy mają priorytet
• Wystawianie na produkcję jest w 100% pod kontrolą zespołu
• Serwer CI przygotowuje nową wersję na podstawie brancha
produkcyjnego
• Aktywacja zmian na produkcji poprzez dedykowany panel administracyjny
• Rollback pod jednym kliknięciem