SlideShare une entreprise Scribd logo
1  sur  31
Puppet at Demonware

      Ruaidhrí Power
 ruaidhri@demonware.net
Overview

    History of Demonware and our growth

    What do we do?

    Early Puppet approaches

    Current state

    New improvements

    The future

    Questions
Foundation

    Original founders (~2003)
    −   Seán Blanchfield
        
            PhD student in Distributed Systems group in CS dept in
            Trinity College Dublin
        
            DSG previously spun out Iona (CORBA)
        
            TCD CS dept spun out Havok (games physics)
        
            Seán was studying Grid P2P topologies
    −   Dylan Collins
        
            Business graduate, also TCD

    Both were hooked on Counterstrike and
    Quake
Startup

    Started hosting lobby servers in 2005

    By 2007, lots of customers: Activision, Ubisoft,
    Codemasters, THQ

    Acquired by Activision in May

    Some big games
    −   Splinter Cell Double Agent
    −   Saints Row
    −   Worms Open Warfare
    −   Colin McRae DiRT
    −   Enemy Territory Quake Wars
Startup

    But no monster blockbuster

    20,000 concurrent users was a big title

    Still a tiny company

    11 devs, 3 ops, 3 managers

    Acquired by Activision (now Activision-
    Blizzard)
Products

    Bitdemon
    −   Cross platform
    −   Game friendly SDK for P2P communications (no
        server side components)
    −   Minimal memory allocation, non blocking etc.
    −   Designed to be called in a game loop
    −   Had higher level libraries to support client server
        and peer to peer games
    −   Origin of “bd” prefix.
What do we do?

    The full online infrastructure for all Activision
    games
      –   Lobby services:
            •   Matchmaking, Leaderboards, Stats storage,
                Messaging, Friends/Teams, Anti cheat
            •   Via XBox Live Service Platform (XLSP) →
                Windows boxes
      –   Webservice access to our services
            •   Elite, elite.callofduty.com
            •   Mobile
Games

    Call of Duty
    −   Call of Duty 4: Modern Warfare (2007)
    −   Call of Duty: World at War (2008)
    −   Call of Duty: Modern Warfare 2 (2009)
    −   Call of Duty: Black Ops (2010)
    −   Call of Duty: Modern Warfare 3 (2011)
    −   →Call of Duty: Black Ops 2 (2012)
Games

    Guitar Hero

    Spyro

    Blur

    DJ Hero

    James Bond – GoldenEye and Quantum of
    Solace

    Transformers: WFC

    Singularity

    90+ games in total
Demonware in numbers

    Our services are used by 280+ million gamers

    We support over 2.4 million+ concurrent online gamers

    Demonware software has shipped in 90+ games

    We serve 300,000 requests per second at peak

    We have an average query response time of < .01 second

    We collect 500,000+ metrics every minute

    Our services respond to 100 billion+ API calls per month
In the beginning (~2007)

    Tech with Ubuntu DVD
    −   lots of notes on wiki
    −   compiling from source; “ask Seán/Tilman”

    Standard image with basics done
    −   hard drive removed and imaged
    −   frozen at point in time
    −   hard to update
Fun times

    New accounts by hand everywhere

    Network setup over the network
    −   and shorewall fun

    Changing /etc/hosts made sudo unhappy

    Reboot and cross fingers

    Mail remote hands in shame
Cobbler

    Provisioning server
    −   Written in Python
    −   delivers network installs via PXE
    −   integrated DHCP server
    −   also supports Windows and virtualized hardware
        such as KVM and VMWare servers

    Install Puppet
2009 Architecture

    Fledgling Puppet deployment

    ENC script connecting to MySQL inventory
    database with IPs and list of Puppet classes

    With great power comes great responsibility
    −   UPDATE without WHERE clause
    −   “I'm such a dummy, I can't spell --i-am-a-dummy
        properly” — anon.
2009 Problems

    Puppet class proliferation

    No conditionals or service/host-based
    conditionals in code

    Passwords in code!

    Use Puppet to copy over a shell script ☹
    −   MySQL users via shell script
    −   Change MySQL root password; no more puppet
        changes

    Machine inventory in spreadsheet

    noop
noop

    Tells transactional layer to not make any
    changes
    −   logs them instead

    All production machines ran in noop mode

    Machines in setup did not

    Trade off between automation and not making
    changes accidentally

    Run puppet client from command line or just
    make changes and log messages go away
noop

    noop saved us downtime
    −   Turned what would have been complete downtime
        on GH5 and MW2 into a problem with wsproxy
        and contingency only
    −   Political necessity at the time

    In the process of removing it now that Puppet
    has proven itself
Puppet gains traction

    Servers per sysadmin

    More in-house expertise

    Base system install for dev

    Full production install

    Server rebuild
      –   Faster than debugging subtly broken system
2010 rewrite

    Move from Ubuntu to CentOS

    Much improved from previous version
    −   Custom types
    −   Proper dependencies
    −   Password lookup function
Load balancing

    Standard Webrick

    Apache and Mongrel

    Now moved to Passenger
Custom types

    MySQL users
    −   users
    −   passwords
    −   grants

    MySQL databases

    Generic MySQL module for use with multiple
    services

    sysctls
Custom functions

    Password lookup
    −   $auth_database_password = 
        password("mysql_auth_database", $service)
    −   Passwords configured locally per Puppetmaster,
        outside version control
    −   Allows sharing of modules without sharing secrets
Devzone integration

    Internal Django app

    Game developer interface to Demonware

    Internal service configuration interface
    −   double sign off of changes

    Inventory database
    −   servers
    −   Interfaces – IPs, netmasks, default routes
    −   clusters / subclusters
    −   Puppet modules!
ENC script

    Python script which connected to our custom
    inventory database (Django app)

    Makes Devzone API call for classes, network,
    subcluster, etc.

    Simple conditionals to add extra configuration
    to output

    Disadvantages
    −   Need SSH and root access to update
    −   Brittle and no way to avoid simultaneous update
ENC output
classes:
- mmp-db
- mysql-backup
- demonware-default
parameters:
 backup_filer: tlana04
 service: PROD_COD7_360
bdPuppetConfig

    Python XMLRPC server (bdPuppetConfigd)

    Simple client (bdpupc)

    bdconfig as a standard for configuring
    Demonware services

    Devzone integration
    −   View how your service is configured
    −   Make updates self-service
    −   Traceability
    −   NOC
Puppet modules

    schema.yaml in the root of each module
    defines available variables

    bdconfig variable types
    −   host
    −   ip
    −   hostport
    −   string
    −   boolean
    −   etc.

    Versioned per puppet branch
Gerrit

    git code review tool

    http://code.google.com/p/gerrit/

    Clone from standard git repository (we use
    gitolite and cgit)

    Push to Gerrit and have change reviewed and
    confirmed

    Post-commit hooks distribute to the relevant
    datacentres (per git branch)
Future for Demonware

    CoD n+1
    −   Elite

    Bungie

    Mobile

    CoD online (China)

    Next-gen consoles
We're hiring!

www.demonware.net/jobs/
Questions




            ?

Contenu connexe

Tendances

Scale Big With Docker — Moboom 2014
Scale Big With Docker — Moboom 2014Scale Big With Docker — Moboom 2014
Scale Big With Docker — Moboom 2014
Jérôme Petazzoni
 

Tendances (20)

Docker and Puppet — Puppet Camp L.A. — SCALE12X
Docker and Puppet — Puppet Camp L.A. — SCALE12XDocker and Puppet — Puppet Camp L.A. — SCALE12X
Docker and Puppet — Puppet Camp L.A. — SCALE12X
 
Docker and Containers for Development and Deployment — SCALE12X
Docker and Containers for Development and Deployment — SCALE12XDocker and Containers for Development and Deployment — SCALE12X
Docker and Containers for Development and Deployment — SCALE12X
 
Docker Tips And Tricks at the Docker Beijing Meetup
Docker Tips And Tricks at the Docker Beijing MeetupDocker Tips And Tricks at the Docker Beijing Meetup
Docker Tips And Tricks at the Docker Beijing Meetup
 
Docker and DevOps --- new IT culture
Docker and DevOps --- new IT cultureDocker and DevOps --- new IT culture
Docker and DevOps --- new IT culture
 
Docker Continuous Delivery Workshop
Docker Continuous Delivery WorkshopDocker Continuous Delivery Workshop
Docker Continuous Delivery Workshop
 
Learn docker in 90 minutes
Learn docker in 90 minutesLearn docker in 90 minutes
Learn docker in 90 minutes
 
Containers: from development to production at DevNation 2015
Containers: from development to production at DevNation 2015Containers: from development to production at DevNation 2015
Containers: from development to production at DevNation 2015
 
Vagrant + Docker provider [+Puppet]
Vagrant + Docker provider [+Puppet]Vagrant + Docker provider [+Puppet]
Vagrant + Docker provider [+Puppet]
 
Scale Big With Docker — Moboom 2014
Scale Big With Docker — Moboom 2014Scale Big With Docker — Moboom 2014
Scale Big With Docker — Moboom 2014
 
Locally it worked! virtualizing docker
Locally it worked! virtualizing dockerLocally it worked! virtualizing docker
Locally it worked! virtualizing docker
 
Joomla Continuous Delivery with Docker
Joomla Continuous Delivery with DockerJoomla Continuous Delivery with Docker
Joomla Continuous Delivery with Docker
 
Puppet and Vagrant in development
Puppet and Vagrant in developmentPuppet and Vagrant in development
Puppet and Vagrant in development
 
Jenkins 101: Continuos Integration with Jenkins
Jenkins 101: Continuos Integration with JenkinsJenkins 101: Continuos Integration with Jenkins
Jenkins 101: Continuos Integration with Jenkins
 
Docker Presentation at the OpenStack Austin Meetup | 2013-09-12
Docker Presentation at the OpenStack Austin Meetup | 2013-09-12Docker Presentation at the OpenStack Austin Meetup | 2013-09-12
Docker Presentation at the OpenStack Austin Meetup | 2013-09-12
 
Pro Puppet
Pro PuppetPro Puppet
Pro Puppet
 
Vagrant vs Docker
Vagrant vs DockerVagrant vs Docker
Vagrant vs Docker
 
Using Docker to build and test in your laptop and Jenkins
Using Docker to build and test in your laptop and JenkinsUsing Docker to build and test in your laptop and Jenkins
Using Docker to build and test in your laptop and Jenkins
 
Docker zero
Docker zeroDocker zero
Docker zero
 
Continuous delivery with jenkins, docker and exoscale
Continuous delivery with jenkins, docker and exoscaleContinuous delivery with jenkins, docker and exoscale
Continuous delivery with jenkins, docker and exoscale
 
JOSA TechTalk: Taking Docker to Production
JOSA TechTalk: Taking Docker to ProductionJOSA TechTalk: Taking Docker to Production
JOSA TechTalk: Taking Docker to Production
 

Similaire à Puppet at DemonWare - Ruaidhri Power - Puppetcamp Dublin '12

ITCamp 2013 - Tudor Damian - Running Linux on Microsoft Private and Public Cl...
ITCamp 2013 - Tudor Damian - Running Linux on Microsoft Private and Public Cl...ITCamp 2013 - Tudor Damian - Running Linux on Microsoft Private and Public Cl...
ITCamp 2013 - Tudor Damian - Running Linux on Microsoft Private and Public Cl...
ITCamp
 
Rmll Virtualization As Is Tool 20090707 V1.0
Rmll Virtualization As Is Tool 20090707 V1.0Rmll Virtualization As Is Tool 20090707 V1.0
Rmll Virtualization As Is Tool 20090707 V1.0
guest72e8c1
 
DCSF19 Transforming a 15+ Year Old Semiconductor Manufacturing Environment
DCSF19 Transforming a 15+ Year Old Semiconductor Manufacturing EnvironmentDCSF19 Transforming a 15+ Year Old Semiconductor Manufacturing Environment
DCSF19 Transforming a 15+ Year Old Semiconductor Manufacturing Environment
Docker, Inc.
 

Similaire à Puppet at DemonWare - Ruaidhri Power - Puppetcamp Dublin '12 (20)

[OpenInfra Days Korea 2018] Day 2 - E4 - 딥다이브: immutable Kubernetes architecture
[OpenInfra Days Korea 2018] Day 2 - E4 - 딥다이브: immutable Kubernetes architecture[OpenInfra Days Korea 2018] Day 2 - E4 - 딥다이브: immutable Kubernetes architecture
[OpenInfra Days Korea 2018] Day 2 - E4 - 딥다이브: immutable Kubernetes architecture
 
Immutable kubernetes architecture by linuxkit
Immutable kubernetes architecture by linuxkitImmutable kubernetes architecture by linuxkit
Immutable kubernetes architecture by linuxkit
 
DockerCon 16 General Session Day 1
DockerCon 16 General Session Day 1DockerCon 16 General Session Day 1
DockerCon 16 General Session Day 1
 
ITCamp 2013 - Tudor Damian - Running Linux on Microsoft Private and Public Cl...
ITCamp 2013 - Tudor Damian - Running Linux on Microsoft Private and Public Cl...ITCamp 2013 - Tudor Damian - Running Linux on Microsoft Private and Public Cl...
ITCamp 2013 - Tudor Damian - Running Linux on Microsoft Private and Public Cl...
 
Xen revisited
Xen revisitedXen revisited
Xen revisited
 
Docker interview Questions-3.pdf
Docker interview Questions-3.pdfDocker interview Questions-3.pdf
Docker interview Questions-3.pdf
 
Cont0519
Cont0519Cont0519
Cont0519
 
RMLL / LSM 2009
RMLL / LSM 2009RMLL / LSM 2009
RMLL / LSM 2009
 
Rmll Virtualization As Is Tool 20090707 V1.0
Rmll Virtualization As Is Tool 20090707 V1.0Rmll Virtualization As Is Tool 20090707 V1.0
Rmll Virtualization As Is Tool 20090707 V1.0
 
Immutable Kubernetes with Digital Rebar Provision
Immutable Kubernetes with Digital Rebar ProvisionImmutable Kubernetes with Digital Rebar Provision
Immutable Kubernetes with Digital Rebar Provision
 
Anton Moldovan "Building an efficient replication system for thousands of ter...
Anton Moldovan "Building an efficient replication system for thousands of ter...Anton Moldovan "Building an efficient replication system for thousands of ter...
Anton Moldovan "Building an efficient replication system for thousands of ter...
 
A Xen Case Study
A Xen Case StudyA Xen Case Study
A Xen Case Study
 
LOAD BALANCING OF APPLICATIONS USING XEN HYPERVISOR
LOAD BALANCING OF APPLICATIONS  USING XEN HYPERVISORLOAD BALANCING OF APPLICATIONS  USING XEN HYPERVISOR
LOAD BALANCING OF APPLICATIONS USING XEN HYPERVISOR
 
Medusa Project
Medusa ProjectMedusa Project
Medusa Project
 
DCSF19 Transforming a 15+ Year Old Semiconductor Manufacturing Environment
DCSF19 Transforming a 15+ Year Old Semiconductor Manufacturing EnvironmentDCSF19 Transforming a 15+ Year Old Semiconductor Manufacturing Environment
DCSF19 Transforming a 15+ Year Old Semiconductor Manufacturing Environment
 
Chef arista devops days a'dam 2015
Chef arista devops days a'dam 2015Chef arista devops days a'dam 2015
Chef arista devops days a'dam 2015
 
DeltaV Development Systems in a Virtualized Environment
DeltaV Development Systems in a Virtualized EnvironmentDeltaV Development Systems in a Virtualized Environment
DeltaV Development Systems in a Virtualized Environment
 
Hacking Highly Secured Enterprise Environments by Zoltan Balazs
Hacking Highly Secured Enterprise Environments by Zoltan BalazsHacking Highly Secured Enterprise Environments by Zoltan Balazs
Hacking Highly Secured Enterprise Environments by Zoltan Balazs
 
Oracle Database Appliance RAC in a box Some Strings Attached
Oracle Database Appliance RAC in a box Some Strings AttachedOracle Database Appliance RAC in a box Some Strings Attached
Oracle Database Appliance RAC in a box Some Strings Attached
 
Cobbler, Func and Puppet: Tools for Large Scale Environments
Cobbler, Func and Puppet: Tools for Large Scale EnvironmentsCobbler, Func and Puppet: Tools for Large Scale Environments
Cobbler, Func and Puppet: Tools for Large Scale Environments
 

Plus de Puppet

Puppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepoPuppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepo
Puppet
 
2021 04-15 operational verification (with notes)
2021 04-15 operational verification (with notes)2021 04-15 operational verification (with notes)
2021 04-15 operational verification (with notes)
Puppet
 
Enforce compliance policy with model-driven automation
Enforce compliance policy with model-driven automationEnforce compliance policy with model-driven automation
Enforce compliance policy with model-driven automation
Puppet
 

Plus de Puppet (20)

Puppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepoPuppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepo
 
Puppetcamp r10kyaml
Puppetcamp r10kyamlPuppetcamp r10kyaml
Puppetcamp r10kyaml
 
2021 04-15 operational verification (with notes)
2021 04-15 operational verification (with notes)2021 04-15 operational verification (with notes)
2021 04-15 operational verification (with notes)
 
Puppet camp vscode
Puppet camp vscodePuppet camp vscode
Puppet camp vscode
 
Modules of the twenties
Modules of the twentiesModules of the twenties
Modules of the twenties
 
Applying Roles and Profiles method to compliance code
Applying Roles and Profiles method to compliance codeApplying Roles and Profiles method to compliance code
Applying Roles and Profiles method to compliance code
 
KGI compliance as-code approach
KGI compliance as-code approachKGI compliance as-code approach
KGI compliance as-code approach
 
Enforce compliance policy with model-driven automation
Enforce compliance policy with model-driven automationEnforce compliance policy with model-driven automation
Enforce compliance policy with model-driven automation
 
Keynote: Puppet camp compliance
Keynote: Puppet camp complianceKeynote: Puppet camp compliance
Keynote: Puppet camp compliance
 
Automating it management with Puppet + ServiceNow
Automating it management with Puppet + ServiceNowAutomating it management with Puppet + ServiceNow
Automating it management with Puppet + ServiceNow
 
Puppet: The best way to harden Windows
Puppet: The best way to harden WindowsPuppet: The best way to harden Windows
Puppet: The best way to harden Windows
 
Simplified Patch Management with Puppet - Oct. 2020
Simplified Patch Management with Puppet - Oct. 2020Simplified Patch Management with Puppet - Oct. 2020
Simplified Patch Management with Puppet - Oct. 2020
 
Accelerating azure adoption with puppet
Accelerating azure adoption with puppetAccelerating azure adoption with puppet
Accelerating azure adoption with puppet
 
Puppet catalog Diff; Raphael Pinson
Puppet catalog Diff; Raphael PinsonPuppet catalog Diff; Raphael Pinson
Puppet catalog Diff; Raphael Pinson
 
ServiceNow and Puppet- better together, Kevin Reeuwijk
ServiceNow and Puppet- better together, Kevin ReeuwijkServiceNow and Puppet- better together, Kevin Reeuwijk
ServiceNow and Puppet- better together, Kevin Reeuwijk
 
Take control of your dev ops dumping ground
Take control of your  dev ops dumping groundTake control of your  dev ops dumping ground
Take control of your dev ops dumping ground
 
100% Puppet Cloud Deployment of Legacy Software
100% Puppet Cloud Deployment of Legacy Software100% Puppet Cloud Deployment of Legacy Software
100% Puppet Cloud Deployment of Legacy Software
 
Puppet User Group
Puppet User GroupPuppet User Group
Puppet User Group
 
Continuous Compliance and DevSecOps
Continuous Compliance and DevSecOpsContinuous Compliance and DevSecOps
Continuous Compliance and DevSecOps
 
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick Maludy
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick MaludyThe Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick Maludy
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick Maludy
 

Dernier

Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Dernier (20)

GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source Milvus
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 

Puppet at DemonWare - Ruaidhri Power - Puppetcamp Dublin '12

  • 1. Puppet at Demonware Ruaidhrí Power ruaidhri@demonware.net
  • 2. Overview  History of Demonware and our growth  What do we do?  Early Puppet approaches  Current state  New improvements  The future  Questions
  • 3. Foundation  Original founders (~2003) − Seán Blanchfield  PhD student in Distributed Systems group in CS dept in Trinity College Dublin  DSG previously spun out Iona (CORBA)  TCD CS dept spun out Havok (games physics)  Seán was studying Grid P2P topologies − Dylan Collins  Business graduate, also TCD  Both were hooked on Counterstrike and Quake
  • 4. Startup  Started hosting lobby servers in 2005  By 2007, lots of customers: Activision, Ubisoft, Codemasters, THQ  Acquired by Activision in May  Some big games − Splinter Cell Double Agent − Saints Row − Worms Open Warfare − Colin McRae DiRT − Enemy Territory Quake Wars
  • 5. Startup  But no monster blockbuster  20,000 concurrent users was a big title  Still a tiny company  11 devs, 3 ops, 3 managers  Acquired by Activision (now Activision- Blizzard)
  • 6. Products  Bitdemon − Cross platform − Game friendly SDK for P2P communications (no server side components) − Minimal memory allocation, non blocking etc. − Designed to be called in a game loop − Had higher level libraries to support client server and peer to peer games − Origin of “bd” prefix.
  • 7. What do we do?  The full online infrastructure for all Activision games – Lobby services: • Matchmaking, Leaderboards, Stats storage, Messaging, Friends/Teams, Anti cheat • Via XBox Live Service Platform (XLSP) → Windows boxes – Webservice access to our services • Elite, elite.callofduty.com • Mobile
  • 8. Games  Call of Duty − Call of Duty 4: Modern Warfare (2007) − Call of Duty: World at War (2008) − Call of Duty: Modern Warfare 2 (2009) − Call of Duty: Black Ops (2010) − Call of Duty: Modern Warfare 3 (2011) − →Call of Duty: Black Ops 2 (2012)
  • 9. Games  Guitar Hero  Spyro  Blur  DJ Hero  James Bond – GoldenEye and Quantum of Solace  Transformers: WFC  Singularity  90+ games in total
  • 10. Demonware in numbers  Our services are used by 280+ million gamers  We support over 2.4 million+ concurrent online gamers  Demonware software has shipped in 90+ games  We serve 300,000 requests per second at peak  We have an average query response time of < .01 second  We collect 500,000+ metrics every minute  Our services respond to 100 billion+ API calls per month
  • 11. In the beginning (~2007)  Tech with Ubuntu DVD − lots of notes on wiki − compiling from source; “ask Seán/Tilman”  Standard image with basics done − hard drive removed and imaged − frozen at point in time − hard to update
  • 12. Fun times  New accounts by hand everywhere  Network setup over the network − and shorewall fun  Changing /etc/hosts made sudo unhappy  Reboot and cross fingers  Mail remote hands in shame
  • 13. Cobbler  Provisioning server − Written in Python − delivers network installs via PXE − integrated DHCP server − also supports Windows and virtualized hardware such as KVM and VMWare servers  Install Puppet
  • 14. 2009 Architecture  Fledgling Puppet deployment  ENC script connecting to MySQL inventory database with IPs and list of Puppet classes  With great power comes great responsibility − UPDATE without WHERE clause − “I'm such a dummy, I can't spell --i-am-a-dummy properly” — anon.
  • 15. 2009 Problems  Puppet class proliferation  No conditionals or service/host-based conditionals in code  Passwords in code!  Use Puppet to copy over a shell script ☹ − MySQL users via shell script − Change MySQL root password; no more puppet changes  Machine inventory in spreadsheet  noop
  • 16. noop  Tells transactional layer to not make any changes − logs them instead  All production machines ran in noop mode  Machines in setup did not  Trade off between automation and not making changes accidentally  Run puppet client from command line or just make changes and log messages go away
  • 17. noop  noop saved us downtime − Turned what would have been complete downtime on GH5 and MW2 into a problem with wsproxy and contingency only − Political necessity at the time  In the process of removing it now that Puppet has proven itself
  • 18. Puppet gains traction  Servers per sysadmin  More in-house expertise  Base system install for dev  Full production install  Server rebuild – Faster than debugging subtly broken system
  • 19. 2010 rewrite  Move from Ubuntu to CentOS  Much improved from previous version − Custom types − Proper dependencies − Password lookup function
  • 20. Load balancing  Standard Webrick  Apache and Mongrel  Now moved to Passenger
  • 21. Custom types  MySQL users − users − passwords − grants  MySQL databases  Generic MySQL module for use with multiple services  sysctls
  • 22. Custom functions  Password lookup − $auth_database_password =  password("mysql_auth_database", $service) − Passwords configured locally per Puppetmaster, outside version control − Allows sharing of modules without sharing secrets
  • 23. Devzone integration  Internal Django app  Game developer interface to Demonware  Internal service configuration interface − double sign off of changes  Inventory database − servers − Interfaces – IPs, netmasks, default routes − clusters / subclusters − Puppet modules!
  • 24. ENC script  Python script which connected to our custom inventory database (Django app)  Makes Devzone API call for classes, network, subcluster, etc.  Simple conditionals to add extra configuration to output  Disadvantages − Need SSH and root access to update − Brittle and no way to avoid simultaneous update
  • 25. ENC output classes: - mmp-db - mysql-backup - demonware-default parameters: backup_filer: tlana04 service: PROD_COD7_360
  • 26. bdPuppetConfig  Python XMLRPC server (bdPuppetConfigd)  Simple client (bdpupc)  bdconfig as a standard for configuring Demonware services  Devzone integration − View how your service is configured − Make updates self-service − Traceability − NOC
  • 27. Puppet modules  schema.yaml in the root of each module defines available variables  bdconfig variable types − host − ip − hostport − string − boolean − etc.  Versioned per puppet branch
  • 28. Gerrit  git code review tool  http://code.google.com/p/gerrit/  Clone from standard git repository (we use gitolite and cgit)  Push to Gerrit and have change reviewed and confirmed  Post-commit hooks distribute to the relevant datacentres (per git branch)
  • 29. Future for Demonware  CoD n+1 − Elite  Bungie  Mobile  CoD online (China)  Next-gen consoles