SlideShare ist ein Scribd-Unternehmen logo
1 von 83
Building for the Cloud @ Netflix
 @cquinn #netflixcloud (@joesondow)
Who Am I?

Manager Engineering Tools team @ Netflix
Automated build tools and systems
Base machine image definition and maintenance
Application machine image baking
Netflix Application Console: deploy and manage
Why Cloud? Why AWS?

We can’t build datacenters fast enough
We want to use Clouds, not build them
Leverage AWS Scale “the biggest public cloud”
Leverage AWS Features “two years ahead of the rest”
Legacy Website


Mostly one Monolithic Java Web App
Single Big Oracle DB
Dedicated Data Center Machines
Old School Build & Deploy
                                          Datacenter
                                                                    LB
          Push
                         traffic control
WebCM      app bundle: war + config
                                                    Website
                                                    Website
                                                     Website
                                                     Website
             Dat
                                                      Website
                                                      Website
                 aba
                    se u                               Website
                                                       Website
                          pda
                                tes                     Website
                                                        Website
                                                         Website
Custom Perl web app:
                                           Oracle
build, deploy & manage


                              Manually configured: Linux, Apache, Tomcat
Path to AWS


Building newly refactored Java Web Services
Baking (assembling) ec2 Amazon Machine Images
Deploying and Managing Service Clusters
Getting Built
Step One: Componentize
                                           Ant targets


  Workstation

    sync         test           build        release

      source

                    checkin library jars
  Perforce

               jars used in app builds
Step Two: Automate
                                            Ant targets


  Hudson

    sync        test             build        release
                                                          app bundles
      source, jars

                     checkin library jars
  Perforce

             jars used in app builds
Step Three: Full Pipeline
                                                          app bundles
                     Artifactory
           Ivy                           snapshot / release
                    libraries
                                           libraries / apps

 Jenkins resolve                test           publish

  sync           compile               build             report

     source

                                         some Groovy
Perforce           Ant targets
                                         Gradle coming
Step Three: Full Pipeline
                                                          app bundles
                     Artifactory
           Ivy                           snapshot / release
                    libraries
                                           libraries / apps

 Jenkins resolve                test           publish

  sync           compile               build             report

     source

                                         some Groovy
Perforce           Ant targets
                                         Gradle coming
build.xml
<project name="helloworld">
    <import file="../../../Tools/build/webapplication.xml"/>
</project>

ivy.xml
<info organisation="netflix" module="helloworld">
  <publications>
    <artifact name="helloworld" type="package"
              e:classifier="package" ext="tgz"/>
    <artifact name="helloworld" type="javadoc"
              e:classifier="javadoc" ext="jar"/>
  </publications>
  <dependencies>
    <dependency org="netflix" name="resourceregistry"
                 rev="latest.${input.status}" conf="compile"/>
    <dependency org="netflix" name="platform"
                 rev="latest.${input.status}" conf="compile" />
    ...
build.gradle
apply plugin: 'nebula'

group = 'netflix'
artifacts {
  archives package
  archives javadocJar
}

dependencies {
  compile(
    [group: 'netflix', name: 'resourceregistry',
         version: 'latest.release'],
    [group: 'netflix', name: 'platform',
         version: 'latest.release'],
   ...
Step Three: Full Pipeline
                                                          app bundles
                     Artifactory
           Ivy                           snapshot / release
                    libraries
                                           libraries / apps

 Jenkins resolve                test           publish

  sync           compile               build             report

     source

                                         some Groovy
Perforce           Ant targets
                                         Gradle coming
Step Three: Full Pipeline
                                                          app bundles
                     Artifactory
           Ivy                           snapshot / release
                    libraries
                                           libraries / apps

 Jenkins resolve                test           publish

  sync           compile               build             report

     source

                                         some Groovy
Perforce           Ant targets
                                         Gradle coming
App Artifacts
                                  app bundles




 Jenkins Master

                  Slave
                   Slave
                    Slave
                     Slave
                      Slave
                       Slave
                        Slave

                  AWS us-west-1 VPC
App Artifacts
                                  app bundles




                                  Yum
 Jenkins Master
                            app bundle RPMs
                  Slave
                   Slave
                    Slave
                     Slave
                      Slave
                       Slave
                        Slave

                  AWS us-west-1 VPC
App Artifacts
                                           app bundles
                  Artifactory
                        app bundle
                        artifacts
                                           Yum
 Jenkins Master
                                     app bundle RPMs
                         Slave
                          Slave
                           Slave
                            Slave
                             Slave
                              Slave
                               Slave

                        AWS us-west-1 VPC
App Artifacts
                                           app bundles
                  Artifactory
                        app bundle
                        artifacts
                                           Yum
 Jenkins Master
                                     app bundle RPMs
                         Slave
                          Slave
                           Slave
                            Slave
                             Slave
                              Slave
                               Slave

                        AWS us-west-1 VPC
Getting Baked
Why bake?
Why bake?
Traditional:
•launch OS
•install packages
•install app
Why bake?
Traditional:
•launch OS
                    Generic AMI
•install packages                 Instance

•install app
Why bake?
Traditional:
•launch OS
                    Generic AMI
•install packages                 Instance

•install app
Why bake?
Traditional:
•launch OS
                    Generic AMI
•install packages                 Instance

•install app
Why bake?
Traditional:
•launch OS
                    Generic AMI
•install packages                 Instance

•install app




Netflix:
•launch OS+app
Why bake?
Traditional:
•launch OS
                    Generic AMI
•install packages                 Instance

•install app




Netflix:
•launch OS+app        App AMI
                                   Instance
Base Image
 Baking                                   S3 / EBS


                                    foundation
                                       AMI
Linux: CentOS, Fedora, Ubuntu




Yum /
 Apt                            install


                                                     AWS
Base Image
 Baking                                       S3 / EBS


                                          foundation
                                             AMI
Linux: CentOS, Fedora, Ubuntu



                                     mount
Yum /
 Apt        RPMs: Apache, Java...             Bakery
                                    install


                                                         AWS

                    ec2 slave instances
Base Image
 Baking                                       S3 / EBS


                                          foundation
                                             AMI         base
Linux: CentOS, Fedora, Ubuntu                            AMI
                                                         snapshot

                                     mount
Yum /
 Apt        RPMs: Apache, Java...             Bakery
                                    install


                                                          AWS

                    ec2 slave instances
Base Image
 Baking                                       S3 / EBS


                                          foundation
                                             AMI         base
Linux: CentOS, Fedora, Ubuntu                            AMI
                                                         snapshot

                                     mount
                                                                    Ready
Yum /                                                                for

 Apt        RPMs: Apache, Java...             Bakery                 app
                                    install                         bake

                                                          AWS

                    ec2 slave instances
App Image
   Baking                                  S3 / EBS

                                           base
                                           AMI
   Linux, Apache, Java, Tomcat




Jenkins /
  Yum /
                                 install
Artifactory
                                                      AWS
App Image
   Baking                                       S3 / EBS

                                                base
                                                AMI
   Linux, Apache, Java, Tomcat



                                       mount
Jenkins /
  Yum /         app bundle                       Bakery
                                      install
Artifactory
                                                           AWS

                      ec2 slave instances
App Image
   Baking                                       S3 / EBS

                                                base
                                                AMI
                                                            app
   Linux, Apache, Java, Tomcat                              AMI
                                                           snapshot

                                       mount
Jenkins /
  Yum /         app bundle                       Bakery
                                      install
Artifactory
                                                            AWS

                      ec2 slave instances
App Image
   Baking                                       S3 / EBS

                                                base
                                                AMI
                                                            app
   Linux, Apache, Java, Tomcat                              AMI
                                                           snapshot

                                       mount
Jenkins /                                                             Ready to
                                                                       launch
  Yum /         app bundle                       Bakery
                                      install
Artifactory
                                                            AWS

                      ec2 slave instances
Getting Deployed
Getting Deployed
Applications
Clusters
Cloud deployment model
Cloud deployment model

   Auto Scaling
      Group
Cloud deployment model

    Auto Scaling
       Group




    Launch
  Configuration
Cloud deployment model

                   Elastic Load
                     Balancer
    Auto Scaling
       Group




    Launch
  Configuration
Cloud deployment model

                    Elastic Load
                      Balancer
    Auto Scaling
       Group




    Launch
  Configuration

                   Amazon Machine
                       Image
Cloud deployment model

                    Elastic Load
                      Balancer
    Auto Scaling
       Group




                   Security
                    Group


    Launch
  Configuration

                   Amazon Machine
                       Image
Cloud deployment model

                    Elastic Load
                      Balancer
    Auto Scaling
       Group




                   Security
                                    Instances
                    Group


    Launch
  Configuration

                   Amazon Machine
                       Image
Cloud deployment model

                    Elastic Load
                      Balancer
    Auto Scaling
       Group




                   Security
                                    Instances
                    Group


    Launch
  Configuration

                   Amazon Machine
                       Image
Cloud deployment model

                    Elastic Load
                      Balancer
    Auto Scaling
       Group




                   Security
                                    Instances
                    Group


    Launch
  Configuration

                   Amazon Machine
                       Image
Cloud deployment model

                    Elastic Load
                      Balancer
    Auto Scaling
       Group




                   Security
                                    Instances
                    Group


    Launch
  Configuration

                   Amazon Machine
                       Image
Cloud deployment model
Cloud deployment model




                    Search
Cloud deployment model




            API     Search
Cloud deployment model

                     Ratings




            API     Search
Cloud deployment model
Streaming Starts
                          Ratings




                   API   Search
Cloud deployment model
Streaming Starts
                          Ratings




                   API   Search
Autocomplete
Cloud deployment model
                   Sign Up
Streaming Starts
                              Ratings




                     API     Search
Autocomplete
Cloud deployment model
                   Sign Up
Streaming Starts
                                   Ratings
                   Application
     Application

                                   Application



                      API        Search
Autocomplete


                   Application
   Application                   Application
Inventing the Application
Inventing the Application
 Problem:
 Application is not an Amazon concept
Inventing the Application
 Problem:
 Application is not an Amazon concept


 Solution:
 Create an Application domain in SimpleDB
 Enforce naming conventions on Amazon objects
Fast Rollback
Fast Rollback
Optimism causes outages
Fast Rollback
Optimism causes outages
Production traffic is unique
Fast Rollback
Optimism causes outages
Production traffic is unique
Keep old version running
Fast Rollback
Optimism causes outages
Production traffic is unique
Keep old version running
Switch traffic to new version
Fast Rollback
Optimism causes outages
Production traffic is unique
Keep old version running
Switch traffic to new version
Monitor results
Fast Rollback
Optimism causes outages
Production traffic is unique
Keep old version running
Switch traffic to new version
Monitor results
Revert traffic quickly
Fast Rollback
Fast Rollback


                     api-frontend




   api-usprod-v007
Fast Rollback


                     api-frontend




   api-usprod-v007                  api-usprod-v008
Fast Rollback


                     api-frontend




   api-usprod-v007                  api-usprod-v008
Fast Rollback


                     api-frontend




   api-usprod-v007                  api-usprod-v008
Fast Rollback


                     api-frontend




   api-usprod-v007                  api-usprod-v008
Fast Rollback


            api-frontend




                           api-usprod-v008
Fast Rollback
Fast Rollback


                     api-frontend




   api-usprod-v007
Fast Rollback


                     api-frontend




   api-usprod-v007                  api-usprod-v008
Fast Rollback


                     api-frontend




   api-usprod-v007                  api-usprod-v008
Fast Rollback


                     api-frontend




   api-usprod-v007                  api-usprod-v008
Fast Rollback


                     api-frontend




   api-usprod-v007
Inventing the Cluster
Inventing the Cluster
 Problem:
 Two ASGs with one function but different names
Inventing the Cluster
 Problem:
 Two ASGs with one function but different names


 Solution:
 Append version number in reserved format
 Parse ASG name to determine long-term “cluster”
Thank you


   @cquinn (@joesondow)
http://www.slideshare.net/carleq
http://techblog.netflix.com
Thank you
Questions?



   @cquinn (@joesondow)
http://www.slideshare.net/carleq
http://techblog.netflix.com

Weitere ähnliche Inhalte

Was ist angesagt?

[AWS Dev Day] 실습워크샵 | 모두를 위한 컴퓨터 비전 딥러닝 툴킷, GluonCV 따라하기
[AWS Dev Day] 실습워크샵 | 모두를 위한 컴퓨터 비전 딥러닝 툴킷, GluonCV 따라하기[AWS Dev Day] 실습워크샵 | 모두를 위한 컴퓨터 비전 딥러닝 툴킷, GluonCV 따라하기
[AWS Dev Day] 실습워크샵 | 모두를 위한 컴퓨터 비전 딥러닝 툴킷, GluonCV 따라하기Amazon Web Services Korea
 
ARC302 AWS Cloud Design Patterns - AWS re: Invent 2012
ARC302 AWS Cloud Design Patterns - AWS re: Invent 2012ARC302 AWS Cloud Design Patterns - AWS re: Invent 2012
ARC302 AWS Cloud Design Patterns - AWS re: Invent 2012Amazon Web Services
 
AWS re:Invent 2016: Scaling Your Web Applications with AWS Elastic Beanstalk ...
AWS re:Invent 2016: Scaling Your Web Applications with AWS Elastic Beanstalk ...AWS re:Invent 2016: Scaling Your Web Applications with AWS Elastic Beanstalk ...
AWS re:Invent 2016: Scaling Your Web Applications with AWS Elastic Beanstalk ...Amazon Web Services
 
SD Forum Java SIG - Running Java Applications On Amazon EC2
SD Forum Java SIG - Running Java Applications On Amazon EC2SD Forum Java SIG - Running Java Applications On Amazon EC2
SD Forum Java SIG - Running Java Applications On Amazon EC2Chris Richardson
 
Deploying, Scaling, and Running Grails on AWS and VPC
Deploying, Scaling, and Running Grails on AWS and VPCDeploying, Scaling, and Running Grails on AWS and VPC
Deploying, Scaling, and Running Grails on AWS and VPCGR8Conf
 
Building CI-CD Pipelines for Serverless Applications
Building CI-CD Pipelines for Serverless ApplicationsBuilding CI-CD Pipelines for Serverless Applications
Building CI-CD Pipelines for Serverless ApplicationsAmazon Web Services
 
Continuous Deployment Practices, with Production, Test and Development Enviro...
Continuous Deployment Practices, with Production, Test and Development Enviro...Continuous Deployment Practices, with Production, Test and Development Enviro...
Continuous Deployment Practices, with Production, Test and Development Enviro...Amazon Web Services
 
AWSome Day, Milan | 5 Marzo 2015 - Contenuto Tecnico (Danilo Poccia - AWS Sol...
AWSome Day, Milan | 5 Marzo 2015 - Contenuto Tecnico (Danilo Poccia - AWS Sol...AWSome Day, Milan | 5 Marzo 2015 - Contenuto Tecnico (Danilo Poccia - AWS Sol...
AWSome Day, Milan | 5 Marzo 2015 - Contenuto Tecnico (Danilo Poccia - AWS Sol...lanfranf
 
Overview of Amazon Web Services
Overview of Amazon Web ServicesOverview of Amazon Web Services
Overview of Amazon Web ServicesHarish Ganesan
 
[AWS Dev Day] 기조연설 – Olivier Klein AWS 신기술 부문 책임자, 정성권 삼성전자 수석
[AWS Dev Day] 기조연설 – Olivier Klein AWS 신기술 부문 책임자, 정성권 삼성전자 수석[AWS Dev Day] 기조연설 – Olivier Klein AWS 신기술 부문 책임자, 정성권 삼성전자 수석
[AWS Dev Day] 기조연설 – Olivier Klein AWS 신기술 부문 책임자, 정성권 삼성전자 수석Amazon Web Services Korea
 
CI/CD with AWS Developer Tools and Fargate
CI/CD with AWS Developer Tools and FargateCI/CD with AWS Developer Tools and Fargate
CI/CD with AWS Developer Tools and FargateAmazon Web Services
 
Introduction to Amazon Web Services - How to Scale your Next Idea on AWS : A ...
Introduction to Amazon Web Services - How to Scale your Next Idea on AWS : A ...Introduction to Amazon Web Services - How to Scale your Next Idea on AWS : A ...
Introduction to Amazon Web Services - How to Scale your Next Idea on AWS : A ...Amazon Web Services
 
Semplificare la gestione dei container con i servizi AWS
Semplificare la gestione dei container con i servizi AWSSemplificare la gestione dei container con i servizi AWS
Semplificare la gestione dei container con i servizi AWSAmazon Web Services
 
AWS and Serverless with Alexa
AWS and Serverless with AlexaAWS and Serverless with Alexa
AWS and Serverless with AlexaRory Preddy
 
Improving your Time to Market with AWS
Improving your Time to Market with AWSImproving your Time to Market with AWS
Improving your Time to Market with AWSAmazon Web Services
 

Was ist angesagt? (20)

[AWS Dev Day] 실습워크샵 | 모두를 위한 컴퓨터 비전 딥러닝 툴킷, GluonCV 따라하기
[AWS Dev Day] 실습워크샵 | 모두를 위한 컴퓨터 비전 딥러닝 툴킷, GluonCV 따라하기[AWS Dev Day] 실습워크샵 | 모두를 위한 컴퓨터 비전 딥러닝 툴킷, GluonCV 따라하기
[AWS Dev Day] 실습워크샵 | 모두를 위한 컴퓨터 비전 딥러닝 툴킷, GluonCV 따라하기
 
ARC302 AWS Cloud Design Patterns - AWS re: Invent 2012
ARC302 AWS Cloud Design Patterns - AWS re: Invent 2012ARC302 AWS Cloud Design Patterns - AWS re: Invent 2012
ARC302 AWS Cloud Design Patterns - AWS re: Invent 2012
 
AWS re:Invent 2016: Scaling Your Web Applications with AWS Elastic Beanstalk ...
AWS re:Invent 2016: Scaling Your Web Applications with AWS Elastic Beanstalk ...AWS re:Invent 2016: Scaling Your Web Applications with AWS Elastic Beanstalk ...
AWS re:Invent 2016: Scaling Your Web Applications with AWS Elastic Beanstalk ...
 
AWS Case Study
AWS Case StudyAWS Case Study
AWS Case Study
 
SD Forum Java SIG - Running Java Applications On Amazon EC2
SD Forum Java SIG - Running Java Applications On Amazon EC2SD Forum Java SIG - Running Java Applications On Amazon EC2
SD Forum Java SIG - Running Java Applications On Amazon EC2
 
Introduction to AWS tools
Introduction to AWS toolsIntroduction to AWS tools
Introduction to AWS tools
 
Deploying, Scaling, and Running Grails on AWS and VPC
Deploying, Scaling, and Running Grails on AWS and VPCDeploying, Scaling, and Running Grails on AWS and VPC
Deploying, Scaling, and Running Grails on AWS and VPC
 
Building CI-CD Pipelines for Serverless Applications
Building CI-CD Pipelines for Serverless ApplicationsBuilding CI-CD Pipelines for Serverless Applications
Building CI-CD Pipelines for Serverless Applications
 
AWS Deployment Best Practices
AWS Deployment Best PracticesAWS Deployment Best Practices
AWS Deployment Best Practices
 
Continuous Deployment Practices, with Production, Test and Development Enviro...
Continuous Deployment Practices, with Production, Test and Development Enviro...Continuous Deployment Practices, with Production, Test and Development Enviro...
Continuous Deployment Practices, with Production, Test and Development Enviro...
 
AWSome Day, Milan | 5 Marzo 2015 - Contenuto Tecnico (Danilo Poccia - AWS Sol...
AWSome Day, Milan | 5 Marzo 2015 - Contenuto Tecnico (Danilo Poccia - AWS Sol...AWSome Day, Milan | 5 Marzo 2015 - Contenuto Tecnico (Danilo Poccia - AWS Sol...
AWSome Day, Milan | 5 Marzo 2015 - Contenuto Tecnico (Danilo Poccia - AWS Sol...
 
Overview of Amazon Web Services
Overview of Amazon Web ServicesOverview of Amazon Web Services
Overview of Amazon Web Services
 
[AWS Dev Day] 기조연설 – Olivier Klein AWS 신기술 부문 책임자, 정성권 삼성전자 수석
[AWS Dev Day] 기조연설 – Olivier Klein AWS 신기술 부문 책임자, 정성권 삼성전자 수석[AWS Dev Day] 기조연설 – Olivier Klein AWS 신기술 부문 책임자, 정성권 삼성전자 수석
[AWS Dev Day] 기조연설 – Olivier Klein AWS 신기술 부문 책임자, 정성권 삼성전자 수석
 
AWS Containers Day.pdf
AWS Containers Day.pdfAWS Containers Day.pdf
AWS Containers Day.pdf
 
CI/CD with AWS Developer Tools and Fargate
CI/CD with AWS Developer Tools and FargateCI/CD with AWS Developer Tools and Fargate
CI/CD with AWS Developer Tools and Fargate
 
Development and Test on AWS
Development and Test on AWSDevelopment and Test on AWS
Development and Test on AWS
 
Introduction to Amazon Web Services - How to Scale your Next Idea on AWS : A ...
Introduction to Amazon Web Services - How to Scale your Next Idea on AWS : A ...Introduction to Amazon Web Services - How to Scale your Next Idea on AWS : A ...
Introduction to Amazon Web Services - How to Scale your Next Idea on AWS : A ...
 
Semplificare la gestione dei container con i servizi AWS
Semplificare la gestione dei container con i servizi AWSSemplificare la gestione dei container con i servizi AWS
Semplificare la gestione dei container con i servizi AWS
 
AWS and Serverless with Alexa
AWS and Serverless with AlexaAWS and Serverless with Alexa
AWS and Serverless with Alexa
 
Improving your Time to Market with AWS
Improving your Time to Market with AWSImproving your Time to Market with AWS
Improving your Time to Market with AWS
 

Andere mochten auch

Turbo-Charge RightNow with Cloud Integration
Turbo-Charge RightNow with Cloud IntegrationTurbo-Charge RightNow with Cloud Integration
Turbo-Charge RightNow with Cloud IntegrationSean O'Connell
 
Assignment 13
Assignment 13Assignment 13
Assignment 13gia1995
 
Art presentation
Art presentationArt presentation
Art presentationatourso
 
исследование функций
исследование функцийисследование функций
исследование функцийkillaruns
 
всеукраїнська акція
всеукраїнська акціявсеукраїнська акція
всеукраїнська акціяpolemic
 
Конкурсный урок
Конкурсный урокКонкурсный урок
Конкурсный урокkillaruns
 
Baile milespowerpoints.com
Baile milespowerpoints.comBaile milespowerpoints.com
Baile milespowerpoints.comlaurayytamara
 
Argentina morewww.Tripmart.com
Argentina   morewww.Tripmart.comArgentina   morewww.Tripmart.com
Argentina morewww.Tripmart.comtripmart
 
Presentazione Eleonora Poli
Presentazione Eleonora PoliPresentazione Eleonora Poli
Presentazione Eleonora Polieleonorapoli
 
Why Marketing Plans are Important to growth
Why Marketing Plans are Important to growthWhy Marketing Plans are Important to growth
Why Marketing Plans are Important to growthCultivation LLC
 

Andere mochten auch (19)

Turbo-Charge RightNow with Cloud Integration
Turbo-Charge RightNow with Cloud IntegrationTurbo-Charge RightNow with Cloud Integration
Turbo-Charge RightNow with Cloud Integration
 
Lisa a leezad_proposal
Lisa a leezad_proposalLisa a leezad_proposal
Lisa a leezad_proposal
 
Assignment 13
Assignment 13Assignment 13
Assignment 13
 
Doc1
Doc1Doc1
Doc1
 
Art presentation
Art presentationArt presentation
Art presentation
 
исследование функций
исследование функцийисследование функций
исследование функций
 
всеукраїнська акція
всеукраїнська акціявсеукраїнська акція
всеукраїнська акція
 
Newspaper analysis 3
Newspaper analysis 3Newspaper analysis 3
Newspaper analysis 3
 
Evaluation Question 6
Evaluation Question 6Evaluation Question 6
Evaluation Question 6
 
Gruppo 8 tirapelle_sean
Gruppo 8 tirapelle_seanGruppo 8 tirapelle_sean
Gruppo 8 tirapelle_sean
 
Конкурсный урок
Конкурсный урокКонкурсный урок
Конкурсный урок
 
Baile milespowerpoints.com
Baile milespowerpoints.comBaile milespowerpoints.com
Baile milespowerpoints.com
 
Argentina morewww.Tripmart.com
Argentina   morewww.Tripmart.comArgentina   morewww.Tripmart.com
Argentina morewww.Tripmart.com
 
Presentazione Eleonora Poli
Presentazione Eleonora PoliPresentazione Eleonora Poli
Presentazione Eleonora Poli
 
Project
ProjectProject
Project
 
Newspaper analysis 3
Newspaper analysis 3Newspaper analysis 3
Newspaper analysis 3
 
John institution q
John institution qJohn institution q
John institution q
 
Why Marketing Plans are Important to growth
Why Marketing Plans are Important to growthWhy Marketing Plans are Important to growth
Why Marketing Plans are Important to growth
 
Productos
ProductosProductos
Productos
 

Ähnlich wie Building for the Cloud @ Netflix

Optimising Productivity with AWS Developer Tools
Optimising Productivity with AWS Developer ToolsOptimising Productivity with AWS Developer Tools
Optimising Productivity with AWS Developer ToolsAmazon Web Services
 
Consuming, providing and publishing Web Services
Consuming, providing and publishing Web ServicesConsuming, providing and publishing Web Services
Consuming, providing and publishing Web ServicesIoannis Baltopoulos
 
SF DevOps: Introducing Vagrant
SF DevOps: Introducing VagrantSF DevOps: Introducing Vagrant
SF DevOps: Introducing VagrantMitchell Hashimoto
 
Cloud Foundry Bootcamp
Cloud Foundry BootcampCloud Foundry Bootcamp
Cloud Foundry BootcampAndy Piper
 
Dockerfy Your CI/CD - DevOpsDays Austin 2014
Dockerfy Your CI/CD - DevOpsDays Austin 2014Dockerfy Your CI/CD - DevOpsDays Austin 2014
Dockerfy Your CI/CD - DevOpsDays Austin 2014DevOpsDays Austin 2014
 
Delivery pipelines at Symphony Talent - Present and Future
Delivery pipelines at Symphony Talent - Present and FutureDelivery pipelines at Symphony Talent - Present and Future
Delivery pipelines at Symphony Talent - Present and FutureNathan Jones
 
Jenkins Pipelining and Gatling Integration
Jenkins Pipelining and  Gatling IntegrationJenkins Pipelining and  Gatling Integration
Jenkins Pipelining and Gatling IntegrationKnoldus Inc.
 
Att lyckas med integration av arbetet från flera scrum team - Christophe Acho...
Att lyckas med integration av arbetet från flera scrum team - Christophe Acho...Att lyckas med integration av arbetet från flera scrum team - Christophe Acho...
Att lyckas med integration av arbetet från flera scrum team - Christophe Acho...manssandstrom
 
Single Sourcing RAP and RCP - Desktop and web clients from a single code base
Single Sourcing RAP and RCP - Desktop and web clients from a single code baseSingle Sourcing RAP and RCP - Desktop and web clients from a single code base
Single Sourcing RAP and RCP - Desktop and web clients from a single code baseRalf Sternberg
 
Architecting for continuous delivery (33rd Degree)
Architecting for continuous delivery (33rd Degree)Architecting for continuous delivery (33rd Degree)
Architecting for continuous delivery (33rd Degree)Axel Fontaine
 
OpenStack Quantum Network Service
OpenStack Quantum Network ServiceOpenStack Quantum Network Service
OpenStack Quantum Network ServiceLew Tucker
 
Cybera - Clouds & other computational frameworks for science
Cybera - Clouds & other computational frameworks for scienceCybera - Clouds & other computational frameworks for science
Cybera - Clouds & other computational frameworks for scienceCybera Inc.
 
Flex Continuous Quality Builds Flex & (Ant || Maven)
Flex Continuous Quality Builds Flex & (Ant || Maven)Flex Continuous Quality Builds Flex & (Ant || Maven)
Flex Continuous Quality Builds Flex & (Ant || Maven)François Le Droff
 
ARC301 Intro to Chaos Monkey & the Simian Army - AWS re: Invent 2012
ARC301 Intro to Chaos Monkey & the Simian Army - AWS re: Invent 2012ARC301 Intro to Chaos Monkey & the Simian Army - AWS re: Invent 2012
ARC301 Intro to Chaos Monkey & the Simian Army - AWS re: Invent 2012Amazon Web Services
 
Designing a play framework application
Designing a play framework applicationDesigning a play framework application
Designing a play framework applicationVulcanMinds
 
Software Testen mit Visual Studio Lab Management
Software Testen mit Visual Studio Lab ManagementSoftware Testen mit Visual Studio Lab Management
Software Testen mit Visual Studio Lab ManagementNico Orschel
 

Ähnlich wie Building for the Cloud @ Netflix (20)

Optimising Productivity with AWS Developer Tools
Optimising Productivity with AWS Developer ToolsOptimising Productivity with AWS Developer Tools
Optimising Productivity with AWS Developer Tools
 
Manen Ant SVN
Manen Ant SVNManen Ant SVN
Manen Ant SVN
 
Consuming, providing and publishing Web Services
Consuming, providing and publishing Web ServicesConsuming, providing and publishing Web Services
Consuming, providing and publishing Web Services
 
SF DevOps: Introducing Vagrant
SF DevOps: Introducing VagrantSF DevOps: Introducing Vagrant
SF DevOps: Introducing Vagrant
 
Cloud Foundry Bootcamp
Cloud Foundry BootcampCloud Foundry Bootcamp
Cloud Foundry Bootcamp
 
Dockerfy Your CI/CD - DevOpsDays Austin 2014
Dockerfy Your CI/CD - DevOpsDays Austin 2014Dockerfy Your CI/CD - DevOpsDays Austin 2014
Dockerfy Your CI/CD - DevOpsDays Austin 2014
 
Delivery pipelines at Symphony Talent - Present and Future
Delivery pipelines at Symphony Talent - Present and FutureDelivery pipelines at Symphony Talent - Present and Future
Delivery pipelines at Symphony Talent - Present and Future
 
Jenkins Pipelining and Gatling Integration
Jenkins Pipelining and  Gatling IntegrationJenkins Pipelining and  Gatling Integration
Jenkins Pipelining and Gatling Integration
 
Project Zero Php Quebec
Project Zero Php QuebecProject Zero Php Quebec
Project Zero Php Quebec
 
Att lyckas med integration av arbetet från flera scrum team - Christophe Acho...
Att lyckas med integration av arbetet från flera scrum team - Christophe Acho...Att lyckas med integration av arbetet från flera scrum team - Christophe Acho...
Att lyckas med integration av arbetet från flera scrum team - Christophe Acho...
 
Single Sourcing RAP and RCP - Desktop and web clients from a single code base
Single Sourcing RAP and RCP - Desktop and web clients from a single code baseSingle Sourcing RAP and RCP - Desktop and web clients from a single code base
Single Sourcing RAP and RCP - Desktop and web clients from a single code base
 
Architecting for continuous delivery (33rd Degree)
Architecting for continuous delivery (33rd Degree)Architecting for continuous delivery (33rd Degree)
Architecting for continuous delivery (33rd Degree)
 
OpenStack Quantum Network Service
OpenStack Quantum Network ServiceOpenStack Quantum Network Service
OpenStack Quantum Network Service
 
Cybera - Clouds & other computational frameworks for science
Cybera - Clouds & other computational frameworks for scienceCybera - Clouds & other computational frameworks for science
Cybera - Clouds & other computational frameworks for science
 
Flex Continuous Quality Builds Flex & (Ant || Maven)
Flex Continuous Quality Builds Flex & (Ant || Maven)Flex Continuous Quality Builds Flex & (Ant || Maven)
Flex Continuous Quality Builds Flex & (Ant || Maven)
 
ARC301 Intro to Chaos Monkey & the Simian Army - AWS re: Invent 2012
ARC301 Intro to Chaos Monkey & the Simian Army - AWS re: Invent 2012ARC301 Intro to Chaos Monkey & the Simian Army - AWS re: Invent 2012
ARC301 Intro to Chaos Monkey & the Simian Army - AWS re: Invent 2012
 
Crx 2.2 Deep-Dive
Crx 2.2 Deep-DiveCrx 2.2 Deep-Dive
Crx 2.2 Deep-Dive
 
Designing a play framework application
Designing a play framework applicationDesigning a play framework application
Designing a play framework application
 
Software Testen mit Visual Studio Lab Management
Software Testen mit Visual Studio Lab ManagementSoftware Testen mit Visual Studio Lab Management
Software Testen mit Visual Studio Lab Management
 
Project Zero JavaOne 2008
Project Zero JavaOne 2008Project Zero JavaOne 2008
Project Zero JavaOne 2008
 

Kürzlich hochgeladen

SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 

Kürzlich hochgeladen (20)

SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 

Building for the Cloud @ Netflix

  • 1. Building for the Cloud @ Netflix @cquinn #netflixcloud (@joesondow)
  • 2. Who Am I? Manager Engineering Tools team @ Netflix Automated build tools and systems Base machine image definition and maintenance Application machine image baking Netflix Application Console: deploy and manage
  • 3. Why Cloud? Why AWS? We can’t build datacenters fast enough We want to use Clouds, not build them Leverage AWS Scale “the biggest public cloud” Leverage AWS Features “two years ahead of the rest”
  • 4. Legacy Website Mostly one Monolithic Java Web App Single Big Oracle DB Dedicated Data Center Machines
  • 5. Old School Build & Deploy Datacenter LB Push traffic control WebCM app bundle: war + config Website Website Website Website Dat Website Website aba se u Website Website pda tes Website Website Website Custom Perl web app: Oracle build, deploy & manage Manually configured: Linux, Apache, Tomcat
  • 6. Path to AWS Building newly refactored Java Web Services Baking (assembling) ec2 Amazon Machine Images Deploying and Managing Service Clusters
  • 8. Step One: Componentize Ant targets Workstation sync test build release source checkin library jars Perforce jars used in app builds
  • 9. Step Two: Automate Ant targets Hudson sync test build release app bundles source, jars checkin library jars Perforce jars used in app builds
  • 10. Step Three: Full Pipeline app bundles Artifactory Ivy snapshot / release libraries libraries / apps Jenkins resolve test publish sync compile build report source some Groovy Perforce Ant targets Gradle coming
  • 11. Step Three: Full Pipeline app bundles Artifactory Ivy snapshot / release libraries libraries / apps Jenkins resolve test publish sync compile build report source some Groovy Perforce Ant targets Gradle coming
  • 12. build.xml <project name="helloworld"> <import file="../../../Tools/build/webapplication.xml"/> </project> ivy.xml <info organisation="netflix" module="helloworld"> <publications> <artifact name="helloworld" type="package" e:classifier="package" ext="tgz"/> <artifact name="helloworld" type="javadoc" e:classifier="javadoc" ext="jar"/> </publications> <dependencies> <dependency org="netflix" name="resourceregistry" rev="latest.${input.status}" conf="compile"/> <dependency org="netflix" name="platform" rev="latest.${input.status}" conf="compile" /> ...
  • 13. build.gradle apply plugin: 'nebula' group = 'netflix' artifacts { archives package archives javadocJar } dependencies { compile( [group: 'netflix', name: 'resourceregistry', version: 'latest.release'], [group: 'netflix', name: 'platform', version: 'latest.release'], ...
  • 14. Step Three: Full Pipeline app bundles Artifactory Ivy snapshot / release libraries libraries / apps Jenkins resolve test publish sync compile build report source some Groovy Perforce Ant targets Gradle coming
  • 15. Step Three: Full Pipeline app bundles Artifactory Ivy snapshot / release libraries libraries / apps Jenkins resolve test publish sync compile build report source some Groovy Perforce Ant targets Gradle coming
  • 16. App Artifacts app bundles Jenkins Master Slave Slave Slave Slave Slave Slave Slave AWS us-west-1 VPC
  • 17. App Artifacts app bundles Yum Jenkins Master app bundle RPMs Slave Slave Slave Slave Slave Slave Slave AWS us-west-1 VPC
  • 18. App Artifacts app bundles Artifactory app bundle artifacts Yum Jenkins Master app bundle RPMs Slave Slave Slave Slave Slave Slave Slave AWS us-west-1 VPC
  • 19. App Artifacts app bundles Artifactory app bundle artifacts Yum Jenkins Master app bundle RPMs Slave Slave Slave Slave Slave Slave Slave AWS us-west-1 VPC
  • 23. Why bake? Traditional: •launch OS Generic AMI •install packages Instance •install app
  • 24. Why bake? Traditional: •launch OS Generic AMI •install packages Instance •install app
  • 25. Why bake? Traditional: •launch OS Generic AMI •install packages Instance •install app
  • 26. Why bake? Traditional: •launch OS Generic AMI •install packages Instance •install app Netflix: •launch OS+app
  • 27. Why bake? Traditional: •launch OS Generic AMI •install packages Instance •install app Netflix: •launch OS+app App AMI Instance
  • 28. Base Image Baking S3 / EBS foundation AMI Linux: CentOS, Fedora, Ubuntu Yum / Apt install AWS
  • 29. Base Image Baking S3 / EBS foundation AMI Linux: CentOS, Fedora, Ubuntu mount Yum / Apt RPMs: Apache, Java... Bakery install AWS ec2 slave instances
  • 30. Base Image Baking S3 / EBS foundation AMI base Linux: CentOS, Fedora, Ubuntu AMI snapshot mount Yum / Apt RPMs: Apache, Java... Bakery install AWS ec2 slave instances
  • 31. Base Image Baking S3 / EBS foundation AMI base Linux: CentOS, Fedora, Ubuntu AMI snapshot mount Ready Yum / for Apt RPMs: Apache, Java... Bakery app install bake AWS ec2 slave instances
  • 32. App Image Baking S3 / EBS base AMI Linux, Apache, Java, Tomcat Jenkins / Yum / install Artifactory AWS
  • 33. App Image Baking S3 / EBS base AMI Linux, Apache, Java, Tomcat mount Jenkins / Yum / app bundle Bakery install Artifactory AWS ec2 slave instances
  • 34. App Image Baking S3 / EBS base AMI app Linux, Apache, Java, Tomcat AMI snapshot mount Jenkins / Yum / app bundle Bakery install Artifactory AWS ec2 slave instances
  • 35. App Image Baking S3 / EBS base AMI app Linux, Apache, Java, Tomcat AMI snapshot mount Jenkins / Ready to launch Yum / app bundle Bakery install Artifactory AWS ec2 slave instances
  • 39. Cloud deployment model Auto Scaling Group
  • 40. Cloud deployment model Auto Scaling Group Launch Configuration
  • 41. Cloud deployment model Elastic Load Balancer Auto Scaling Group Launch Configuration
  • 42. Cloud deployment model Elastic Load Balancer Auto Scaling Group Launch Configuration Amazon Machine Image
  • 43. Cloud deployment model Elastic Load Balancer Auto Scaling Group Security Group Launch Configuration Amazon Machine Image
  • 44. Cloud deployment model Elastic Load Balancer Auto Scaling Group Security Instances Group Launch Configuration Amazon Machine Image
  • 45. Cloud deployment model Elastic Load Balancer Auto Scaling Group Security Instances Group Launch Configuration Amazon Machine Image
  • 46. Cloud deployment model Elastic Load Balancer Auto Scaling Group Security Instances Group Launch Configuration Amazon Machine Image
  • 47. Cloud deployment model Elastic Load Balancer Auto Scaling Group Security Instances Group Launch Configuration Amazon Machine Image
  • 51. Cloud deployment model Ratings API Search
  • 52. Cloud deployment model Streaming Starts Ratings API Search
  • 53. Cloud deployment model Streaming Starts Ratings API Search Autocomplete
  • 54. Cloud deployment model Sign Up Streaming Starts Ratings API Search Autocomplete
  • 55. Cloud deployment model Sign Up Streaming Starts Ratings Application Application Application API Search Autocomplete Application Application Application
  • 57. Inventing the Application Problem: Application is not an Amazon concept
  • 58. Inventing the Application Problem: Application is not an Amazon concept Solution: Create an Application domain in SimpleDB Enforce naming conventions on Amazon objects
  • 61. Fast Rollback Optimism causes outages Production traffic is unique
  • 62. Fast Rollback Optimism causes outages Production traffic is unique Keep old version running
  • 63. Fast Rollback Optimism causes outages Production traffic is unique Keep old version running Switch traffic to new version
  • 64. Fast Rollback Optimism causes outages Production traffic is unique Keep old version running Switch traffic to new version Monitor results
  • 65. Fast Rollback Optimism causes outages Production traffic is unique Keep old version running Switch traffic to new version Monitor results Revert traffic quickly
  • 67. Fast Rollback api-frontend api-usprod-v007
  • 68. Fast Rollback api-frontend api-usprod-v007 api-usprod-v008
  • 69. Fast Rollback api-frontend api-usprod-v007 api-usprod-v008
  • 70. Fast Rollback api-frontend api-usprod-v007 api-usprod-v008
  • 71. Fast Rollback api-frontend api-usprod-v007 api-usprod-v008
  • 72. Fast Rollback api-frontend api-usprod-v008
  • 74. Fast Rollback api-frontend api-usprod-v007
  • 75. Fast Rollback api-frontend api-usprod-v007 api-usprod-v008
  • 76. Fast Rollback api-frontend api-usprod-v007 api-usprod-v008
  • 77. Fast Rollback api-frontend api-usprod-v007 api-usprod-v008
  • 78. Fast Rollback api-frontend api-usprod-v007
  • 80. Inventing the Cluster Problem: Two ASGs with one function but different names
  • 81. Inventing the Cluster Problem: Two ASGs with one function but different names Solution: Append version number in reserved format Parse ASG name to determine long-term “cluster”
  • 82. Thank you @cquinn (@joesondow) http://www.slideshare.net/carleq http://techblog.netflix.com
  • 83. Thank you Questions? @cquinn (@joesondow) http://www.slideshare.net/carleq http://techblog.netflix.com

Hinweis der Redaktion

  1. Abstract: Netflix has moved its production services from being completely datacenter-based, to being primarily cloud-based in a little over a year. This talk will briefly explain why we did it and why we chose Amazon&apos;s AWS. The talk will then delve into the evolution of our build and deployment architecture, starting with how our original monolithic DC-based SQL-tied webapp was built and deployed, and then detailing the evolution of our continuous integration systems which helped prepare us for the cloud move. And finally, it will cover our current full build pipeline and deployment system which keeps us agile in the cloud now by providing quick turnaround, and rapid roll-out and recovery.\n\n
  2. I manage the Engineering Tools team at Netflix. We are all about creating tools and systems for our software engineers to use to build, test and deploy their apps to the cloud. (and DC too :)\n\n
  3. Q: Why did we choose to move to the cloud?\nA: We found that as our rate of growth was growing, we were unable to predict how fast we would need new capacity, and our lead times were too long to keep up if things really took off. We also liked the idea of providing a cloud-like infrastructure to enable our individual engineering teams to be as agile and productive as possible. Since we also knew that we didn&amp;#x2019;t want to become a cloud provider, we decided to leverage a 3rd party cloud solution.\n\nQ: Why did we choose Amazon AWS?\nA: We didn&amp;#x2019;t want to be the big fish in a little pond&amp;#x2014;we wanted to be a medium fish in a big pond. AWS is the largest public cloud around and is the only place we could be smaller than a big fish. Also, we didn&amp;#x2019;t want to re-invent a lot of infrastructure, so we are making use of a number of AWS services like auto-scaling, simpleDB, elastic load balancing, etc. AWS is at least two years ahead of the closest competition in this area.\n\n
  4. A little background about where we were coming from. We were originally one big monolithic Java webapp on a couple hundred machines in a local DC with a single big Oracle database behind it. All these machines were individual dedicated hardware boxes. (IBM Power6 with RedHat + JDK 5) Our IT department managed the DC, hardware, networking, security, machine setup and provisioning.\n\nIn the last year before the cloud move, we began refactoring the big webapp into middle-tier services, and IT introduced VMWare to manage new machine, but machine configuration was still very manual.\n\n
  5. A rough picture of our old world:\n\nWe had a bi-weekly push cycle, with a fixed calendar for the year. Alternating weeks were database pushes, then code pushes.\n\nOur &amp;#x201C;WebCM&amp;#x201D; tool was a big mess of Perl that did everything for everyone. Builds, database pushes, netscaler control, code pushes, etc. Very brittle.\n\nNew app additions required code change to this tool, and often ran into the brittle areas.\n\n
  6. What did we need to do to get to the cloud?\n\nEach individual product team was responsible for refactoring their functionality into a webservice, often times including shared libraries (jars).\n\nMy team was responsible for creating a set of easy to use tools to simplify and automate the build of the applications and shared libraries.\n\nWe also were responsible for building the base machine image, and creating the architecture for automating the assembly (aka baking) of the individual application images.\n\nAnd, we also were responsible for building the web-based tool which is used to deploy and manage the application clusters.\n
  7. Let&amp;#x2019;s step back and take a look at the evolution of our build system, from the old ad-hoc Ant scripts to where we are today.\n
  8. Step one: Collect underpants. Pretty much.\n\nThe first step that we made, even pre-cloud, was to carve out common code into libraries that could be shared across apps. This enabled the middle-tier teams migrate out of the big webapp, and still share code with them.\n\nAt the same time, we collected all of the common Ant scripts into a single central package that could be used to build different kinds of libraries and apps.\n\nAlas, most of these libraries were built on developer workstations, and our mechanism for library sharing was to check the jars back into SCM (Perforce).\n\n
  9. Step two: ?\n\nThe next step was to get this all on a continuous integration server. We picked Hudson because it was very feature rich, extensible, and had an active community. Now we at least had visibility into what was going on, and less worry about dirty builds published from developer machines.\n\nWe also began to add a lot of build metadata to the manifests so that we could retroactively figure out where things came from even before our whole pipeline had traceability.\n\nAnd, we were also able to publish application artifacts on the Jenkins Job/build pages via archive artifacts. This helped us transition the DC deployment tool to use Jenkins for all of its builds.\n\n
  10. Step three: Profit!\n\nThis is where we stopped checking library jars into SCM and started publishing them to Artifactory. This also gave us access to the build metadata and allowed us to add Ivy to Ant to abstract the build and runtime jars into a dynamic dependency graph. So each project only had to know about its immediate dependencies.\n\nWe were then also able to start treating application artifacts like library artifacts and publish them to Artifactory as well.\n\n
  11. Step three: Profit!\n\nThis is where we stopped checking library jars into SCM and started publishing them to Artifactory. This also gave us access to the build metadata and allowed us to add Ivy to Ant to abstract the build and runtime jars into a dynamic dependency graph. So each project only had to know about its immediate dependencies.\n\nWe were then also able to start treating application artifacts like library artifacts and publish them to Artifactory as well.\n\n
  12. Step three: Profit!\n\nThis is where we stopped checking library jars into SCM and started publishing them to Artifactory. This also gave us access to the build metadata and allowed us to add Ivy to Ant to abstract the build and runtime jars into a dynamic dependency graph. So each project only had to know about its immediate dependencies.\n\nWe were then also able to start treating application artifacts like library artifacts and publish them to Artifactory as well.\n\n
  13. Here is most of a typical project&amp;#x2019;s Ant and Ivy files. You can see the Ant code simply pulls in one of the standard framework entry points like, library, webapplication, etc. \n\nThen the Ivy file specifies what needs to get built and what are the dependencies. We have some extra Groovy code added to our Ant scripts that can drive Ant targets based on the Ivy artifact definitions. This helps make the build definition declarative and yet flexible.\n\nYes, XML makes your eyes bleed, and there is a lot of redundancy here. But at least it&amp;#x2019;s small and manageable.\n\n
  14. Since we were already using Ant and Ivy, and had already incorporated groovy, it is/was a fairly small step to migrate our common build framework to Gradle.\n\nNow we have something lean and mean and clean. Nebula is our &amp;#x201C;Netflix Build Language&amp;#x201D; and is really just a Gradle plugin that provides a bunch of default configuration, customizes standard Gradle Java and other tasks, and defines some additional tasks.\n\n
  15. OK, back to the build pipeline again. We have a vague &amp;#x201C;app bundles&amp;#x201D; output in this diagram.\nLet&amp;#x2019;s delve into how we manage the application bundle artifacts in more detail.\n\n\n
  16. Here is a simplified picture of what the flow looks like at the tail end of the build for getting the application artifacts ready for baking.\n\nThe first generation approach is to treat them like system packages and just package them up into RPMs, and post those to our Yum repo. (We actually scp them into an incoming dir which is then scanned by a daemon which adds the new RPMs to the repo and builds its index). This is problematic due to rpmbuild being RedHat/CentOS/Fedora specific and very brittle even across those distros and versions. It also means that we have to use build slaves with version matching the final production OS version, or we have to be really careful writing spec files.\n\nOur newer approach is to treat app bundles like the other build artifacts. Wrap all the the app files up into a simple archive, like .zip or .tgz, include a BOM file and just publish it to an app repo in Artifactory. We&amp;#x2019;ll then let the bakery unpack the bundles when it assembles the image.\n\n
  17. Here is a simplified picture of what the flow looks like at the tail end of the build for getting the application artifacts ready for baking.\n\nThe first generation approach is to treat them like system packages and just package them up into RPMs, and post those to our Yum repo. (We actually scp them into an incoming dir which is then scanned by a daemon which adds the new RPMs to the repo and builds its index). This is problematic due to rpmbuild being RedHat/CentOS/Fedora specific and very brittle even across those distros and versions. It also means that we have to use build slaves with version matching the final production OS version, or we have to be really careful writing spec files.\n\nOur newer approach is to treat app bundles like the other build artifacts. Wrap all the the app files up into a simple archive, like .zip or .tgz, include a BOM file and just publish it to an app repo in Artifactory. We&amp;#x2019;ll then let the bakery unpack the bundles when it assembles the image.\n\n
  18. Here is a simplified picture of what the flow looks like at the tail end of the build for getting the application artifacts ready for baking.\n\nThe first generation approach is to treat them like system packages and just package them up into RPMs, and post those to our Yum repo. (We actually scp them into an incoming dir which is then scanned by a daemon which adds the new RPMs to the repo and builds its index). This is problematic due to rpmbuild being RedHat/CentOS/Fedora specific and very brittle even across those distros and versions. It also means that we have to use build slaves with version matching the final production OS version, or we have to be really careful writing spec files.\n\nOur newer approach is to treat app bundles like the other build artifacts. Wrap all the the app files up into a simple archive, like .zip or .tgz, include a BOM file and just publish it to an app repo in Artifactory. We&amp;#x2019;ll then let the bakery unpack the bundles when it assembles the image.\n\n
  19. No, not the Qwikster kind of baked.\n\nBaking is where we pre-assemble complete and ready-to-launch machine images for each app.\n\n
  20. So, why do we bake custom images instead of just using Puppet or Chef to deploy packages dynamically to launched generic machines?\n\nWe like to front-load the full machine assembly to build time, instead of waiting until deployment time. We do this because:\n&amp;#x2022; More Reliable: less systems that can fail at deploy time right when we need them most.\n&amp;#x2022; Faster Launch: means quicker reaction to load increases, e.g. autoscaling up can be more precise.\n&amp;#x2022; Single image: produces exactly homogeneous clusters. No file/package version skew across machines in a cluster\n\n
  21. So, why do we bake custom images instead of just using Puppet or Chef to deploy packages dynamically to launched generic machines?\n\nWe like to front-load the full machine assembly to build time, instead of waiting until deployment time. We do this because:\n&amp;#x2022; More Reliable: less systems that can fail at deploy time right when we need them most.\n&amp;#x2022; Faster Launch: means quicker reaction to load increases, e.g. autoscaling up can be more precise.\n&amp;#x2022; Single image: produces exactly homogeneous clusters. No file/package version skew across machines in a cluster\n\n
  22. So, why do we bake custom images instead of just using Puppet or Chef to deploy packages dynamically to launched generic machines?\n\nWe like to front-load the full machine assembly to build time, instead of waiting until deployment time. We do this because:\n&amp;#x2022; More Reliable: less systems that can fail at deploy time right when we need them most.\n&amp;#x2022; Faster Launch: means quicker reaction to load increases, e.g. autoscaling up can be more precise.\n&amp;#x2022; Single image: produces exactly homogeneous clusters. No file/package version skew across machines in a cluster\n\n
  23. So, why do we bake custom images instead of just using Puppet or Chef to deploy packages dynamically to launched generic machines?\n\nWe like to front-load the full machine assembly to build time, instead of waiting until deployment time. We do this because:\n&amp;#x2022; More Reliable: less systems that can fail at deploy time right when we need them most.\n&amp;#x2022; Faster Launch: means quicker reaction to load increases, e.g. autoscaling up can be more precise.\n&amp;#x2022; Single image: produces exactly homogeneous clusters. No file/package version skew across machines in a cluster\n\n
  24. So, why do we bake custom images instead of just using Puppet or Chef to deploy packages dynamically to launched generic machines?\n\nWe like to front-load the full machine assembly to build time, instead of waiting until deployment time. We do this because:\n&amp;#x2022; More Reliable: less systems that can fail at deploy time right when we need them most.\n&amp;#x2022; Faster Launch: means quicker reaction to load increases, e.g. autoscaling up can be more precise.\n&amp;#x2022; Single image: produces exactly homogeneous clusters. No file/package version skew across machines in a cluster\n\n
  25. So, why do we bake custom images instead of just using Puppet or Chef to deploy packages dynamically to launched generic machines?\n\nWe like to front-load the full machine assembly to build time, instead of waiting until deployment time. We do this because:\n&amp;#x2022; More Reliable: less systems that can fail at deploy time right when we need them most.\n&amp;#x2022; Faster Launch: means quicker reaction to load increases, e.g. autoscaling up can be more precise.\n&amp;#x2022; Single image: produces exactly homogeneous clusters. No file/package version skew across machines in a cluster\n\n
  26. So, why do we bake custom images instead of just using Puppet or Chef to deploy packages dynamically to launched generic machines?\n\nWe like to front-load the full machine assembly to build time, instead of waiting until deployment time. We do this because:\n&amp;#x2022; More Reliable: less systems that can fail at deploy time right when we need them most.\n&amp;#x2022; Faster Launch: means quicker reaction to load increases, e.g. autoscaling up can be more precise.\n&amp;#x2022; Single image: produces exactly homogeneous clusters. No file/package version skew across machines in a cluster\n\n
  27. So, why do we bake custom images instead of just using Puppet or Chef to deploy packages dynamically to launched generic machines?\n\nWe like to front-load the full machine assembly to build time, instead of waiting until deployment time. We do this because:\n&amp;#x2022; More Reliable: less systems that can fail at deploy time right when we need them most.\n&amp;#x2022; Faster Launch: means quicker reaction to load increases, e.g. autoscaling up can be more precise.\n&amp;#x2022; Single image: produces exactly homogeneous clusters. No file/package version skew across machines in a cluster\n\n
  28. So, why do we bake custom images instead of just using Puppet or Chef to deploy packages dynamically to launched generic machines?\n\nWe like to front-load the full machine assembly to build time, instead of waiting until deployment time. We do this because:\n&amp;#x2022; More Reliable: less systems that can fail at deploy time right when we need them most.\n&amp;#x2022; Faster Launch: means quicker reaction to load increases, e.g. autoscaling up can be more precise.\n&amp;#x2022; Single image: produces exactly homogeneous clusters. No file/package version skew across machines in a cluster\n\n
  29. So, why do we bake custom images instead of just using Puppet or Chef to deploy packages dynamically to launched generic machines?\n\nWe like to front-load the full machine assembly to build time, instead of waiting until deployment time. We do this because:\n&amp;#x2022; More Reliable: less systems that can fail at deploy time right when we need them most.\n&amp;#x2022; Faster Launch: means quicker reaction to load increases, e.g. autoscaling up can be more precise.\n&amp;#x2022; Single image: produces exactly homogeneous clusters. No file/package version skew across machines in a cluster\n\n
  30. So, why do we bake custom images instead of just using Puppet or Chef to deploy packages dynamically to launched generic machines?\n\nWe like to front-load the full machine assembly to build time, instead of waiting until deployment time. We do this because:\n&amp;#x2022; More Reliable: less systems that can fail at deploy time right when we need them most.\n&amp;#x2022; Faster Launch: means quicker reaction to load increases, e.g. autoscaling up can be more precise.\n&amp;#x2022; Single image: produces exactly homogeneous clusters. No file/package version skew across machines in a cluster\n\n
  31. So, why do we bake custom images instead of just using Puppet or Chef to deploy packages dynamically to launched generic machines?\n\nWe like to front-load the full machine assembly to build time, instead of waiting until deployment time. We do this because:\n&amp;#x2022; More Reliable: less systems that can fail at deploy time right when we need them most.\n&amp;#x2022; Faster Launch: means quicker reaction to load increases, e.g. autoscaling up can be more precise.\n&amp;#x2022; Single image: produces exactly homogeneous clusters. No file/package version skew across machines in a cluster\n\n
  32. So, why do we bake custom images instead of just using Puppet or Chef to deploy packages dynamically to launched generic machines?\n\nWe like to front-load the full machine assembly to build time, instead of waiting until deployment time. We do this because:\n&amp;#x2022; More Reliable: less systems that can fail at deploy time right when we need them most.\n&amp;#x2022; Faster Launch: means quicker reaction to load increases, e.g. autoscaling up can be more precise.\n&amp;#x2022; Single image: produces exactly homogeneous clusters. No file/package version skew across machines in a cluster\n\n
  33. So, why do we bake custom images instead of just using Puppet or Chef to deploy packages dynamically to launched generic machines?\n\nWe like to front-load the full machine assembly to build time, instead of waiting until deployment time. We do this because:\n&amp;#x2022; More Reliable: less systems that can fail at deploy time right when we need them most.\n&amp;#x2022; Faster Launch: means quicker reaction to load increases, e.g. autoscaling up can be more precise.\n&amp;#x2022; Single image: produces exactly homogeneous clusters. No file/package version skew across machines in a cluster\n\n
  34. So, why do we bake custom images instead of just using Puppet or Chef to deploy packages dynamically to launched generic machines?\n\nWe like to front-load the full machine assembly to build time, instead of waiting until deployment time. We do this because:\n&amp;#x2022; More Reliable: less systems that can fail at deploy time right when we need them most.\n&amp;#x2022; Faster Launch: means quicker reaction to load increases, e.g. autoscaling up can be more precise.\n&amp;#x2022; Single image: produces exactly homogeneous clusters. No file/package version skew across machines in a cluster\n\n
  35. The first step of the baking process is to create the &amp;#x201C;base&amp;#x201D; image that we will use for baking all app images. This is done once every week or two.\n\nWe start with a standard Linux distro as a foundation (CentOS now, Ubuntu on the way), and add in our favorite, our custom and customized packages:\n&amp;#x2022; Apache, Java (JDK 6 and 7), Tomcat, Perl, Python, provisioning and startup scripts, log management tools, monitoring agents, etc.\n\nThe end result is a beefed-up OS image that is ready to go, and just needs an app added.\n\n
  36. The first step of the baking process is to create the &amp;#x201C;base&amp;#x201D; image that we will use for baking all app images. This is done once every week or two.\n\nWe start with a standard Linux distro as a foundation (CentOS now, Ubuntu on the way), and add in our favorite, our custom and customized packages:\n&amp;#x2022; Apache, Java (JDK 6 and 7), Tomcat, Perl, Python, provisioning and startup scripts, log management tools, monitoring agents, etc.\n\nThe end result is a beefed-up OS image that is ready to go, and just needs an app added.\n\n
  37. The first step of the baking process is to create the &amp;#x201C;base&amp;#x201D; image that we will use for baking all app images. This is done once every week or two.\n\nWe start with a standard Linux distro as a foundation (CentOS now, Ubuntu on the way), and add in our favorite, our custom and customized packages:\n&amp;#x2022; Apache, Java (JDK 6 and 7), Tomcat, Perl, Python, provisioning and startup scripts, log management tools, monitoring agents, etc.\n\nThe end result is a beefed-up OS image that is ready to go, and just needs an app added.\n\n
  38. App images are baked in a high-speed bakery cluster, and each AWS region (Virginia, California, Oregon, Ireland) has a cluster with a handful of bakery instances.\n\nBase images are pre-mounted as EBS volumes, with a pool of multiple mounts per bakery instance.\nFor each app build the bakery does these things:\n&amp;#x2022; One base volume is grabbed from the pool\n&amp;#x2022; An app bundle is pushed or pulled to the bakery and then provisioned onto the image volume.\n&amp;#x2022; Currently pushing RPMs to YUM repo &amp; pulling them from bakery with yum install.\n&amp;#x2022; The new way is to publish tarballs to Artifactory and pull them from bakery with wget and \n&amp;#x2022; The EBS volume is then snapshotted, and the EBS snapshot is registered as an AMI.\n&amp;#x2022; The volume is detached and a new clean base reattached in its place\n\nLater, unused and obsolete AMIs get cleaned up by the Janitor monkey \n\n
  39. App images are baked in a high-speed bakery cluster, and each AWS region (Virginia, California, Oregon, Ireland) has a cluster with a handful of bakery instances.\n\nBase images are pre-mounted as EBS volumes, with a pool of multiple mounts per bakery instance.\nFor each app build the bakery does these things:\n&amp;#x2022; One base volume is grabbed from the pool\n&amp;#x2022; An app bundle is pushed or pulled to the bakery and then provisioned onto the image volume.\n&amp;#x2022; Currently pushing RPMs to YUM repo &amp; pulling them from bakery with yum install.\n&amp;#x2022; The new way is to publish tarballs to Artifactory and pull them from bakery with wget and \n&amp;#x2022; The EBS volume is then snapshotted, and the EBS snapshot is registered as an AMI.\n&amp;#x2022; The volume is detached and a new clean base reattached in its place\n\nLater, unused and obsolete AMIs get cleaned up by the Janitor monkey \n\n
  40. App images are baked in a high-speed bakery cluster, and each AWS region (Virginia, California, Oregon, Ireland) has a cluster with a handful of bakery instances.\n\nBase images are pre-mounted as EBS volumes, with a pool of multiple mounts per bakery instance.\nFor each app build the bakery does these things:\n&amp;#x2022; One base volume is grabbed from the pool\n&amp;#x2022; An app bundle is pushed or pulled to the bakery and then provisioned onto the image volume.\n&amp;#x2022; Currently pushing RPMs to YUM repo &amp; pulling them from bakery with yum install.\n&amp;#x2022; The new way is to publish tarballs to Artifactory and pull them from bakery with wget and \n&amp;#x2022; The EBS volume is then snapshotted, and the EBS snapshot is registered as an AMI.\n&amp;#x2022; The volume is detached and a new clean base reattached in its place\n\nLater, unused and obsolete AMIs get cleaned up by the Janitor monkey \n\n
  41. \n
  42. \n
  43. Now that we have all these pre-baked application machine images, what do we do with them?\n\nWe use the standard AWS architecture, plus add just a couple of light abstractions on top to help us manage things.\n\n
  44. Now that we have all these pre-baked application machine images, what do we do with them?\n\nWe use the standard AWS architecture, plus add just a couple of light abstractions on top to help us manage things.\n\n
  45. Here is an overview of the AWS architectural model, and the way that we use it to create applications and clusters. Each of the items here exists as an entity in the AWS model and can be created, named, listed and modified using the Amazon AWS APIs.\n\nThe heart of our cluster is the Auto Scaling Group (ASG), which is where we define the image to launch, how many instances we want, and what security and network routing they should have. The Elastic Load Balancer (ELB) is used for front-end traffic only, and thus not needed for middle-tier services.\n\n
  46. Here is an overview of the AWS architectural model, and the way that we use it to create applications and clusters. Each of the items here exists as an entity in the AWS model and can be created, named, listed and modified using the Amazon AWS APIs.\n\nThe heart of our cluster is the Auto Scaling Group (ASG), which is where we define the image to launch, how many instances we want, and what security and network routing they should have. The Elastic Load Balancer (ELB) is used for front-end traffic only, and thus not needed for middle-tier services.\n\n
  47. Here is an overview of the AWS architectural model, and the way that we use it to create applications and clusters. Each of the items here exists as an entity in the AWS model and can be created, named, listed and modified using the Amazon AWS APIs.\n\nThe heart of our cluster is the Auto Scaling Group (ASG), which is where we define the image to launch, how many instances we want, and what security and network routing they should have. The Elastic Load Balancer (ELB) is used for front-end traffic only, and thus not needed for middle-tier services.\n\n
  48. Here is an overview of the AWS architectural model, and the way that we use it to create applications and clusters. Each of the items here exists as an entity in the AWS model and can be created, named, listed and modified using the Amazon AWS APIs.\n\nThe heart of our cluster is the Auto Scaling Group (ASG), which is where we define the image to launch, how many instances we want, and what security and network routing they should have. The Elastic Load Balancer (ELB) is used for front-end traffic only, and thus not needed for middle-tier services.\n\n
  49. Here is an overview of the AWS architectural model, and the way that we use it to create applications and clusters. Each of the items here exists as an entity in the AWS model and can be created, named, listed and modified using the Amazon AWS APIs.\n\nThe heart of our cluster is the Auto Scaling Group (ASG), which is where we define the image to launch, how many instances we want, and what security and network routing they should have. The Elastic Load Balancer (ELB) is used for front-end traffic only, and thus not needed for middle-tier services.\n\n
  50. Here is an overview of the AWS architectural model, and the way that we use it to create applications and clusters. Each of the items here exists as an entity in the AWS model and can be created, named, listed and modified using the Amazon AWS APIs.\n\nThe heart of our cluster is the Auto Scaling Group (ASG), which is where we define the image to launch, how many instances we want, and what security and network routing they should have. The Elastic Load Balancer (ELB) is used for front-end traffic only, and thus not needed for middle-tier services.\n\n
  51. Here is an overview of the AWS architectural model, and the way that we use it to create applications and clusters. Each of the items here exists as an entity in the AWS model and can be created, named, listed and modified using the Amazon AWS APIs.\n\nThe heart of our cluster is the Auto Scaling Group (ASG), which is where we define the image to launch, how many instances we want, and what security and network routing they should have. The Elastic Load Balancer (ELB) is used for front-end traffic only, and thus not needed for middle-tier services.\n\n
  52. Here is an overview of the AWS architectural model, and the way that we use it to create applications and clusters. Each of the items here exists as an entity in the AWS model and can be created, named, listed and modified using the Amazon AWS APIs.\n\nThe heart of our cluster is the Auto Scaling Group (ASG), which is where we define the image to launch, how many instances we want, and what security and network routing they should have. The Elastic Load Balancer (ELB) is used for front-end traffic only, and thus not needed for middle-tier services.\n\n
  53. Here is an overview of the AWS architectural model, and the way that we use it to create applications and clusters. Each of the items here exists as an entity in the AWS model and can be created, named, listed and modified using the Amazon AWS APIs.\n\nThe heart of our cluster is the Auto Scaling Group (ASG), which is where we define the image to launch, how many instances we want, and what security and network routing they should have. The Elastic Load Balancer (ELB) is used for front-end traffic only, and thus not needed for middle-tier services.\n\n
  54. Here is an overview of the AWS architectural model, and the way that we use it to create applications and clusters. Each of the items here exists as an entity in the AWS model and can be created, named, listed and modified using the Amazon AWS APIs.\n\nThe heart of our cluster is the Auto Scaling Group (ASG), which is where we define the image to launch, how many instances we want, and what security and network routing they should have. The Elastic Load Balancer (ELB) is used for front-end traffic only, and thus not needed for middle-tier services.\n\n
  55. Here is an overview of the AWS architectural model, and the way that we use it to create applications and clusters. Each of the items here exists as an entity in the AWS model and can be created, named, listed and modified using the Amazon AWS APIs.\n\nThe heart of our cluster is the Auto Scaling Group (ASG), which is where we define the image to launch, how many instances we want, and what security and network routing they should have. The Elastic Load Balancer (ELB) is used for front-end traffic only, and thus not needed for middle-tier services.\n\n
  56. Here is an overview of the AWS architectural model, and the way that we use it to create applications and clusters. Each of the items here exists as an entity in the AWS model and can be created, named, listed and modified using the Amazon AWS APIs.\n\nThe heart of our cluster is the Auto Scaling Group (ASG), which is where we define the image to launch, how many instances we want, and what security and network routing they should have. The Elastic Load Balancer (ELB) is used for front-end traffic only, and thus not needed for middle-tier services.\n\n
  57. Here is an overview of the AWS architectural model, and the way that we use it to create applications and clusters. Each of the items here exists as an entity in the AWS model and can be created, named, listed and modified using the Amazon AWS APIs.\n\nThe heart of our cluster is the Auto Scaling Group (ASG), which is where we define the image to launch, how many instances we want, and what security and network routing they should have. The Elastic Load Balancer (ELB) is used for front-end traffic only, and thus not needed for middle-tier services.\n\n
  58. Here is an overview of the AWS architectural model, and the way that we use it to create applications and clusters. Each of the items here exists as an entity in the AWS model and can be created, named, listed and modified using the Amazon AWS APIs.\n\nThe heart of our cluster is the Auto Scaling Group (ASG), which is where we define the image to launch, how many instances we want, and what security and network routing they should have. The Elastic Load Balancer (ELB) is used for front-end traffic only, and thus not needed for middle-tier services.\n\n
  59. Every application that we deploy always has this same model, so we maintain an many-to-one association between these entities and each application.\n
  60. Every application that we deploy always has this same model, so we maintain an many-to-one association between these entities and each application.\n
  61. Every application that we deploy always has this same model, so we maintain an many-to-one association between these entities and each application.\n
  62. Every application that we deploy always has this same model, so we maintain an many-to-one association between these entities and each application.\n
  63. Every application that we deploy always has this same model, so we maintain an many-to-one association between these entities and each application.\n
  64. Every application that we deploy always has this same model, so we maintain an many-to-one association between these entities and each application.\n
  65. Every application that we deploy always has this same model, so we maintain an many-to-one association between these entities and each application.\n
  66. Every application that we deploy always has this same model, so we maintain an many-to-one association between these entities and each application.\n
  67. Every application that we deploy always has this same model, so we maintain an many-to-one association between these entities and each application.\n
  68. Every application that we deploy always has this same model, so we maintain an many-to-one association between these entities and each application.\n
  69. Every application that we deploy always has this same model, so we maintain an many-to-one association between these entities and each application.\n
  70. Every application that we deploy always has this same model, so we maintain an many-to-one association between these entities and each application.\n
  71. Every application that we deploy always has this same model, so we maintain an many-to-one association between these entities and each application.\n
  72. Every application that we deploy always has this same model, so we maintain an many-to-one association between these entities and each application.\n
  73. Every application that we deploy always has this same model, so we maintain an many-to-one association between these entities and each application.\n
  74. Every application that we deploy always has this same model, so we maintain an many-to-one association between these entities and each application.\n
  75. Every application that we deploy always has this same model, so we maintain an many-to-one association between these entities and each application.\n
  76. Every application that we deploy always has this same model, so we maintain an many-to-one association between these entities and each application.\n
  77. Every application that we deploy always has this same model, so we maintain an many-to-one association between these entities and each application.\n
  78. Every application that we deploy always has this same model, so we maintain an many-to-one association between these entities and each application.\n
  79. Every application that we deploy always has this same model, so we maintain an many-to-one association between these entities and each application.\n
  80. Every application that we deploy always has this same model, so we maintain an many-to-one association between these entities and each application.\n
  81. Every application that we deploy always has this same model, so we maintain an many-to-one association between these entities and each application.\n
  82. Every application that we deploy always has this same model, so we maintain an many-to-one association between these entities and each application.\n
  83. Every application that we deploy always has this same model, so we maintain an many-to-one association between these entities and each application.\n
  84. But there is no built-in support for this aggregating entity in AWS, so we just define our own domain in SimpleDB to keep track of them.\n
  85. But there is no built-in support for this aggregating entity in AWS, so we just define our own domain in SimpleDB to keep track of them.\n
  86. But there is no built-in support for this aggregating entity in AWS, so we just define our own domain in SimpleDB to keep track of them.\n
  87. But there is no built-in support for this aggregating entity in AWS, so we just define our own domain in SimpleDB to keep track of them.\n
  88. But there is no built-in support for this aggregating entity in AWS, so we just define our own domain in SimpleDB to keep track of them.\n
  89. But there is no built-in support for this aggregating entity in AWS, so we just define our own domain in SimpleDB to keep track of them.\n
  90. But we need more than one ASG for each app, and this is why.\n
  91. But we need more than one ASG for each app, and this is why.\n
  92. But we need more than one ASG for each app, and this is why.\n
  93. But we need more than one ASG for each app, and this is why.\n
  94. But we need more than one ASG for each app, and this is why.\n
  95. But we need more than one ASG for each app, and this is why.\n
  96. But we need more than one ASG for each app, and this is why.\n
  97. But we need more than one ASG for each app, and this is why.\n
  98. But we need more than one ASG for each app, and this is why.\n
  99. But we need more than one ASG for each app, and this is why.\n
  100. But we need more than one ASG for each app, and this is why.\n
  101. But we need more than one ASG for each app, and this is why.\n
  102. First scenario: Version 007 is running smoothly in production. We push version 008 out, monitor it, everything looks good so we switch all traffic over to it. After letting it run through one peak load (overnight usually) we know that it is good and we can terminate the version 007 ASG.\n\n
  103. First scenario: Version 007 is running smoothly in production. We push version 008 out, monitor it, everything looks good so we switch all traffic over to it. After letting it run through one peak load (overnight usually) we know that it is good and we can terminate the version 007 ASG.\n\n
  104. First scenario: Version 007 is running smoothly in production. We push version 008 out, monitor it, everything looks good so we switch all traffic over to it. After letting it run through one peak load (overnight usually) we know that it is good and we can terminate the version 007 ASG.\n\n
  105. First scenario: Version 007 is running smoothly in production. We push version 008 out, monitor it, everything looks good so we switch all traffic over to it. After letting it run through one peak load (overnight usually) we know that it is good and we can terminate the version 007 ASG.\n\n
  106. First scenario: Version 007 is running smoothly in production. We push version 008 out, monitor it, everything looks good so we switch all traffic over to it. After letting it run through one peak load (overnight usually) we know that it is good and we can terminate the version 007 ASG.\n\n
  107. First scenario: Version 007 is running smoothly in production. We push version 008 out, monitor it, everything looks good so we switch all traffic over to it. After letting it run through one peak load (overnight usually) we know that it is good and we can terminate the version 007 ASG.\n\n
  108. First scenario: Version 007 is running smoothly in production. We push version 008 out, monitor it, everything looks good so we switch all traffic over to it. After letting it run through one peak load (overnight usually) we know that it is good and we can terminate the version 007 ASG.\n\n
  109. First scenario: Version 007 is running smoothly in production. We push version 008 out, monitor it, everything looks good so we switch all traffic over to it. After letting it run through one peak load (overnight usually) we know that it is good and we can terminate the version 007 ASG.\n\n
  110. First scenario: Version 007 is running smoothly in production. We push version 008 out, monitor it, everything looks good so we switch all traffic over to it. After letting it run through one peak load (overnight usually) we know that it is good and we can terminate the version 007 ASG.\n\n
  111. First scenario: Version 007 is running smoothly in production. We push version 008 out, monitor it, everything looks good so we switch all traffic over to it. After letting it run through one peak load (overnight usually) we know that it is good and we can terminate the version 007 ASG.\n\n
  112. First scenario: Version 007 is running smoothly in production. We push version 008 out, monitor it, everything looks good so we switch all traffic over to it. After letting it run through one peak load (overnight usually) we know that it is good and we can terminate the version 007 ASG.\n\n
  113. First scenario: Version 007 is running smoothly in production. We push version 008 out, monitor it, everything looks good so we switch all traffic over to it. After letting it run through one peak load (overnight usually) we know that it is good and we can terminate the version 007 ASG.\n\n
  114. First scenario: Version 007 is running smoothly in production. We push version 008 out, monitor it, everything looks good so we switch all traffic over to it. After letting it run through one peak load (overnight usually) we know that it is good and we can terminate the version 007 ASG.\n\n
  115. First scenario: Version 007 is running smoothly in production. We push version 008 out, monitor it, everything looks good so we switch all traffic over to it. After letting it run through one peak load (overnight usually) we know that it is good and we can terminate the version 007 ASG.\n\n
  116. Different scenario: Version 007 is running smoothly in production. We push version 008 out, monitor it, things look fair so we switch all traffic over to it. Things start to unravel, and now we can see that 008 wasn&amp;#x2019;t so great after all. So we just switch traffic back to 007, and then terminate 008. (or maybe leave some 008 machines around for forensic purposes.)\n\n\n
  117. Different scenario: Version 007 is running smoothly in production. We push version 008 out, monitor it, things look fair so we switch all traffic over to it. Things start to unravel, and now we can see that 008 wasn&amp;#x2019;t so great after all. So we just switch traffic back to 007, and then terminate 008. (or maybe leave some 008 machines around for forensic purposes.)\n\n\n
  118. Different scenario: Version 007 is running smoothly in production. We push version 008 out, monitor it, things look fair so we switch all traffic over to it. Things start to unravel, and now we can see that 008 wasn&amp;#x2019;t so great after all. So we just switch traffic back to 007, and then terminate 008. (or maybe leave some 008 machines around for forensic purposes.)\n\n\n
  119. Different scenario: Version 007 is running smoothly in production. We push version 008 out, monitor it, things look fair so we switch all traffic over to it. Things start to unravel, and now we can see that 008 wasn&amp;#x2019;t so great after all. So we just switch traffic back to 007, and then terminate 008. (or maybe leave some 008 machines around for forensic purposes.)\n\n\n
  120. Different scenario: Version 007 is running smoothly in production. We push version 008 out, monitor it, things look fair so we switch all traffic over to it. Things start to unravel, and now we can see that 008 wasn&amp;#x2019;t so great after all. So we just switch traffic back to 007, and then terminate 008. (or maybe leave some 008 machines around for forensic purposes.)\n\n\n
  121. Different scenario: Version 007 is running smoothly in production. We push version 008 out, monitor it, things look fair so we switch all traffic over to it. Things start to unravel, and now we can see that 008 wasn&amp;#x2019;t so great after all. So we just switch traffic back to 007, and then terminate 008. (or maybe leave some 008 machines around for forensic purposes.)\n\n\n
  122. Different scenario: Version 007 is running smoothly in production. We push version 008 out, monitor it, things look fair so we switch all traffic over to it. Things start to unravel, and now we can see that 008 wasn&amp;#x2019;t so great after all. So we just switch traffic back to 007, and then terminate 008. (or maybe leave some 008 machines around for forensic purposes.)\n\n\n
  123. Different scenario: Version 007 is running smoothly in production. We push version 008 out, monitor it, things look fair so we switch all traffic over to it. Things start to unravel, and now we can see that 008 wasn&amp;#x2019;t so great after all. So we just switch traffic back to 007, and then terminate 008. (or maybe leave some 008 machines around for forensic purposes.)\n\n\n
  124. Different scenario: Version 007 is running smoothly in production. We push version 008 out, monitor it, things look fair so we switch all traffic over to it. Things start to unravel, and now we can see that 008 wasn&amp;#x2019;t so great after all. So we just switch traffic back to 007, and then terminate 008. (or maybe leave some 008 machines around for forensic purposes.)\n\n\n
  125. Different scenario: Version 007 is running smoothly in production. We push version 008 out, monitor it, things look fair so we switch all traffic over to it. Things start to unravel, and now we can see that 008 wasn&amp;#x2019;t so great after all. So we just switch traffic back to 007, and then terminate 008. (or maybe leave some 008 machines around for forensic purposes.)\n\n\n
  126. Different scenario: Version 007 is running smoothly in production. We push version 008 out, monitor it, things look fair so we switch all traffic over to it. Things start to unravel, and now we can see that 008 wasn&amp;#x2019;t so great after all. So we just switch traffic back to 007, and then terminate 008. (or maybe leave some 008 machines around for forensic purposes.)\n\n\n
  127. Different scenario: Version 007 is running smoothly in production. We push version 008 out, monitor it, things look fair so we switch all traffic over to it. Things start to unravel, and now we can see that 008 wasn&amp;#x2019;t so great after all. So we just switch traffic back to 007, and then terminate 008. (or maybe leave some 008 machines around for forensic purposes.)\n\n\n
  128. Different scenario: Version 007 is running smoothly in production. We push version 008 out, monitor it, things look fair so we switch all traffic over to it. Things start to unravel, and now we can see that 008 wasn&amp;#x2019;t so great after all. So we just switch traffic back to 007, and then terminate 008. (or maybe leave some 008 machines around for forensic purposes.)\n\n\n
  129. Different scenario: Version 007 is running smoothly in production. We push version 008 out, monitor it, things look fair so we switch all traffic over to it. Things start to unravel, and now we can see that 008 wasn&amp;#x2019;t so great after all. So we just switch traffic back to 007, and then terminate 008. (or maybe leave some 008 machines around for forensic purposes.)\n\n\n
  130. Different scenario: Version 007 is running smoothly in production. We push version 008 out, monitor it, things look fair so we switch all traffic over to it. Things start to unravel, and now we can see that 008 wasn&amp;#x2019;t so great after all. So we just switch traffic back to 007, and then terminate 008. (or maybe leave some 008 machines around for forensic purposes.)\n\n\n
  131. Different scenario: Version 007 is running smoothly in production. We push version 008 out, monitor it, things look fair so we switch all traffic over to it. Things start to unravel, and now we can see that 008 wasn&amp;#x2019;t so great after all. So we just switch traffic back to 007, and then terminate 008. (or maybe leave some 008 machines around for forensic purposes.)\n\n\n
  132. The cluster is another case where we have an abstract entity that doesn&amp;#x2019;t exist in AWS. In this case, we just use naming patterns to associate related ASGs into logical clusters.\n
  133. The cluster is another case where we have an abstract entity that doesn&amp;#x2019;t exist in AWS. In this case, we just use naming patterns to associate related ASGs into logical clusters.\n
  134. The cluster is another case where we have an abstract entity that doesn&amp;#x2019;t exist in AWS. In this case, we just use naming patterns to associate related ASGs into logical clusters.\n
  135. The cluster is another case where we have an abstract entity that doesn&amp;#x2019;t exist in AWS. In this case, we just use naming patterns to associate related ASGs into logical clusters.\n
  136. The cluster is another case where we have an abstract entity that doesn&amp;#x2019;t exist in AWS. In this case, we just use naming patterns to associate related ASGs into logical clusters.\n
  137. The cluster is another case where we have an abstract entity that doesn&amp;#x2019;t exist in AWS. In this case, we just use naming patterns to associate related ASGs into logical clusters.\n
  138. \n
  139. \n
  140. \n
  141. \n
  142. \n
  143. \n
  144. \n
  145. \n
  146. \n
  147. \n
  148. \n
  149. \n
  150. \n
  151. \n
  152. \n
  153. \n
  154. \n
  155. \n
  156. \n
  157. \n
  158. \n
  159. \n
  160. \n
  161. \n
  162. \n
  163. \n
  164. \n
  165. \n
  166. \n
  167. \n
  168. \n
  169. \n
  170. \n
  171. \n
  172. \n
  173. \n
  174. \n