• Stars
    star
    112
  • Rank 302,656 (Top 7 %)
  • Language
    Go
  • License
    MIT License
  • Created about 7 years ago
  • Updated 18 days ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Maestro: Game Room Scheduler

WARNING: The version v9.x of Maestro is under deprecation, complete guide of the new version v10.x can be found here.


Maestro

Build Status Codecov Status

Dedicated game server management service, designed to manage multiple game servers fleets in isolated schedulers.

What does the module do?

A Game Room is a dedicated game server that runs in a match execution context, a group of game rooms (fleet) are organized in a Scheduler.

Maestro manage multiple game rooms fleets with user-created custom specifications (schedulers).

What problem is solved?

Maestro orchestrate game rooms fleets according to user specifications (schedulers), in which it can maintain a fixed number of game rooms up and running, or can use autoscaling policies for costs optimization.

Ideally, Maestro should be used by games that implement dedicated game server (dgs) architecture.

Recommended Integration Phase: Alpha

This module is not required for prototyping, but it is recommended to include it in the alpha phase so future development and deployment of new game room versions can be better managed.

Dependencies

Maestro does not have any dependencies, but it provides an events forwarding feature that can be used to integrate with external matchmaking services.

How is the problem solved?

Currently, the only runtime that Maestro supports is Kubernetes.

With a scheduler, the user can define how a game room can be built and deployed on the runtime. Each scheduler manages a fleet of game rooms in isolated namespaces.

Usually a scheduler will define which docker image will be used, its commands, resources that need to be allocated (cpu and memory), and other parameters for fleet management.

Every action that Maestro does on runtime to manage its resources is encapsulated in what we call an Operation. An Operation can be triggered by the user or by Maestro itself. Maestro uses a queue to control operations flow and disposes of a worker that keeps processing operations.

Maestro provides two APIs for external and internal communication:

  • management-api: used by users to manage schedulers and operations.
  • rooms-api: used by game rooms to report its status back to Maestro.

Additional information

Documentation can be found in the docs folder. This module is supported by the Wildlife's multiplayer team.

Position Name
Owner Team Multiplayer Team
Documentation Owner Guilherme Carvalho

More Repositories

1

pitaya

Scalable game server framework with clustering support and client libraries for iOS, Android, Unity and others through the C SDK.
Go
2,163
star
2

apm

APM is a process manager for Golang applications.
Go
167
star
3

libpitaya

a client sdk for pitaya game server framework
C
61
star
4

podium

A leaderboard backend using redis
Go
47
star
5

pusher

A fast massive push platform for APNs and FCM
Go
34
star
6

khan

khan will drive all your enemies to the sea (and also take care of your game's clans)!
Go
30
star
7

marathon

Marathon is a push notification platform.
Go
25
star
8

libpitaya-cluster

This repo contains a c++ lib with pitaya's cluster logic for creating backend pitaya servers in other programming languages
HTML
21
star
9

pitaya-cli

a cli repl client for pitaya, great for testing servers during development
Go
20
star
10

pitaya-bot

Testing framework for Pitaya, providing automated tests
Go
18
star
11

mqttbot

A bot that provides programmable plugins and persistence/history for mqtt
Go
16
star
12

extensions

This package contains the common extensions we use in our projects.
Go
16
star
13

flux-gitlab-controller

Flux k8s controller to sync gitlab deploy keys
Go
14
star
14

pitaya-admin

Management, monitoring and testing interface for pitaya servers using http and web socket endpoints
Go
10
star
15

kubernetes-kops-operator

Manage Kubernetes clusters using Kops.
Go
9
star
16

maestro-client

maestro-client is maestro's framework that should be included in game rooms
C++
8
star
17

helm-generate

Helm-generate is a generator command to be used with FluxCD. It recursively generates several Helm charts by rendering the Charts to STDOUT.
Go
8
star
18

arkadiko

A simple bridge from HTTP to MQTT developed in Go
Go
7
star
19

go-etl

Go ETL using Ratchet
Go
6
star
20

kaas-management-api

Management API for Kubernetes as a Service
Go
5
star
21

unity-template

Unity template for game jams
5
star
22

maestro-cli

Maestro command line interface
Go
5
star
23

mqtt-history

Go
5
star
24

crossplane-provider-vault

This is a native crossplane provider for Hashicorp's Vault
Go
4
star
25

bike-race-issues

4
star
26

codeowners-verifier

Small binary to verify if a path has a CODEOWNER.
Go
4
star
27

pitaya-protos

this repository contains the proto files for pitaya projects
4
star
28

santiago

Santiago is a horizontal-scale server that handles webhooks with delivery guarantee.
Go
4
star
29

iac-docker-image

Docker image to be used for infrastructure deployments in CI/CD
Dockerfile
3
star
30

jaeger-tracer-node

Node Jaeger client extended with context propagation and external libs patches
JavaScript
3
star
31

pomelo-graceful-shutdown

A pomelo component that handles graceful shutdown logics
JavaScript
3
star
32

vernemq_redis_auth_plugin

Elixir
3
star
33

kubernetes-crossplane-infrastructure-operator

Operator to manage Kubernetes Clusters Network
Go
3
star
34

resources-check

Check if controllers on Kubernetes have limit and requests setted
Go
3
star
35

eventsgateway

Receive events and send them encoded as avro to kafka
Go
3
star
36

protos

This package contains the common .proto files and related generated code we use in our projects.
Go
3
star
37

mystack-controller

Mystack creates a personal stack of predefined services on kubernetes
Go
3
star
38

emq_throttle_plugin

A throttle plugin for EMQ
Elixir
2
star
39

go-extensions-http

Wrapper over go's http with OpenTracing support
Go
2
star
40

mystack-router

The router for mystack
Go
2
star
41

mqtt-monitor

Python
2
star
42

offers

Offers is a service meant to handle offers/promotions in your games.
Go
2
star
43

mystack-cli

The CLI for mystack
Go
2
star
44

mystack

Mystack creates a personal stack of predefined services on kubernetes
Makefile
1
star
45

pitaya-protocol-js

an implementation of pitaya protocol written in javascript
JavaScript
1
star
46

homebrew-python2

Support for deprecated Python 2
Ruby
1
star
47

koa-datadog-middleware

A koa middleware for reporting metrics to datadog
JavaScript
1
star
48

doctor-kafka

Shell
1
star
49

gobblin

Java
1
star
50

mystack-logger

The logger components of mystack
Go
1
star
51

go-extensions-tracing

Common functions to our go-extensions-* with OpenTracing support
Go
1
star
52

xk6-pitaya

Go
1
star
53

go-extensions-k8s-client-go

Wrapper over k8s.io/client-go that implements some niceties, like OpenTracing support
Go
1
star
54

emq-redis-auth-plugin

Emqtt redis auth plugin based on mosquitto auth plugin
Elixir
1
star
55

wildlogstash

Custom build for logstash
Makefile
1
star
56

OpenSSL

C
1
star