zbyszek rzepka: gamedev od zaplecza
TRANSCRIPT
![Page 1: Zbyszek Rzepka: GameDev od zaplecza](https://reader031.vdocuments.mx/reader031/viewer/2022030402/58a3c22d1a28ab62218b6ca1/html5/thumbnails/1.jpg)
GAMEDEV OD ZAPLECZA#nierobieniegier #mikroserwisy
14.03.2016
![Page 2: Zbyszek Rzepka: GameDev od zaplecza](https://reader031.vdocuments.mx/reader031/viewer/2022030402/58a3c22d1a28ab62218b6ca1/html5/thumbnails/2.jpg)
CZEŚĆ!
• Cerebro – zespół backendowy• Mikroserwisy• Amazon Web Services• I ogólnie takie, takie
![Page 3: Zbyszek Rzepka: GameDev od zaplecza](https://reader031.vdocuments.mx/reader031/viewer/2022030402/58a3c22d1a28ab62218b6ca1/html5/thumbnails/3.jpg)
• CZYM JEST BACKEND?• SZCZYPTA TEORII• TECHNOLOGIE• JAK TO BANGLA W PRAKTYCE?
![Page 4: Zbyszek Rzepka: GameDev od zaplecza](https://reader031.vdocuments.mx/reader031/viewer/2022030402/58a3c22d1a28ab62218b6ca1/html5/thumbnails/4.jpg)
CO ROBI BACKEND?
![Page 5: Zbyszek Rzepka: GameDev od zaplecza](https://reader031.vdocuments.mx/reader031/viewer/2022030402/58a3c22d1a28ab62218b6ca1/html5/thumbnails/5.jpg)
• Nie robimy nic co bezpośrednio widzą gracze• … chyba, że coś zepsujemy
PARSZYWA ROBOTA?
![Page 6: Zbyszek Rzepka: GameDev od zaplecza](https://reader031.vdocuments.mx/reader031/viewer/2022030402/58a3c22d1a28ab62218b6ca1/html5/thumbnails/6.jpg)
• Narzędzia dla firmy• Współpraca z zespołami• Zbieranie i obróbka danych• Serwery*
NO TO CO ROBIMY?
![Page 7: Zbyszek Rzepka: GameDev od zaplecza](https://reader031.vdocuments.mx/reader031/viewer/2022030402/58a3c22d1a28ab62218b6ca1/html5/thumbnails/7.jpg)
• Leaderboardy• Eventy analityczne• Promocje• Integracja z czymkolwiek
FICZERY OKOŁO-GROWE
![Page 8: Zbyszek Rzepka: GameDev od zaplecza](https://reader031.vdocuments.mx/reader031/viewer/2022030402/58a3c22d1a28ab62218b6ca1/html5/thumbnails/8.jpg)
• MONOLITYCZNA• Jeden wielki wór
• ROZPROSZONA• Dużo małych woreczków• Mikroserwisy• API
DWIE ARCHITEKTURY
![Page 9: Zbyszek Rzepka: GameDev od zaplecza](https://reader031.vdocuments.mx/reader031/viewer/2022030402/58a3c22d1a28ab62218b6ca1/html5/thumbnails/9.jpg)
+ Prosta sprawa
- Więcej kodu = więcej błędów- Poprawka wymaga przebudowania całości- Duplikujemy kod między grami
ARCHITEKTURA MONOLITYCZNA
![Page 10: Zbyszek Rzepka: GameDev od zaplecza](https://reader031.vdocuments.mx/reader031/viewer/2022030402/58a3c22d1a28ab62218b6ca1/html5/thumbnails/10.jpg)
+ 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
![Page 11: Zbyszek Rzepka: GameDev od zaplecza](https://reader031.vdocuments.mx/reader031/viewer/2022030402/58a3c22d1a28ab62218b6ca1/html5/thumbnails/11.jpg)
MONOLITY VS MIKROSERWISY
![Page 12: Zbyszek Rzepka: GameDev od zaplecza](https://reader031.vdocuments.mx/reader031/viewer/2022030402/58a3c22d1a28ab62218b6ca1/html5/thumbnails/12.jpg)
• Co chcecie!
CO WYBRAĆ?
![Page 13: Zbyszek Rzepka: GameDev od zaplecza](https://reader031.vdocuments.mx/reader031/viewer/2022030402/58a3c22d1a28ab62218b6ca1/html5/thumbnails/13.jpg)
TROCHĘ PRAKTYKI
![Page 14: Zbyszek Rzepka: GameDev od zaplecza](https://reader031.vdocuments.mx/reader031/viewer/2022030402/58a3c22d1a28ab62218b6ca1/html5/thumbnails/14.jpg)
• 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
},...]
![Page 15: Zbyszek Rzepka: GameDev od zaplecza](https://reader031.vdocuments.mx/reader031/viewer/2022030402/58a3c22d1a28ab62218b6ca1/html5/thumbnails/15.jpg)
TECHNOLOGIE
Docker HAProxy Consul HA
![Page 16: Zbyszek Rzepka: GameDev od zaplecza](https://reader031.vdocuments.mx/reader031/viewer/2022030402/58a3c22d1a28ab62218b6ca1/html5/thumbnails/16.jpg)
• System w systemie• Samowystarczalna paczka
• Osobne moduły i biblioteki• Zdefiniowane w 1 pliku
• Malutkie „Maszyny Wirtualne”
KONTENERY
![Page 17: Zbyszek Rzepka: GameDev od zaplecza](https://reader031.vdocuments.mx/reader031/viewer/2022030402/58a3c22d1a28ab62218b6ca1/html5/thumbnails/17.jpg)
#DOCKER
![Page 18: Zbyszek Rzepka: GameDev od zaplecza](https://reader031.vdocuments.mx/reader031/viewer/2022030402/58a3c22d1a28ab62218b6ca1/html5/thumbnails/18.jpg)
• 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?
![Page 19: Zbyszek Rzepka: GameDev od zaplecza](https://reader031.vdocuments.mx/reader031/viewer/2022030402/58a3c22d1a28ab62218b6ca1/html5/thumbnails/19.jpg)
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
![Page 20: Zbyszek Rzepka: GameDev od zaplecza](https://reader031.vdocuments.mx/reader031/viewer/2022030402/58a3c22d1a28ab62218b6ca1/html5/thumbnails/20.jpg)
Gra promo-api
promo-api.gd50.0.0.1:80
GET /promos/gra/1234
promos: [.....]
![Page 21: Zbyszek Rzepka: GameDev od zaplecza](https://reader031.vdocuments.mx/reader031/viewer/2022030402/58a3c22d1a28ab62218b6ca1/html5/thumbnails/21.jpg)
• Load balancer
HAPROXY
![Page 22: Zbyszek Rzepka: GameDev od zaplecza](https://reader031.vdocuments.mx/reader031/viewer/2022030402/58a3c22d1a28ab62218b6ca1/html5/thumbnails/22.jpg)
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
![Page 23: Zbyszek Rzepka: GameDev od zaplecza](https://reader031.vdocuments.mx/reader031/viewer/2022030402/58a3c22d1a28ab62218b6ca1/html5/thumbnails/23.jpg)
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
![Page 24: Zbyszek Rzepka: GameDev od zaplecza](https://reader031.vdocuments.mx/reader031/viewer/2022030402/58a3c22d1a28ab62218b6ca1/html5/thumbnails/24.jpg)
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!
![Page 25: Zbyszek Rzepka: GameDev od zaplecza](https://reader031.vdocuments.mx/reader031/viewer/2022030402/58a3c22d1a28ab62218b6ca1/html5/thumbnails/25.jpg)
• Ręczna konfiguracja?• Nuh-uh!
• Co jeśli port 8888 jest zajęty?
NO FAJNIE, ALE...
![Page 26: Zbyszek Rzepka: GameDev od zaplecza](https://reader031.vdocuments.mx/reader031/viewer/2022030402/58a3c22d1a28ab62218b6ca1/html5/thumbnails/26.jpg)
… 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
![Page 27: Zbyszek Rzepka: GameDev od zaplecza](https://reader031.vdocuments.mx/reader031/viewer/2022030402/58a3c22d1a28ab62218b6ca1/html5/thumbnails/27.jpg)
• „Baza danych”• Klucz-wartość• Replikuje dane pomiędzy serwerami
• Szybki czas odpowiedzi
DISTRIBUTED DATA CENTER (#CONSUL, #ETCD)
![Page 28: Zbyszek Rzepka: GameDev od zaplecza](https://reader031.vdocuments.mx/reader031/viewer/2022030402/58a3c22d1a28ab62218b6ca1/html5/thumbnails/28.jpg)
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
![Page 29: Zbyszek Rzepka: GameDev od zaplecza](https://reader031.vdocuments.mx/reader031/viewer/2022030402/58a3c22d1a28ab62218b6ca1/html5/thumbnails/29.jpg)
JAK TO DZIAŁA?
Consul #110.0.0.1
promo-api.gd50.0.0.1:80
HAProxy
Configurator(Magellan)
![Page 30: Zbyszek Rzepka: GameDev od zaplecza](https://reader031.vdocuments.mx/reader031/viewer/2022030402/58a3c22d1a28ab62218b6ca1/html5/thumbnails/30.jpg)
Consul magellan
HAProxyConsul Consul
Gra
promo-api
promo-api
promo-api
CAŁOŚĆ – LEVEL: EASY
![Page 31: Zbyszek Rzepka: GameDev od zaplecza](https://reader031.vdocuments.mx/reader031/viewer/2022030402/58a3c22d1a28ab62218b6ca1/html5/thumbnails/31.jpg)
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
![Page 32: Zbyszek Rzepka: GameDev od zaplecza](https://reader031.vdocuments.mx/reader031/viewer/2022030402/58a3c22d1a28ab62218b6ca1/html5/thumbnails/32.jpg)
• 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!
![Page 33: Zbyszek Rzepka: GameDev od zaplecza](https://reader031.vdocuments.mx/reader031/viewer/2022030402/58a3c22d1a28ab62218b6ca1/html5/thumbnails/33.jpg)
ODPYTANIE INNEGO SERWISU
Consul
promo-api
Bad-guys
LocalHAProxy
LocalMagellan
Bad-guys
![Page 34: Zbyszek Rzepka: GameDev od zaplecza](https://reader031.vdocuments.mx/reader031/viewer/2022030402/58a3c22d1a28ab62218b6ca1/html5/thumbnails/34.jpg)
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
![Page 35: Zbyszek Rzepka: GameDev od zaplecza](https://reader031.vdocuments.mx/reader031/viewer/2022030402/58a3c22d1a28ab62218b6ca1/html5/thumbnails/35.jpg)
• 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
![Page 37: Zbyszek Rzepka: GameDev od zaplecza](https://reader031.vdocuments.mx/reader031/viewer/2022030402/58a3c22d1a28ab62218b6ca1/html5/thumbnails/37.jpg)
DZIĘKI!PYTANIA?
academy.gamedesire.com