Zbyszek Rzepka: GameDev od zaplecza
-
Upload
gamedesire-academy -
Category
Technology
-
view
190 -
download
0
Transcript of Zbyszek Rzepka: GameDev od zaplecza
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_pythonMAINTAINER Cerebro <[email protected]>
RUN pip install -U pymysql
ADD . /opt/promo-api ADD ./supervisor/promo-api.conf /etc/supervisor/conf.d/
EXPOSE 80
ZBUDUJMY SOBIE KONTENERDockerfile
[program:promo_api_server]directory=/opt/promo-apicommand=python server.py –port 80
promo-api.conf
Gra promo-api
promo-api.gd50.0.0.1:80
GET /promos/gra/1234
promos: [.....]
• Load balancer
HAPROXY
globaldaemonmaxconn 256
defaultsmode http
frontend http-inbind *:80acl host_api hdr(host) -i promo-api.gduse_backend api if host_api
backend apiserver server_0 10.0.0.1:8888 checkserver server_0 10.0.0.2:8888 check
Gra
promo-api.gd50.0.0.1:80
GET /promos/gra/1234
promos: [.....]
promo-api
promo-api
HAProxy10.0.0.1:8888
10.0.0.2:8888
Gra
promo-api.gd50.0.0.1:80
GET /promos/gra/1234
promos: [.....]
promo-api
promo-api
HAProxy10.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.gd50.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 #110.0.0.1
Consul #210.0.0.2
Consul #310.0.0.3
promo-api
10.0.0.1:31231
promo-api += 10.0.0.1:31517
promo-apipromo-api +=
10.0.0.2:4283110.0.0.2:42831
promo-api
10.0.0.1:33333
JAK TO DZIAŁA?
Consul #110.0.0.1
promo-api.gd50.0.0.1:80
HAProxy
Configurator(Magellan)
Consul magellan
HAProxyConsul Consul
Gra
promo-api
promo-api
promo-api
CAŁOŚĆ – LEVEL: EASY
Consul
magellan
HAProxyConsul Consul
Gra
promo-api
promo-api
promo-api
ElasticLoadBalancer
HAProxy
HAProxy
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
LocalHAProxy
LocalMagellan
Bad-guys
Consul
magellan
HAProxyConsul Consul
Gra
promo-apipromo-apipromo-api
ElasticLoadBalancer
HAProxy
HAProxy
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
DZIĘKI!PYTANIA?
academy.gamedesire.com