SlideShare a Scribd company logo
GAMEDEV
OD ZAPLECZA
#nierobieniegier #mikroserwisy
14.03.2016
CZEŚĆ!
• Cerebro – zespół backendowy
• Mikroserwisy
• Amazon Web Services
• I ogólnie takie, takie
• CZYM JEST BACKEND?
• SZCZYPTA TEORII
• TECHNOLOGIE
• JAK TO BANGLA W PRAKTYCE?
CO ROBI
BACKEND?
• Nie robimy nic co bezpośrednio widzą gracze
• … chyba, że coś zepsujemy 
PARSZYWA
ROBOTA?
• Narzędzia dla firmy
• Współpraca z zespołami
• Zbieranie i obróbka danych
• Serwery*
NO TO
CO ROBIMY?
• Leaderboardy
• Eventy analityczne
• Promocje
• Integracja z czymkolwiek
FICZERY
OKOŁO-GROWE
• MONOLITYCZNA
• Jeden wielki wór
• ROZPROSZONA
• Dużo małych woreczków
• Mikroserwisy
• API
DWIE
ARCHITEKTURY
+ Prosta sprawa
- Więcej kodu = więcej błędów
- Poprawka wymaga przebudowania całości
- Duplikujemy kod między grami
ARCHITEKTURA
MONOLITYCZNA
+ Wymusza izolację
+ Dowolność w modyfikacji
+ Skalowanie komponentów!
+ Obsługa błędów na poziomie odpytania
- Narzut sieciowy
- Wyższy próg wejścia
ARCHITEKURA
MIKROSERWISOWA
MONOLITY VS
MIKROSERWISY
• Co chcecie!
CO WYBRAĆ?
TROCHĘ
PRAKTYKI
• Gra odpytuje serwis o promocje dla gracza
• Serwis zwraca listę przysługujących promocji
• Promocje sa jednorazowe
• GET /promos/poker/1234
• DELETE /promos/9517331
PROMO-API
Odpowiedź API:
[
{
„id”: 9517331,
„action”: „give_gold”,
„quantity”: 100
},
...
]
TECHNOLOGIE
Docker HAProxy Consul HA
• System w systemie
• Samowystarczalna paczka
• Osobne moduły i biblioteki
• Zdefiniowane w 1 pliku
• Malutkie „Maszyny Wirtualne”
KONTENERY
#DOCKER
• Jeśli buduje się u mnie, zbuduje się u innych
• Każdy kontener może używać innych wersji
modułów
• Jeśli działa lokalnie, zadziała też na
serwerze!
PO CO W OGÓLE
KONTENERY?
FROM microservice_python
MAINTAINER Cerebro <cerebro@ganymede.eu>
RUN pip install -U pymysql
ADD . /opt/promo-api
ADD ./supervisor/promo-api.conf /etc/supervisor/conf.d/
EXPOSE 80
ZBUDUJMY SOBIE
KONTENER
Dockerfile
[program:promo_api_server]
directory=/opt/promo-api
command=python server.py –port 80
promo-api.conf
Gra promo
-api
promo-api.gd
50.0.0.1:80
GET /promos/gra/1234
promos: [.....]
• Load balancer
HAPROXY
global
daemon
maxconn 256
defaults
mode http
frontend http-in
bind *:80
acl host_api hdr(host) -i promo-api.gd
use_backend api if host_api
backend api
server server_0 10.0.0.1:8888 check
server server_0 10.0.0.2:8888 check
Gra
promo-api.gd
50.0.0.1:80
GET /promos/gra/1234
promos: [.....]
promo
-api
promo
-api
HAProxy
10.0.0.1:8888
10.0.0.2:8888
Gra
promo-api.gd
50.0.0.1:80
GET /promos/gra/1234
promos: [.....]
promo
-api
promo
-api
HAProxy
10.0.0.1:8888
10.0.0.2:8888
Wooops!
• Ręczna konfiguracja?
• Nuh-uh!
• Co jeśli port 8888 jest zajęty?
NO FAJNIE, ALE...
… NIE INTERESUJE NAS
ADRES, TYLKO USŁUGA
promo
-api
Address: ??
promo
-api
Address: ??
promo
-api
Address: ??
promo
-api
Address: ??
promo-api.gd
50.0.0.1:80
HAProxy
• „Baza danych”
• Klucz-wartość
• Replikuje dane pomiędzy serwerami
• Szybki czas odpowiedzi
DISTRIBUTED DATA
CENTER (#CONSUL, #ETCD)
JAK TO DZIAŁA?
Consul #1
10.0.0.1
Consul #2
10.0.0.2
Consul #3
10.0.0.3
promo
-api
10.0.0.1:31231
promo-api += 10.0.0.1:31517
promo
-apipromo-api +=
10.0.0.2:42831
10.0.0.2:42831
promo
-api
10.0.0.1:33333
JAK TO DZIAŁA?
Consul #1
10.0.0.1
promo-api.gd
50.0.0.1:80
HAProxy
Configurator
(Magellan)
Consul
mage
llan
HA
ProxyConsul Consul
Gra
promo
-api
promo
-api
promo
-api
CAŁOŚĆ – LEVEL: EASY
Consul
mage
llan
HA
ProxyConsul Consul
Gra
promo
-api
promo
-api
promo
-api
Elastic
LoadBalancer
HA
Proxy
HA
Proxy
Serwis
A
Serwis
A
Serwis
B
Serwis
B
CAŁOŚĆ – LEVEL: HARD
• Zależności między serwisami
• Co jeśli jeden serwis musi odpytać drugiego?
• Np. chcemy sprawdzić czy gracz nie jest "bad-
guyem" przed przyznaniem promocji
BONUS!
ODPYTANIE INNEGO
SERWISU
Consul
promo-api
Bad-
guys
Local
HAProxy
Local
Magellan
Bad-
guys
Consul
mage
llan
HA
ProxyConsul Consul
Gra
promo-apipromo-apipromo-api
Elastic
LoadBalancer
HA
Proxy
HA
Proxy
Serwis
A
Serwis
A
Bad-
guys
Bad-
guys
CAŁOŚĆ – LEVEL: NIGHTMARE
HP MGHP MG
HP MG
• 1 zapytanie może przejść 18 różnymi
ścieżkami!
• Miłego debugowania
• Bez monitoringu ani rusz
• Wysoki próg wejścia – A nie mówiłem?
BOLĄCZKA SYSTEMÓW
ROZPROSZONYCH
http://armada.sh
Wszystko o czym mówiłem i więcej
gotowe do użycia 
DZIĘKI!
PYTANIA?
academy.gamedesire.com

More Related Content

What's hot

What's hot (11)

Infrastructure As Code
Infrastructure As CodeInfrastructure As Code
Infrastructure As Code
 
WordUp Łódź - Sage - Twoje szablony będą jak supermodelki
WordUp Łódź - Sage - Twoje szablony będą jak supermodelkiWordUp Łódź - Sage - Twoje szablony będą jak supermodelki
WordUp Łódź - Sage - Twoje szablony będą jak supermodelki
 
Testowanie rozwiązań serverless z LocalStack
Testowanie rozwiązań serverless z LocalStackTestowanie rozwiązań serverless z LocalStack
Testowanie rozwiązań serverless z LocalStack
 
Azure MXChip IoT DevKit
Azure MXChip IoT DevKitAzure MXChip IoT DevKit
Azure MXChip IoT DevKit
 
Najczęściej popełniane błędy przy wykorzystywaniu IaaS w Microsoft Azure
Najczęściej popełniane błędy przy wykorzystywaniu IaaS w Microsoft AzureNajczęściej popełniane błędy przy wykorzystywaniu IaaS w Microsoft Azure
Najczęściej popełniane błędy przy wykorzystywaniu IaaS w Microsoft Azure
 
Monitoring sieci
Monitoring sieciMonitoring sieci
Monitoring sieci
 
Wordpress i frameworki
Wordpress i frameworkiWordpress i frameworki
Wordpress i frameworki
 
Word Press
Word PressWord Press
Word Press
 
Swoole w PHP. Czy to ma sens?
Swoole w PHP. Czy to ma sens?Swoole w PHP. Czy to ma sens?
Swoole w PHP. Czy to ma sens?
 
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
 
Joomla Day Poland 15 - Docker
Joomla Day Poland 15 - DockerJoomla Day Poland 15 - Docker
Joomla Day Poland 15 - Docker
 

Viewers also liked

Viewers also liked (6)

Stan Just: Po co nam producent
Stan Just: Po co nam producentStan Just: Po co nam producent
Stan Just: Po co nam producent
 
Michał Azarewicz: O cinematikach słów kilka, czyli z czym to się je.
Michał Azarewicz: O cinematikach słów kilka, czyli z czym to się je.Michał Azarewicz: O cinematikach słów kilka, czyli z czym to się je.
Michał Azarewicz: O cinematikach słów kilka, czyli z czym to się je.
 
Konrad Gadzina: Inspiruj i daj się zainspirować!
Konrad Gadzina: Inspiruj i daj się zainspirować! Konrad Gadzina: Inspiruj i daj się zainspirować!
Konrad Gadzina: Inspiruj i daj się zainspirować!
 
Konrad Gadzina: Visual scripting w Unity
Konrad Gadzina: Visual scripting w UnityKonrad Gadzina: Visual scripting w Unity
Konrad Gadzina: Visual scripting w Unity
 
Maciej Węglarczyk: Wielowymiarowy świat layoutów
Maciej Węglarczyk: Wielowymiarowy świat layoutówMaciej Węglarczyk: Wielowymiarowy świat layoutów
Maciej Węglarczyk: Wielowymiarowy świat layoutów
 
Michał Witkowski: Analiza zachowania graczy, jak zbudować grę w oparciu o dane?
Michał Witkowski: Analiza zachowania graczy, jak zbudować grę w oparciu o dane?Michał Witkowski: Analiza zachowania graczy, jak zbudować grę w oparciu o dane?
Michał Witkowski: Analiza zachowania graczy, jak zbudować grę w oparciu o dane?
 

Similar to Zbyszek Rzepka: GameDev od zaplecza

Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django
Zastosowanie buildout przy wdrażaniu projektów opartych o framework DjangoZastosowanie buildout przy wdrażaniu projektów opartych o framework Django
Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django
Dominik Szopa
 
Extjs & netzke
Extjs & netzkeExtjs & netzke
Extjs & netzke
GaldoMedia
 

Similar to Zbyszek Rzepka: GameDev od zaplecza (20)

Tomasz Głogosz: SharePoint Framework - nowa jakość w client-side development
Tomasz Głogosz: SharePoint Framework - nowa jakość w client-side developmentTomasz Głogosz: SharePoint Framework - nowa jakość w client-side development
Tomasz Głogosz: SharePoint Framework - nowa jakość w client-side development
 
OSGi, deklaratywnie
OSGi, deklaratywnieOSGi, deklaratywnie
OSGi, deklaratywnie
 
Jaki framework wybrać
Jaki framework wybraćJaki framework wybrać
Jaki framework wybrać
 
It od kuchni w nokaut.pl
It od kuchni w nokaut.plIt od kuchni w nokaut.pl
It od kuchni w nokaut.pl
 
IT od kuchni w Nokaut.pl
IT od kuchni w Nokaut.pl IT od kuchni w Nokaut.pl
IT od kuchni w Nokaut.pl
 
Xdebug – debugowanie i profilowanie aplikacji PHP
Xdebug – debugowanie i profilowanie aplikacji PHPXdebug – debugowanie i profilowanie aplikacji PHP
Xdebug – debugowanie i profilowanie aplikacji PHP
 
Google App Engine i Google Play Services w Twoich aplikacjach
Google App Engine i Google Play Services w Twoich aplikacjachGoogle App Engine i Google Play Services w Twoich aplikacjach
Google App Engine i Google Play Services w Twoich aplikacjach
 
Jak wydaliśmy wiedźmina, GOG.com IT
Jak wydaliśmy wiedźmina, GOG.com ITJak wydaliśmy wiedźmina, GOG.com IT
Jak wydaliśmy wiedźmina, GOG.com IT
 
Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django
Zastosowanie buildout przy wdrażaniu projektów opartych o framework DjangoZastosowanie buildout przy wdrażaniu projektów opartych o framework Django
Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django
 
Praktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPlPraktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPl
 
Wprowadzenie do Kubernetesa. K8S jako nowy Linux.
Wprowadzenie do Kubernetesa. K8S jako nowy Linux.Wprowadzenie do Kubernetesa. K8S jako nowy Linux.
Wprowadzenie do Kubernetesa. K8S jako nowy Linux.
 
Jak przyspieszyłem aplikację produkcyjną o ponad 40%
Jak przyspieszyłem aplikację produkcyjną o ponad 40%Jak przyspieszyłem aplikację produkcyjną o ponad 40%
Jak przyspieszyłem aplikację produkcyjną o ponad 40%
 
Feo w-joomla
Feo w-joomlaFeo w-joomla
Feo w-joomla
 
Kivy na Androidzie
Kivy na AndroidzieKivy na Androidzie
Kivy na Androidzie
 
Continuous Integration w konfiguracji urządzeń sieciowych
Continuous Integration w konfiguracji urządzeń sieciowychContinuous Integration w konfiguracji urządzeń sieciowych
Continuous Integration w konfiguracji urządzeń sieciowych
 
Extjs & netzke
Extjs & netzkeExtjs & netzke
Extjs & netzke
 
Mateusz Gajewski - Architektura Allegro - 4 lata po rewolucji mikrousługowej
Mateusz Gajewski - Architektura Allegro - 4 lata po rewolucji mikrousługowejMateusz Gajewski - Architektura Allegro - 4 lata po rewolucji mikrousługowej
Mateusz Gajewski - Architektura Allegro - 4 lata po rewolucji mikrousługowej
 
Prostota i mozliwosci symfony2
Prostota i mozliwosci symfony2Prostota i mozliwosci symfony2
Prostota i mozliwosci symfony2
 
Najlepsze wtyczki WordPress, które każdy developer powinien mieć
Najlepsze wtyczki WordPress, które każdy developer powinien miećNajlepsze wtyczki WordPress, które każdy developer powinien mieć
Najlepsze wtyczki WordPress, które każdy developer powinien mieć
 
HYC - Angular stań się kanciastym
HYC - Angular stań się kanciastymHYC - Angular stań się kanciastym
HYC - Angular stań się kanciastym
 

More from GameDesire Academy

More from GameDesire Academy (17)

Jan "Sou Shibo" Adryański - Złapać streamera za nogi, czyli jak zmotywować st...
Jan "Sou Shibo" Adryański - Złapać streamera za nogi, czyli jak zmotywować st...Jan "Sou Shibo" Adryański - Złapać streamera za nogi, czyli jak zmotywować st...
Jan "Sou Shibo" Adryański - Złapać streamera za nogi, czyli jak zmotywować st...
 
Wojtek Mroczek: Jak nie sprzedać swojej gry - 10 prostych kroków, czyli błędy...
Wojtek Mroczek: Jak nie sprzedać swojej gry - 10 prostych kroków, czyli błędy...Wojtek Mroczek: Jak nie sprzedać swojej gry - 10 prostych kroków, czyli błędy...
Wojtek Mroczek: Jak nie sprzedać swojej gry - 10 prostych kroków, czyli błędy...
 
Kacper Pitala: Filmik mówi więcej niż tysiąc screenów - jak przygotować video...
Kacper Pitala: Filmik mówi więcej niż tysiąc screenów - jak przygotować video...Kacper Pitala: Filmik mówi więcej niż tysiąc screenów - jak przygotować video...
Kacper Pitala: Filmik mówi więcej niż tysiąc screenów - jak przygotować video...
 
Natalia Dołżycka: Jak promować grę indie bez rozbijania banku?
Natalia Dołżycka: Jak promować grę indie bez rozbijania banku?Natalia Dołżycka: Jak promować grę indie bez rozbijania banku?
Natalia Dołżycka: Jak promować grę indie bez rozbijania banku?
 
Michał Marcinkowski: King Arthur's Gold Postmortem
Michał Marcinkowski: King Arthur's Gold PostmortemMichał Marcinkowski: King Arthur's Gold Postmortem
Michał Marcinkowski: King Arthur's Gold Postmortem
 
Łukasz Malik: Trudne życie indyka
Łukasz Malik: Trudne życie indykaŁukasz Malik: Trudne życie indyka
Łukasz Malik: Trudne życie indyka
 
Jakub Wójcik: Development w ręce ludu
Jakub Wójcik: Development w ręce luduJakub Wójcik: Development w ręce ludu
Jakub Wójcik: Development w ręce ludu
 
Tomasz Kaczmarek: Zupa z indyka dla pracownika korpo(racji)
Tomasz Kaczmarek: Zupa z indyka dla pracownika korpo(racji)Tomasz Kaczmarek: Zupa z indyka dla pracownika korpo(racji)
Tomasz Kaczmarek: Zupa z indyka dla pracownika korpo(racji)
 
Jakub Lisiński: Czynnik ludzki w procesie tworzenia gry
Jakub Lisiński: Czynnik ludzki w procesie tworzenia gryJakub Lisiński: Czynnik ludzki w procesie tworzenia gry
Jakub Lisiński: Czynnik ludzki w procesie tworzenia gry
 
Krzysztof Bińczak: Wprowadzenie do interaktywnego audio
Krzysztof Bińczak: Wprowadzenie do interaktywnego audio Krzysztof Bińczak: Wprowadzenie do interaktywnego audio
Krzysztof Bińczak: Wprowadzenie do interaktywnego audio
 
Ulyana Krystaszek: Mam pomysł na grę… i co dalej?
Ulyana Krystaszek: Mam pomysł na grę… i co dalej?Ulyana Krystaszek: Mam pomysł na grę… i co dalej?
Ulyana Krystaszek: Mam pomysł na grę… i co dalej?
 
Krzysztof Indyk: Jak przetwarzać duże ilości danych? Wprowadzenie do Hadoopa.
Krzysztof Indyk: Jak przetwarzać duże ilości danych? Wprowadzenie do Hadoopa.Krzysztof Indyk: Jak przetwarzać duże ilości danych? Wprowadzenie do Hadoopa.
Krzysztof Indyk: Jak przetwarzać duże ilości danych? Wprowadzenie do Hadoopa.
 
Tomasz Świerszcz: Moja pierwsza gra. Organizacja pracy, potrzebna wiedza, nar...
Tomasz Świerszcz: Moja pierwsza gra. Organizacja pracy, potrzebna wiedza, nar...Tomasz Świerszcz: Moja pierwsza gra. Organizacja pracy, potrzebna wiedza, nar...
Tomasz Świerszcz: Moja pierwsza gra. Organizacja pracy, potrzebna wiedza, nar...
 
Maciej Węglarczyk: Optymalizacje aplikacji mobilnych
Maciej Węglarczyk: Optymalizacje aplikacji mobilnychMaciej Węglarczyk: Optymalizacje aplikacji mobilnych
Maciej Węglarczyk: Optymalizacje aplikacji mobilnych
 
Artur Staszczyk: Optymalizacje i wydajność w grach komputerowych
Artur Staszczyk: Optymalizacje i wydajność w grach komputerowych Artur Staszczyk: Optymalizacje i wydajność w grach komputerowych
Artur Staszczyk: Optymalizacje i wydajność w grach komputerowych
 
Konrad Gadzina: Test-Driven Gamedev - testy automatyczne a tworzenie gier
Konrad Gadzina: Test-Driven Gamedev - testy automatyczne a tworzenie gierKonrad Gadzina: Test-Driven Gamedev - testy automatyczne a tworzenie gier
Konrad Gadzina: Test-Driven Gamedev - testy automatyczne a tworzenie gier
 
Artur Staszczyk, Maciej Weglarczyk: Projekt, produkcja, biznes, czyli jak stw...
Artur Staszczyk, Maciej Weglarczyk: Projekt, produkcja, biznes, czyli jak stw...Artur Staszczyk, Maciej Weglarczyk: Projekt, produkcja, biznes, czyli jak stw...
Artur Staszczyk, Maciej Weglarczyk: Projekt, produkcja, biznes, czyli jak stw...
 

Zbyszek Rzepka: GameDev od zaplecza