Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Gaming at Scale

Gaming at Scale

In this presentation, I explain workload orchestration and how a good strategy can help you deal with regional- and provider-wide failures,.

This version of the talk was given at the 2023 Edition of Scale by the Bay in November 2023.

---

Companion Code: github.com/workloads

Kerim Satirli

November 15, 2023
Tweet

Video

More Decks by Kerim Satirli

Other Decks in Programming

Transcript

  1. FROM !"platform=linux/amd64 node:18-alpine3.17 LABEL org.opencontainers.image.authors='ksatirli' LABEL org.opencontainers.image.url='github.com/workloads/minecraft-bot' LABEL org.opencontainers.image.description='Excavation Assistant'

    LABEL org.opencontainers.image.licenses='Apache-2.0' LABEL org.opencontainers.image.source='github.com/workloads/minecraft-bot' COPY ./ / WORKDIR / RUN npm install CMD [ "node", "dist/index.js" ] Dockerfile Container Image
  2. job "minecraft_server" { datacenters = ["aws"] type = "service" namespace

    = "default" priority = 99 group "minecraft" { count = 1 ephemeral_disk { migrate = true size = 1024 sticky = true } network { mode = "host" Minecraft Server server.nomad.hcl
  3. nomad run server.nomad.hcl Terminal Minecraft Server ==> Monitoring evaluation "e614d2f7"

    Evaluation triggered by job "minecraft_server" Allocation "82aa9f54" created Evaluation status: "complete" ==> Evaluation "e614d2f7" finished.
  4. nomad run bot.nomad.hcl Terminal Multi-Region Deployment ==> Monitoring evaluation "c6118496"

    Evaluation triggered by job "minecraft_bot" Allocation "8862fb0e" created Allocation "cae76d09" created Allocation "ff1f1972" created Evaluation status: "complete" ==> Evaluation "c6118496" finished.
  5. aws_regions = toset([ "af-south-1", "ap-east-1", "ap-northeast-1", "ap-northeast-2", "ap-northeast-3", "ap-south-1", "ap-southeast-1",

    "ap-southeast-2", "ap-southeast-3", "ca-central-1", "eu-central-1", "eu-north-1", "eu-south-1", "eu-south-2", "eu-west-1", "eu-west-2", "eu-west-3", "me-south-1", "sa-east-1", Terraform Console Multi-Region Deployment
  6. module "regional_aws_workspaces" { for_each = toset(data.aws_regions.main.names) source = "ksatirli/regional-workspace/tfe" version

    = "1.2.0" region = { category = "terraform" identifier = each.key prefix = "aws" variable = "aws_region" } vcs_repo = { identifier = "workloads/regional-aws-deployment" branch = "main" } } regional_deployments.tf Multi-Region Deployment
  7. module "regional_aws_workspaces" { for_each = toset(data.aws_regions.main.names) source = "ksatirli/regional-workspace/tfe" version

    = "1.2.0" region = { category = "terraform" identifier = each.key prefix = "aws" variable = "aws_region" } vcs_repo = { identifier = "workloads/regional-aws-deployment" branch = "inactive" } } regional_deployments.tf Multi-Region Deployment
  8. variable "cidr_map" { type = object({ geo = map(number) cardinality

    = map(number) }) description = "Mapping of CIDR data by AWS Region." default = { geo = { # Asia Central ac = 22 # Africa af = 23 # Asia Pacific ap = 27 Multi-Region Networking regional_cidrs.tf
  9. Take-aways ▪ train like you play - no manual !

    ▪ codify infrastructure and processes ▪ architect for awareness, don't depend on it