37
GAMEDEV OD ZAPLECZA #nierobieniegier #mikroserwisy 14.03.2016

Zbyszek Rzepka: GameDev od zaplecza

Embed Size (px)

Citation preview

Page 1: Zbyszek Rzepka: GameDev od zaplecza

GAMEDEV OD ZAPLECZA#nierobieniegier #mikroserwisy

14.03.2016

Page 2: Zbyszek Rzepka: GameDev od zaplecza

CZEŚĆ!

• Cerebro – zespół backendowy• Mikroserwisy• Amazon Web Services• I ogólnie takie, takie

Page 3: Zbyszek Rzepka: GameDev od zaplecza

• CZYM JEST BACKEND?• SZCZYPTA TEORII• TECHNOLOGIE• JAK TO BANGLA W PRAKTYCE?

Page 4: Zbyszek Rzepka: GameDev od zaplecza

CO ROBI BACKEND?

Page 5: Zbyszek Rzepka: GameDev od zaplecza

• Nie robimy nic co bezpośrednio widzą gracze• … chyba, że coś zepsujemy

PARSZYWA ROBOTA?

Page 6: Zbyszek Rzepka: GameDev od zaplecza

• 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

• Leaderboardy• Eventy analityczne• Promocje• Integracja z czymkolwiek

FICZERY OKOŁO-GROWE

Page 8: Zbyszek Rzepka: GameDev od zaplecza

• MONOLITYCZNA• Jeden wielki wór

• ROZPROSZONA• Dużo małych woreczków• Mikroserwisy• API

DWIE ARCHITEKTURY

Page 9: Zbyszek Rzepka: GameDev od zaplecza

+ 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

+ 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

MONOLITY VS MIKROSERWISY

Page 12: Zbyszek Rzepka: GameDev od zaplecza

• Co chcecie!

CO WYBRAĆ?

Page 13: Zbyszek Rzepka: GameDev od zaplecza

TROCHĘ PRAKTYKI

Page 14: Zbyszek Rzepka: GameDev od zaplecza

• 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

TECHNOLOGIE

Docker HAProxy Consul HA

Page 16: Zbyszek Rzepka: GameDev od zaplecza

• 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

#DOCKER

Page 18: Zbyszek Rzepka: GameDev od zaplecza

• 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

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

Gra promo-api

promo-api.gd50.0.0.1:80

GET /promos/gra/1234

promos: [.....]

Page 21: Zbyszek Rzepka: GameDev od zaplecza

• Load balancer

HAPROXY

Page 22: Zbyszek Rzepka: GameDev od zaplecza

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

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

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

• Ręczna konfiguracja?• Nuh-uh!

• Co jeśli port 8888 jest zajęty?

NO FAJNIE, ALE...

Page 26: Zbyszek Rzepka: GameDev od zaplecza

… 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

• „Baza danych”• Klucz-wartość• Replikuje dane pomiędzy serwerami

• Szybki czas odpowiedzi

DISTRIBUTED DATA CENTER (#CONSUL, #ETCD)

Page 28: Zbyszek Rzepka: GameDev od zaplecza

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

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

Consul magellan

HAProxyConsul Consul

Gra

promo-api

promo-api

promo-api

CAŁOŚĆ – LEVEL: EASY

Page 31: Zbyszek Rzepka: GameDev od zaplecza

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

• 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

ODPYTANIE INNEGO SERWISU

Consul

promo-api

Bad-guys

LocalHAProxy

LocalMagellan

Bad-guys

Page 34: Zbyszek Rzepka: GameDev od zaplecza

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

• 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 36: Zbyszek Rzepka: GameDev od zaplecza

http://armada.sh

Wszystko o czym mówiłem i więcej gotowe do użycia

Page 37: Zbyszek Rzepka: GameDev od zaplecza

DZIĘKI!PYTANIA?

academy.gamedesire.com