SlideShare uma empresa Scribd logo
1 de 70
DEPLOYING NEXT-
GENERATION SYSTEMS
    TWILIO ENGINEERING
WHY NEXT
GENERATION
 SYSTEMS?
        #twiliocon
125,000,000
                                                                    123,090,34
100,000,000                                                         4

 75,000,000


                                                      67,186,111
              e


 50,000,000




                              25,679,631
 25,000,000


                365,782
         0


              Dec 2009    Dec 2010                  Dec 2011       Dec 2012



                                Twilio Transactions Per Month
WHY ZERO
DOWNTIME?
       #twiliocon
HI. I’M TIM
I’m Director of Engineering at twilio




                              #twiliocon
THE CHALLENGE
• Design, build, deploy replacements of 2 core systems.




                                                 #twiliocon
THE CHALLENGE
• Design, build, deploy replacements of 2 core systems.
    ➡ They must be HA.




                                                 #twiliocon
THE CHALLENGE
• Design, build, deploy replacements of 2 core systems.
    ➡ They must be HA.

    ➡ They must be horizontally-scalable.




                                                 #twiliocon
THE CHALLENGE
• Design, build, deploy replacements of 2 core systems.
    ➡ They must be HA.

    ➡ They must be horizontally-scalable.




                                                 #twiliocon
THE CHALLENGE
• Design, build, deploy replacements of 2 core systems.
    ➡ They must be HA.

    ➡ They must be horizontally-scalable.



... Oh, and don’t lose a single billing event or API request in the process.


                                                      #twiliocon
HI. I’M FRANK
I’m API-Team Engineering Lead at twilio




                              #twiliocon
OUT WITH THE OLD...




               #twiliocon
OUT WITH THE OLD...

        • Monolithic Codebase




                       #twiliocon
OUT WITH THE OLD...

        • Monolithic Codebase


        • Serving Millions of API Requests




                         #twiliocon
... AND IN WITH THE NEW




                 #twiliocon
... AND IN WITH THE NEW

• Python + Flask




                   #twiliocon
... AND IN WITH THE NEW

• Python + Flask

• Designed to serve billions of
  API requests




                                  #twiliocon
... AND IN WITH THE NEW

• Python + Flask

• Designed to serve billions of
  API requests

• Zero Downtime, Zero Regressions



                                    #twiliocon
TEST, TEST, TEST




             #twiliocon
TEST, TEST, TEST

• Unit & Functional tests for local development




                                                  #twiliocon
TEST, TEST, TEST

• Unit & Functional tests for local development


• The same tests run in our Staging Cluster




                                                  #twiliocon
TEST, TEST, TEST

• Unit & Functional tests for local development


• The same tests run in our Staging Cluster


• The same cluster tests run against Both API Frameworks



                                                  #twiliocon
A TALE OF TWO APIS




              #twiliocon
A TALE OF TWO APIS


CLUSTER
 TESTS



                  #twiliocon
A TALE OF TWO APIS


CLUSTER
 TESTS



                  #twiliocon
A TALE OF TWO APIS


CLUSTER
 TESTS



                  #twiliocon
A TALE OF TWO APIS
                     DIFF RESULTS


CLUSTER
 TESTS



                  #twiliocon
A TALE OF TWO APIS
                     DIFF RESULTS


CLUSTER
 TESTS



                  #twiliocon
NGINX.CONF
NGINX.CONF
# Map the HTTP header X-Requested-Api-Stack: <value>
# to a named location in nginx

map $http_x_requested_api_stack $requested_stack_default_php {
    default @php;
    python @python;

}
NGINX.CONF
# Map the HTTP header X-Requested-Api-Stack: <value>
# to a named location in nginx

map $http_x_requested_api_stack $requested_stack_default_php {
    default @php;
    python @python;

}
NGINX.CONF
# Map the HTTP header X-Requested-Api-Stack: <value>
# to a named location in nginx

map $http_x_requested_api_stack $requested_stack_default_php {
    default @php;
    python @python;

}
NGINX.CONF
# Map the HTTP header X-Requested-Api-Stack: <value>
# to a named location in nginx

map $http_x_requested_api_stack $requested_stack_default_php {
    default @php;
    python @python;

}
NGINX.CONF
# Map the HTTP header X-Requested-Api-Stack: <value>
# to a named location in nginx

map $http_x_requested_api_stack $requested_stack_default_php {
    default @php;
    python @python;

}


location @python {
    proxy_pass   127.0.0.1:5555;
}

location @php {
    proxy_pass    127.0.0.1:12345;
}
NGINX.CONF
# Map the HTTP header X-Requested-Api-Stack: <value>
# to a named location in nginx

map $http_x_requested_api_stack $requested_stack_default_php {
    default @php;
    python @python;

}


location @python {
    proxy_pass   127.0.0.1:5555;
}

location @php {
    proxy_pass    127.0.0.1:12345;
}



location ~ / {
    try_files Kwijibo $requested_stack_default_php;
}
SPOT THE DIFFERENCE
                 GET /2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaa/Applications/APaaaaaaaaaaaaaaaaaaa




{'TwilioResponse':                                                          {'TwilioResponse':
[{'Application': [                                                          [{'Application': [
 {'Sid': 'APaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'},                              {'Sid': 'APaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'},
     {'DateCreated': 'Mon, 22 Aug 2011 20:58:45 +0000'},                           {'DateCreated': 'Mon, 22 Aug 2011 20:58:45 +0000'},
     {'DateUpdated': 'Mon, 22 Aug 2011 20:58:45 +0000'},                           {'DateUpdated': 'Mon, 22 Aug 2011 20:58:45 +0000'},
     {'AccountSid': 'ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'},                         {'AccountSid': 'ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'},
     {'FriendlyName': 'Application Friendly Name'},                                {'FriendlyName': 'Application Friendly Name'},
     {'ApiVersion': '2010-04-01'},                                                 {'ApiVersion': '2010-04-01'},
     {'VoiceUrl': 'http://www.example.com/voice'},                                 {'VoiceUrl': 'http://www.example.com/voice'},
     {'VoiceMethod': 'GET'},                                                       {'VoiceMethod': 'GET'},
     {'VoiceFallbackUrl': 'http://www.example.com/voice-callback'},                {'VoiceFallbackUrl': 'http://www.example.com/voice-callback'},
     {'VoiceFallbackMethod': 'GET'},                                               {'VoiceFallbackMethod': 'GET'},
     {'StatusCallback': 'http://www.example.com/status-callback'},                 {'StatusCallback': 'http://www.example.com/status-callback'},
     {'StatusCallbackMethod': 'GET'},                                              {'StatusCallbackMethod': 'GET'},
     {'VoiceCallerIdLookup': 'false'},                                             {'VoiceCallerIdLookup': 'False'},
     {'SmsUrl': 'http://www.example.com/sms'},                                     {'SmsUrl': 'http://www.example.com/sms'},
     {'SmsMethod': 'GET'},                                                         {'SmsMethod': 'GET'},
     {'SmsFallbackUrl': 'http://www.example.com/sms-fallback'},                    {'SmsFallbackUrl': 'http://www.example.com/sms-fallback'},
     {'SmsFallbackMethod': 'GET'},                                                 {'SmsFallbackMethod': 'GET'},
     {'SmsStatusCallback': 'http://www.example.com/sms-status-callback'},          {'SmsStatusCallback': 'http://www.example.com/sms-status-callback'},
SPOT THE DIFFERENCE
    GET /2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaa/Applications/APaaaaaaaaaaaaaaaaaaa

  {'TwilioResponse':
  [{'Application': [
   {'Sid': 'APaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'},
       {'DateCreated': 'Mon, 22 Aug 2011 20:58:45 +0000'},
       {'DateUpdated': 'Mon, 22 Aug 2011 20:58:45 +0000'},
       {'AccountSid': 'ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'},
       {'FriendlyName': 'Application Friendly Name'},
       {'ApiVersion': '2010-04-01'},
       {'VoiceUrl': 'http://www.example.com/voice'},
       {'VoiceMethod': 'GET'},
       {'VoiceFallbackUrl': 'http://www.example.com/voice-callback'},
       {'VoiceFallbackMethod': 'GET'},
       {'StatusCallback': 'http://www.example.com/status-callback'},
       {'StatusCallbackMethod': 'GET'},
-      {'VoiceCallerIdLookup': 'false'},
?                               ^

+      {'VoiceCallerIdLookup': 'False'},
?                               ^
       {'SmsUrl': 'http://www.example.com/sms'},
       {'SmsMethod': 'GET'},
       {'SmsFallbackUrl': 'http://www.example.com/sms-fallback'},
       {'SmsFallbackMethod': 'GET'},
       {'SmsStatusCallback': 'http://www.example.com/sms-status-callback'},
ALL GROWN UP




          #twiliocon
ALL GROWN UP
     API




           #twiliocon
ALL GROWN UP
      API
   UNIT TESTS




                #twiliocon
ALL GROWN UP
       API
    UNIT TESTS
 FUNCTIONAL TESTS




                 #twiliocon
ALL GROWN UP
       API
    UNIT TESTS
 FUNCTIONAL TESTS
    DIFF TESTS




                 #twiliocon
ALL GROWN UP
       API
    UNIT TESTS
 FUNCTIONAL TESTS
    DIFF TESTS
  CANARY DEPLOY


                  #twiliocon
ALL GROWN UP
       API
    UNIT TESTS
 FUNCTIONAL TESTS
    DIFF TESTS
  CANARY DEPLOY
       API
                  #twiliocon
ALL GROWN UP
       API
    UNIT TESTS
 FUNCTIONAL TESTS
    DIFF TESTS
  CANARY DEPLOY
       API
                  #twiliocon
Flask-RESTful
• A simple REST resource framework for python Flask applications


• Simplifies argument parsing, generating output, & defining resources


• ORM / Library independent. It’s only dependency is Flask itself.


            http://www.twilio.com/open-source
                                                  #twiliocon
HI. I’M ADAM
I’m MicroTransactions-Team Engineering Lead at twilio




                                     #twiliocon
REWIND TO 2009
NERDY TELECOM
STARTUP SEEKS
  RELIABLE HA
         #twiliocon
MICRO-TRANSACTIONS @TWILIO




                   #twiliocon
MICRO-TRANSACTIONS @TWILIO




                   #twiliocon
MICRO-TRANSACTIONS @TWILIO




                   #twiliocon
TRANSACTIONS @TWILIO V1


                      BALANCE                       AGGREGAT
                      UPDATER                          ION

           DEQUEUER
                                         DEQUEUER


TX QUEUE   DEQUEUER              AGG     DEQUEUER
                      TX MYSQL                        AGG

           DEQUEUER                      DEQUEUER




                                       #twiliocon
TRANSACTIONS @TWILIO V1


                      BALANCE                       AGGREGAT
                      UPDATER                          ION

           DEQUEUER
                                         DEQUEUER


TX QUEUE   DEQUEUER              AGG     DEQUEUER
                      TX MYSQL                        AGG

           DEQUEUER                      DEQUEUER




                                       #twiliocon
TRANSACTIONS @TWILIO V1


                      BALANCE                       AGGREGAT
                      UPDATER                          ION

           DEQUEUER
                                         DEQUEUER


TX QUEUE   DEQUEUER              AGG     DEQUEUER
                      TX MYSQL                        AGG

           DEQUEUER                      DEQUEUER




                                       #twiliocon
TX-




                           TX-              MYSQL        INSERT only log data




Automatically increments                    MY SQL
balance and counters
                           REDIS
                                             MYSQL


                           REDIS




                                   POST-FLIGHT
                                                     #twiliocon
ONLINE SYSTEM UPGRADES




                #twiliocon
ONLINE SYSTEM UPGRADES

• Double book-keeping with
  Shadow Mode




                             #twiliocon
ONLINE SYSTEM UPGRADES

• Double book-keeping with
  Shadow Mode

• Rollback support with
  Account Flags & Feature Flags




                                  #twiliocon
ONLINE SYSTEM UPGRADES

• Double book-keeping with
  Shadow Mode

• Rollback support with
  Account Flags & Feature Flags

• Gradual rollout



                                  #twiliocon
1. SHADOW MODE
 TX     TX-MASTER-
QUEUE    DEQUEUER




                      NGB     LEGACY
                     QUEUE     QUEUE


                  NGB-        LEGACY-
                DEQUEUER     DEQUEUER


                                #twiliocon
1. SHADOW MODE
 TX     TX-MASTER-
QUEUE    DEQUEUER
                              ATOMIC         faucet controls




                      NGB     LEGACY
                     QUEUE     QUEUE


                  NGB-        LEGACY-
                DEQUEUER     DEQUEUER


                                #twiliocon
Sid     Account Sid   Old System   New System

                 SV...      AC...        29.5500      29.5500

                 SV...      AC...       144.8200     144.8200

 COMPARING       SV...

                 SV...
                            AC...

                            AC...
                                         35.6700

                                         30.4200
                                                      35.6700

                                                      30.4200

  FAUCETS: VS.
OLD SYSTEM       SV...

                 SV...
                            AC...

                            AC...
                                        106.9100

                                        109.7900
                                                     106.9100

                                                     109.7900


NEW SYSTEM       SV...

                 SV...
                            AC...

                            AC...
                                         5.5900

                                         10.8400
                                                      5.5900

                                                      10.8400

                 SV...      AC...        74.0250     73.9450

                 SV...      AC...         29.00       49.00

                 SV...      AC...        13.9600     13.1200

                 SV...      AC...        71.3800     91.2400

                 SV...      AC...       671.0650     646.5050

                 SV...      AC...        71.2600      71.2600

                 SV...      AC...        44.5000      44.5000
Sid     Account Sid   Old System   New System

                 SV...      AC...        29.5500      29.5500

                 SV...      AC...       144.8200     144.8200

 COMPARING       SV...

                 SV...
                            AC...

                            AC...
                                         35.6700

                                         30.4200
                                                      35.6700

                                                      30.4200

  FAUCETS: VS.
OLD SYSTEM       SV...

                 SV...
                            AC...

                            AC...
                                        106.9100

                                        109.7900
                                                     106.9100

                                                     109.7900


NEW SYSTEM       SV...

                 SV...
                            AC...

                            AC...
                                         5.5900

                                         10.8400
                                                      5.5900

                                                      10.8400

                 SV...      AC...        74.0250     73.9450

                 SV...      AC...         29.00       49.00

                 SV...      AC...        13.9600     13.1200

                 SV...      AC...        71.3800     91.2400

                 SV...      AC...       671.0650     646.5050

                 SV...      AC...        71.2600      71.2600

                 SV...      AC...        44.5000      44.5000
2. ROLLBACK SUPPORT
     Toggle Account Features




                               #twiliocon
2. ROLLBACK SUPPORT
      Toggle Cluster Features




                                #twiliocon
3. GRADUAL ROLLOUT (PRACTICE
e




 Week 1   Week 2    Week 3   Week 4   Week 5   Week 6    Week 7    Week 8


            # of Errors                   Accounts on Next Gen Billing
BETTER TOOLS

                  Problem                                Solution


• Redis killed by Linux OOM Killer       • Rollback account flags

• Inaccurate balances on NGB             • Fix bug, deploy, compare

• Credit card purchases failing          • Rollback account flags

• Failing to write log entries for NGB   • Rollback feature flags



                                                   #twiliocon
THANK YOU

COME ASK US QUESTIONS!

Mais conteúdo relacionado

Mais procurados

November Camp - Spec BDD with PHPSpec 2
November Camp - Spec BDD with PHPSpec 2November Camp - Spec BDD with PHPSpec 2
November Camp - Spec BDD with PHPSpec 2Kacper Gunia
 
3 things you must know to think reactive - Geecon Kraków 2015
3 things you must know to think reactive - Geecon Kraków 20153 things you must know to think reactive - Geecon Kraków 2015
3 things you must know to think reactive - Geecon Kraków 2015Manuel Bernhardt
 
AngularJS in practice
AngularJS in practiceAngularJS in practice
AngularJS in practicejhoguet
 
PAC 2020 Santorin - Andreas Grabner
PAC 2020 Santorin - Andreas Grabner PAC 2020 Santorin - Andreas Grabner
PAC 2020 Santorin - Andreas Grabner Neotys
 
Kicking off with Zend Expressive and Doctrine ORM (ConFoo YVR 2017)
Kicking off with Zend Expressive and Doctrine ORM (ConFoo YVR 2017)Kicking off with Zend Expressive and Doctrine ORM (ConFoo YVR 2017)
Kicking off with Zend Expressive and Doctrine ORM (ConFoo YVR 2017)James Titcumb
 
Crafting Quality PHP Applications (ConFoo YVR 2017)
Crafting Quality PHP Applications (ConFoo YVR 2017)Crafting Quality PHP Applications (ConFoo YVR 2017)
Crafting Quality PHP Applications (ConFoo YVR 2017)James Titcumb
 
Advanced akka features
Advanced akka featuresAdvanced akka features
Advanced akka featuresGrzegorz Duda
 
優しいWAFの作り方
優しいWAFの作り方優しいWAFの作り方
優しいWAFの作り方techmemo
 
Build Lightweight Web Module
Build Lightweight Web ModuleBuild Lightweight Web Module
Build Lightweight Web ModuleMorgan Cheng
 
There's Waldo by Patrick Wardle & Colby Moore
There's Waldo by Patrick Wardle & Colby MooreThere's Waldo by Patrick Wardle & Colby Moore
There's Waldo by Patrick Wardle & Colby MooreShakacon
 
Forget about Index.php and build you applications around HTTP - PHPers Cracow
Forget about Index.php and build you applications around HTTP - PHPers CracowForget about Index.php and build you applications around HTTP - PHPers Cracow
Forget about Index.php and build you applications around HTTP - PHPers CracowKacper Gunia
 
Elixir/OTP for PHP developers
Elixir/OTP for PHP developersElixir/OTP for PHP developers
Elixir/OTP for PHP developersIgnacio Martín
 
A Lifecycle Of Code Under Test by Robert Fornal
A Lifecycle Of Code Under Test by Robert FornalA Lifecycle Of Code Under Test by Robert Fornal
A Lifecycle Of Code Under Test by Robert FornalQA or the Highway
 
Good karma: UX Patterns and Unit Testing in Angular with Karma
Good karma: UX Patterns and Unit Testing in Angular with KarmaGood karma: UX Patterns and Unit Testing in Angular with Karma
Good karma: UX Patterns and Unit Testing in Angular with KarmaExoLeaders.com
 
C++ for Java Developers (JavaZone Academy 2018)
C++ for Java Developers (JavaZone Academy 2018)C++ for Java Developers (JavaZone Academy 2018)
C++ for Java Developers (JavaZone Academy 2018)Patricia Aas
 
Bee Smalltalk RunTime: anchor's aweigh
Bee Smalltalk RunTime: anchor's aweighBee Smalltalk RunTime: anchor's aweigh
Bee Smalltalk RunTime: anchor's aweighESUG
 
I am the 100% [*] by Chris Evans & Natalie Silvanovich
I am the 100% [*] by Chris Evans & Natalie SilvanovichI am the 100% [*] by Chris Evans & Natalie Silvanovich
I am the 100% [*] by Chris Evans & Natalie SilvanovichShakacon
 
Back to the futures, actors and pipes: using Akka for large-scale data migration
Back to the futures, actors and pipes: using Akka for large-scale data migrationBack to the futures, actors and pipes: using Akka for large-scale data migration
Back to the futures, actors and pipes: using Akka for large-scale data migrationManuel Bernhardt
 
Serverless, The Middy Way - Workshop
Serverless, The Middy Way - WorkshopServerless, The Middy Way - Workshop
Serverless, The Middy Way - WorkshopLuciano Mammino
 

Mais procurados (20)

November Camp - Spec BDD with PHPSpec 2
November Camp - Spec BDD with PHPSpec 2November Camp - Spec BDD with PHPSpec 2
November Camp - Spec BDD with PHPSpec 2
 
3 things you must know to think reactive - Geecon Kraków 2015
3 things you must know to think reactive - Geecon Kraków 20153 things you must know to think reactive - Geecon Kraków 2015
3 things you must know to think reactive - Geecon Kraków 2015
 
AngularJS in practice
AngularJS in practiceAngularJS in practice
AngularJS in practice
 
PAC 2020 Santorin - Andreas Grabner
PAC 2020 Santorin - Andreas Grabner PAC 2020 Santorin - Andreas Grabner
PAC 2020 Santorin - Andreas Grabner
 
Kicking off with Zend Expressive and Doctrine ORM (ConFoo YVR 2017)
Kicking off with Zend Expressive and Doctrine ORM (ConFoo YVR 2017)Kicking off with Zend Expressive and Doctrine ORM (ConFoo YVR 2017)
Kicking off with Zend Expressive and Doctrine ORM (ConFoo YVR 2017)
 
Crafting Quality PHP Applications (ConFoo YVR 2017)
Crafting Quality PHP Applications (ConFoo YVR 2017)Crafting Quality PHP Applications (ConFoo YVR 2017)
Crafting Quality PHP Applications (ConFoo YVR 2017)
 
Advanced akka features
Advanced akka featuresAdvanced akka features
Advanced akka features
 
Event-sourced architectures with Akka
Event-sourced architectures with AkkaEvent-sourced architectures with Akka
Event-sourced architectures with Akka
 
優しいWAFの作り方
優しいWAFの作り方優しいWAFの作り方
優しいWAFの作り方
 
Build Lightweight Web Module
Build Lightweight Web ModuleBuild Lightweight Web Module
Build Lightweight Web Module
 
There's Waldo by Patrick Wardle & Colby Moore
There's Waldo by Patrick Wardle & Colby MooreThere's Waldo by Patrick Wardle & Colby Moore
There's Waldo by Patrick Wardle & Colby Moore
 
Forget about Index.php and build you applications around HTTP - PHPers Cracow
Forget about Index.php and build you applications around HTTP - PHPers CracowForget about Index.php and build you applications around HTTP - PHPers Cracow
Forget about Index.php and build you applications around HTTP - PHPers Cracow
 
Elixir/OTP for PHP developers
Elixir/OTP for PHP developersElixir/OTP for PHP developers
Elixir/OTP for PHP developers
 
A Lifecycle Of Code Under Test by Robert Fornal
A Lifecycle Of Code Under Test by Robert FornalA Lifecycle Of Code Under Test by Robert Fornal
A Lifecycle Of Code Under Test by Robert Fornal
 
Good karma: UX Patterns and Unit Testing in Angular with Karma
Good karma: UX Patterns and Unit Testing in Angular with KarmaGood karma: UX Patterns and Unit Testing in Angular with Karma
Good karma: UX Patterns and Unit Testing in Angular with Karma
 
C++ for Java Developers (JavaZone Academy 2018)
C++ for Java Developers (JavaZone Academy 2018)C++ for Java Developers (JavaZone Academy 2018)
C++ for Java Developers (JavaZone Academy 2018)
 
Bee Smalltalk RunTime: anchor's aweigh
Bee Smalltalk RunTime: anchor's aweighBee Smalltalk RunTime: anchor's aweigh
Bee Smalltalk RunTime: anchor's aweigh
 
I am the 100% [*] by Chris Evans & Natalie Silvanovich
I am the 100% [*] by Chris Evans & Natalie SilvanovichI am the 100% [*] by Chris Evans & Natalie Silvanovich
I am the 100% [*] by Chris Evans & Natalie Silvanovich
 
Back to the futures, actors and pipes: using Akka for large-scale data migration
Back to the futures, actors and pipes: using Akka for large-scale data migrationBack to the futures, actors and pipes: using Akka for large-scale data migration
Back to the futures, actors and pipes: using Akka for large-scale data migration
 
Serverless, The Middy Way - Workshop
Serverless, The Middy Way - WorkshopServerless, The Middy Way - Workshop
Serverless, The Middy Way - Workshop
 

Destaque

Call Tracking with Twilio - Cloudstock 2010
Call Tracking with Twilio - Cloudstock 2010Call Tracking with Twilio - Cloudstock 2010
Call Tracking with Twilio - Cloudstock 2010Twilio Inc
 
Pitch Influencer Marketing to your Boss
Pitch Influencer Marketing to your BossPitch Influencer Marketing to your Boss
Pitch Influencer Marketing to your BossKlear
 
Influencer Marketing with Klear
Influencer Marketing with KlearInfluencer Marketing with Klear
Influencer Marketing with KlearKlear
 
Best practices of modern marketing & sales for talent acquisition leaders
Best practices of modern marketing & sales for talent acquisition leadersBest practices of modern marketing & sales for talent acquisition leaders
Best practices of modern marketing & sales for talent acquisition leadersFrancois Dufour
 
Global Phone Numbers: Taking Your App Around The World
Global Phone Numbers: Taking Your App Around The WorldGlobal Phone Numbers: Taking Your App Around The World
Global Phone Numbers: Taking Your App Around The WorldTwilio Inc
 
Why All Industries will be Software Industries - unSexy Conference 2013 - We ...
Why All Industries will be Software Industries - unSexy Conference 2013 - We ...Why All Industries will be Software Industries - unSexy Conference 2013 - We ...
Why All Industries will be Software Industries - unSexy Conference 2013 - We ...Twilio Inc
 
Lead Gen in the Post-PC World - LeadsCon 2012
Lead Gen in the Post-PC World - LeadsCon 2012Lead Gen in the Post-PC World - LeadsCon 2012
Lead Gen in the Post-PC World - LeadsCon 2012Twilio Inc
 
Twiliobot at Google Wave Meetup 2009-09-14
Twiliobot at Google Wave Meetup 2009-09-14Twiliobot at Google Wave Meetup 2009-09-14
Twiliobot at Google Wave Meetup 2009-09-14Twilio Inc
 
Building a Great Web API - Evan Cooke - QCON 2011
Building a Great Web API - Evan Cooke - QCON 2011Building a Great Web API - Evan Cooke - QCON 2011
Building a Great Web API - Evan Cooke - QCON 2011Twilio Inc
 
Productizing Twilio Applications
Productizing Twilio ApplicationsProductizing Twilio Applications
Productizing Twilio ApplicationsPatrick McKenzie
 
Open Source Software Business Model
Open Source Software Business Model Open Source Software Business Model
Open Source Software Business Model Twilio Inc
 
Twilio Messaging: Overview and New Feature Deep Dive
Twilio Messaging: Overview and New Feature Deep DiveTwilio Messaging: Overview and New Feature Deep Dive
Twilio Messaging: Overview and New Feature Deep DiveTwilio Inc
 
Influencer Marketing Plan [template]
Influencer Marketing Plan [template]Influencer Marketing Plan [template]
Influencer Marketing Plan [template]Klear
 
Scaling Company Values - Twilio - TechWeek 2012
Scaling Company Values - Twilio - TechWeek 2012Scaling Company Values - Twilio - TechWeek 2012
Scaling Company Values - Twilio - TechWeek 2012Twilio Inc
 
Scaling Twilio - Evan Cooke - Twilio Conference 2011
Scaling Twilio - Evan Cooke - Twilio Conference 2011Scaling Twilio - Evan Cooke - Twilio Conference 2011
Scaling Twilio - Evan Cooke - Twilio Conference 2011Twilio Inc
 
Twilio Web Service API for building Voice Applications
Twilio Web Service API for building Voice ApplicationsTwilio Web Service API for building Voice Applications
Twilio Web Service API for building Voice ApplicationsTwilio Inc
 
Starbucks #RedCupArt influencers Marketing Campaign 2016
Starbucks #RedCupArt influencers Marketing Campaign 2016Starbucks #RedCupArt influencers Marketing Campaign 2016
Starbucks #RedCupArt influencers Marketing Campaign 2016Klear
 
CTIA Keynote - Jeff Lawson - Twilio - Ways of the Software People or the Way ...
CTIA Keynote - Jeff Lawson - Twilio - Ways of the Software People or the Way ...CTIA Keynote - Jeff Lawson - Twilio - Ways of the Software People or the Way ...
CTIA Keynote - Jeff Lawson - Twilio - Ways of the Software People or the Way ...Twilio Inc
 
Free Marketing Brief Template for an Influencer Campaign
Free Marketing Brief Template for an Influencer CampaignFree Marketing Brief Template for an Influencer Campaign
Free Marketing Brief Template for an Influencer CampaignKlear
 

Destaque (20)

Call Tracking with Twilio - Cloudstock 2010
Call Tracking with Twilio - Cloudstock 2010Call Tracking with Twilio - Cloudstock 2010
Call Tracking with Twilio - Cloudstock 2010
 
Hashtag Aggregation - Tools
Hashtag Aggregation - ToolsHashtag Aggregation - Tools
Hashtag Aggregation - Tools
 
Pitch Influencer Marketing to your Boss
Pitch Influencer Marketing to your BossPitch Influencer Marketing to your Boss
Pitch Influencer Marketing to your Boss
 
Influencer Marketing with Klear
Influencer Marketing with KlearInfluencer Marketing with Klear
Influencer Marketing with Klear
 
Best practices of modern marketing & sales for talent acquisition leaders
Best practices of modern marketing & sales for talent acquisition leadersBest practices of modern marketing & sales for talent acquisition leaders
Best practices of modern marketing & sales for talent acquisition leaders
 
Global Phone Numbers: Taking Your App Around The World
Global Phone Numbers: Taking Your App Around The WorldGlobal Phone Numbers: Taking Your App Around The World
Global Phone Numbers: Taking Your App Around The World
 
Why All Industries will be Software Industries - unSexy Conference 2013 - We ...
Why All Industries will be Software Industries - unSexy Conference 2013 - We ...Why All Industries will be Software Industries - unSexy Conference 2013 - We ...
Why All Industries will be Software Industries - unSexy Conference 2013 - We ...
 
Lead Gen in the Post-PC World - LeadsCon 2012
Lead Gen in the Post-PC World - LeadsCon 2012Lead Gen in the Post-PC World - LeadsCon 2012
Lead Gen in the Post-PC World - LeadsCon 2012
 
Twiliobot at Google Wave Meetup 2009-09-14
Twiliobot at Google Wave Meetup 2009-09-14Twiliobot at Google Wave Meetup 2009-09-14
Twiliobot at Google Wave Meetup 2009-09-14
 
Building a Great Web API - Evan Cooke - QCON 2011
Building a Great Web API - Evan Cooke - QCON 2011Building a Great Web API - Evan Cooke - QCON 2011
Building a Great Web API - Evan Cooke - QCON 2011
 
Productizing Twilio Applications
Productizing Twilio ApplicationsProductizing Twilio Applications
Productizing Twilio Applications
 
Open Source Software Business Model
Open Source Software Business Model Open Source Software Business Model
Open Source Software Business Model
 
Twilio Messaging: Overview and New Feature Deep Dive
Twilio Messaging: Overview and New Feature Deep DiveTwilio Messaging: Overview and New Feature Deep Dive
Twilio Messaging: Overview and New Feature Deep Dive
 
Influencer Marketing Plan [template]
Influencer Marketing Plan [template]Influencer Marketing Plan [template]
Influencer Marketing Plan [template]
 
Scaling Company Values - Twilio - TechWeek 2012
Scaling Company Values - Twilio - TechWeek 2012Scaling Company Values - Twilio - TechWeek 2012
Scaling Company Values - Twilio - TechWeek 2012
 
Scaling Twilio - Evan Cooke - Twilio Conference 2011
Scaling Twilio - Evan Cooke - Twilio Conference 2011Scaling Twilio - Evan Cooke - Twilio Conference 2011
Scaling Twilio - Evan Cooke - Twilio Conference 2011
 
Twilio Web Service API for building Voice Applications
Twilio Web Service API for building Voice ApplicationsTwilio Web Service API for building Voice Applications
Twilio Web Service API for building Voice Applications
 
Starbucks #RedCupArt influencers Marketing Campaign 2016
Starbucks #RedCupArt influencers Marketing Campaign 2016Starbucks #RedCupArt influencers Marketing Campaign 2016
Starbucks #RedCupArt influencers Marketing Campaign 2016
 
CTIA Keynote - Jeff Lawson - Twilio - Ways of the Software People or the Way ...
CTIA Keynote - Jeff Lawson - Twilio - Ways of the Software People or the Way ...CTIA Keynote - Jeff Lawson - Twilio - Ways of the Software People or the Way ...
CTIA Keynote - Jeff Lawson - Twilio - Ways of the Software People or the Way ...
 
Free Marketing Brief Template for an Influencer Campaign
Free Marketing Brief Template for an Influencer CampaignFree Marketing Brief Template for an Influencer Campaign
Free Marketing Brief Template for an Influencer Campaign
 

Semelhante a Deploying Next Gen Systems with Zero Downtime

Building Better Web APIs with Rails
Building Better Web APIs with RailsBuilding Better Web APIs with Rails
Building Better Web APIs with RailsAll Things Open
 
Continuous Integration and Deployment Best Practices on AWS
Continuous Integration and Deployment Best Practices on AWSContinuous Integration and Deployment Best Practices on AWS
Continuous Integration and Deployment Best Practices on AWSDanilo Poccia
 
Socket applications
Socket applicationsSocket applications
Socket applicationsJoão Moura
 
Structure your Play application with the cake pattern (and test it)
Structure your Play application with the cake pattern (and test it)Structure your Play application with the cake pattern (and test it)
Structure your Play application with the cake pattern (and test it)yann_s
 
Acercándonos a la Programación Funcional a través de la Arquitectura Hexag...
Acercándonos a la Programación Funcional a través de la Arquitectura Hexag...Acercándonos a la Programación Funcional a través de la Arquitectura Hexag...
Acercándonos a la Programación Funcional a través de la Arquitectura Hexag...CodelyTV
 
Advanced Topics in Continuous Deployment
Advanced Topics in Continuous DeploymentAdvanced Topics in Continuous Deployment
Advanced Topics in Continuous DeploymentMike Brittain
 
Baremetal deployment scale
Baremetal deployment scaleBaremetal deployment scale
Baremetal deployment scalebaremetal
 
OpenWhisk: Event-driven Design
OpenWhisk: Event-driven DesignOpenWhisk: Event-driven Design
OpenWhisk: Event-driven DesignAltoros
 
DevOps.2D: two dimensions
of engineering
DevOps.2D: two dimensions
of  engineeringDevOps.2D: two dimensions
of  engineering
DevOps.2D: two dimensions
of engineeringAntons Kranga
 
Free The Enterprise With Ruby & Master Your Own Domain
Free The Enterprise With Ruby & Master Your Own DomainFree The Enterprise With Ruby & Master Your Own Domain
Free The Enterprise With Ruby & Master Your Own DomainKen Collins
 
Recipes for a successful production cloudfoundry deployment - CF Summit 2014
Recipes for a successful production cloudfoundry deployment - CF Summit 2014Recipes for a successful production cloudfoundry deployment - CF Summit 2014
Recipes for a successful production cloudfoundry deployment - CF Summit 2014Vinícius Carvalho
 
Cloud Foundry Cookbook: Recipes for a Successful Cloud Foundry Deployment in ...
Cloud Foundry Cookbook: Recipes for a Successful Cloud Foundry Deployment in ...Cloud Foundry Cookbook: Recipes for a Successful Cloud Foundry Deployment in ...
Cloud Foundry Cookbook: Recipes for a Successful Cloud Foundry Deployment in ...VMware Tanzu
 
ContainerCon 2015 - Be a Microservices Hero
ContainerCon 2015 - Be a Microservices HeroContainerCon 2015 - Be a Microservices Hero
ContainerCon 2015 - Be a Microservices HeroDragos Dascalita
 
Baremetal deployment
Baremetal deploymentBaremetal deployment
Baremetal deploymentbaremetal
 
Containerizing a REST API and Deploying to Kubernetes
Containerizing a REST API and Deploying to KubernetesContainerizing a REST API and Deploying to Kubernetes
Containerizing a REST API and Deploying to KubernetesAshley Roach
 
AWS CDK introduction
AWS CDK introductionAWS CDK introduction
AWS CDK introductionleo lapworth
 
Nordic APIs - Automatic Testing of (RESTful) API Documentation
Nordic APIs - Automatic Testing of (RESTful) API DocumentationNordic APIs - Automatic Testing of (RESTful) API Documentation
Nordic APIs - Automatic Testing of (RESTful) API DocumentationRouven Weßling
 
OSDC 2017 | Modern Secrets Management with Vault by Seth Vargo
OSDC 2017 | Modern Secrets Management with Vault by Seth VargoOSDC 2017 | Modern Secrets Management with Vault by Seth Vargo
OSDC 2017 | Modern Secrets Management with Vault by Seth VargoNETWAYS
 

Semelhante a Deploying Next Gen Systems with Zero Downtime (20)

Mojolicious
MojoliciousMojolicious
Mojolicious
 
Building Better Web APIs with Rails
Building Better Web APIs with RailsBuilding Better Web APIs with Rails
Building Better Web APIs with Rails
 
Continuous Integration and Deployment Best Practices on AWS
Continuous Integration and Deployment Best Practices on AWSContinuous Integration and Deployment Best Practices on AWS
Continuous Integration and Deployment Best Practices on AWS
 
Socket applications
Socket applicationsSocket applications
Socket applications
 
Structure your Play application with the cake pattern (and test it)
Structure your Play application with the cake pattern (and test it)Structure your Play application with the cake pattern (and test it)
Structure your Play application with the cake pattern (and test it)
 
Acercándonos a la Programación Funcional a través de la Arquitectura Hexag...
Acercándonos a la Programación Funcional a través de la Arquitectura Hexag...Acercándonos a la Programación Funcional a través de la Arquitectura Hexag...
Acercándonos a la Programación Funcional a través de la Arquitectura Hexag...
 
Advanced Topics in Continuous Deployment
Advanced Topics in Continuous DeploymentAdvanced Topics in Continuous Deployment
Advanced Topics in Continuous Deployment
 
Baremetal deployment scale
Baremetal deployment scaleBaremetal deployment scale
Baremetal deployment scale
 
OpenWhisk: Event-driven Design
OpenWhisk: Event-driven DesignOpenWhisk: Event-driven Design
OpenWhisk: Event-driven Design
 
Revoke-Obfuscation
Revoke-ObfuscationRevoke-Obfuscation
Revoke-Obfuscation
 
DevOps.2D: two dimensions
of engineering
DevOps.2D: two dimensions
of  engineeringDevOps.2D: two dimensions
of  engineering
DevOps.2D: two dimensions
of engineering
 
Free The Enterprise With Ruby & Master Your Own Domain
Free The Enterprise With Ruby & Master Your Own DomainFree The Enterprise With Ruby & Master Your Own Domain
Free The Enterprise With Ruby & Master Your Own Domain
 
Recipes for a successful production cloudfoundry deployment - CF Summit 2014
Recipes for a successful production cloudfoundry deployment - CF Summit 2014Recipes for a successful production cloudfoundry deployment - CF Summit 2014
Recipes for a successful production cloudfoundry deployment - CF Summit 2014
 
Cloud Foundry Cookbook: Recipes for a Successful Cloud Foundry Deployment in ...
Cloud Foundry Cookbook: Recipes for a Successful Cloud Foundry Deployment in ...Cloud Foundry Cookbook: Recipes for a Successful Cloud Foundry Deployment in ...
Cloud Foundry Cookbook: Recipes for a Successful Cloud Foundry Deployment in ...
 
ContainerCon 2015 - Be a Microservices Hero
ContainerCon 2015 - Be a Microservices HeroContainerCon 2015 - Be a Microservices Hero
ContainerCon 2015 - Be a Microservices Hero
 
Baremetal deployment
Baremetal deploymentBaremetal deployment
Baremetal deployment
 
Containerizing a REST API and Deploying to Kubernetes
Containerizing a REST API and Deploying to KubernetesContainerizing a REST API and Deploying to Kubernetes
Containerizing a REST API and Deploying to Kubernetes
 
AWS CDK introduction
AWS CDK introductionAWS CDK introduction
AWS CDK introduction
 
Nordic APIs - Automatic Testing of (RESTful) API Documentation
Nordic APIs - Automatic Testing of (RESTful) API DocumentationNordic APIs - Automatic Testing of (RESTful) API Documentation
Nordic APIs - Automatic Testing of (RESTful) API Documentation
 
OSDC 2017 | Modern Secrets Management with Vault by Seth Vargo
OSDC 2017 | Modern Secrets Management with Vault by Seth VargoOSDC 2017 | Modern Secrets Management with Vault by Seth Vargo
OSDC 2017 | Modern Secrets Management with Vault by Seth Vargo
 

Mais de Twilio Inc

Building Blocks for Next Generation Contact Centers
Building Blocks for Next Generation Contact CentersBuilding Blocks for Next Generation Contact Centers
Building Blocks for Next Generation Contact CentersTwilio Inc
 
Create an IVR that Keeps Up with Your Customers
Create an IVR that Keeps Up with Your CustomersCreate an IVR that Keeps Up with Your Customers
Create an IVR that Keeps Up with Your CustomersTwilio Inc
 
Salesforce’s Andy Kung on the Power of CRM Integrations
 Salesforce’s Andy Kung on the Power of CRM Integrations Salesforce’s Andy Kung on the Power of CRM Integrations
Salesforce’s Andy Kung on the Power of CRM IntegrationsTwilio Inc
 
All Web Leads’ Lorena Lauv on How to Scale a Virtual Call Center
All Web Leads’ Lorena Lauv on How to Scale a Virtual Call CenterAll Web Leads’ Lorena Lauv on How to Scale a Virtual Call Center
All Web Leads’ Lorena Lauv on How to Scale a Virtual Call CenterTwilio Inc
 
Why Mobile Messaging Works?
Why Mobile Messaging Works?Why Mobile Messaging Works?
Why Mobile Messaging Works?Twilio Inc
 
Understand How Consumers Use Messaging
Understand How Consumers Use MessagingUnderstand How Consumers Use Messaging
Understand How Consumers Use MessagingTwilio Inc
 
What Can You Do With Twilio
What Can You Do With TwilioWhat Can You Do With Twilio
What Can You Do With TwilioTwilio Inc
 
How To Track Calls Using Twilio?
How To Track Calls Using Twilio?How To Track Calls Using Twilio?
How To Track Calls Using Twilio?Twilio Inc
 
Twilio Contact Center Overview
Twilio Contact Center OverviewTwilio Contact Center Overview
Twilio Contact Center OverviewTwilio Inc
 
Twilio Signal 2016 WebRTC Reborn
Twilio Signal 2016 WebRTC RebornTwilio Signal 2016 WebRTC Reborn
Twilio Signal 2016 WebRTC RebornTwilio Inc
 
Twilio Signal 2016 Using Add-ons
Twilio Signal 2016 Using Add-onsTwilio Signal 2016 Using Add-ons
Twilio Signal 2016 Using Add-onsTwilio Inc
 
Twilio Signal 2016 Technical Blogging
Twilio Signal 2016 Technical Blogging Twilio Signal 2016 Technical Blogging
Twilio Signal 2016 Technical Blogging Twilio Inc
 
Twilio Signal 2016 Serverless Contact Center
Twilio Signal 2016 Serverless Contact CenterTwilio Signal 2016 Serverless Contact Center
Twilio Signal 2016 Serverless Contact CenterTwilio Inc
 
Twilio Signal 2016 Robots-IoT-Watson-Cognitive + Twilio
Twilio Signal 2016 Robots-IoT-Watson-Cognitive + TwilioTwilio Signal 2016 Robots-IoT-Watson-Cognitive + Twilio
Twilio Signal 2016 Robots-IoT-Watson-Cognitive + TwilioTwilio Inc
 
Twilio Signal 2016 Leading An Open Hardware Revolution
Twilio Signal 2016 Leading An Open Hardware RevolutionTwilio Signal 2016 Leading An Open Hardware Revolution
Twilio Signal 2016 Leading An Open Hardware RevolutionTwilio Inc
 
Twilio Signal 2016 IoT Using LittleBits and Twilio SMS
Twilio Signal 2016 IoT Using LittleBits and Twilio SMSTwilio Signal 2016 IoT Using LittleBits and Twilio SMS
Twilio Signal 2016 IoT Using LittleBits and Twilio SMSTwilio Inc
 
Twilio Signal 2016 Chaos Patterns
Twilio Signal 2016 Chaos PatternsTwilio Signal 2016 Chaos Patterns
Twilio Signal 2016 Chaos PatternsTwilio Inc
 
Twilio Signal 2016 How to Impact Non-profits
Twilio Signal 2016 How to Impact Non-profits Twilio Signal 2016 How to Impact Non-profits
Twilio Signal 2016 How to Impact Non-profits Twilio Inc
 
Twilio Signal 2016 Bringing P2P to the Masses with WebRTC
Twilio Signal 2016 Bringing P2P to the Masses with WebRTCTwilio Signal 2016 Bringing P2P to the Masses with WebRTC
Twilio Signal 2016 Bringing P2P to the Masses with WebRTCTwilio Inc
 
Twilio Signal 2016 Listing Services and Lead Generation
Twilio Signal 2016 Listing Services and Lead GenerationTwilio Signal 2016 Listing Services and Lead Generation
Twilio Signal 2016 Listing Services and Lead GenerationTwilio Inc
 

Mais de Twilio Inc (20)

Building Blocks for Next Generation Contact Centers
Building Blocks for Next Generation Contact CentersBuilding Blocks for Next Generation Contact Centers
Building Blocks for Next Generation Contact Centers
 
Create an IVR that Keeps Up with Your Customers
Create an IVR that Keeps Up with Your CustomersCreate an IVR that Keeps Up with Your Customers
Create an IVR that Keeps Up with Your Customers
 
Salesforce’s Andy Kung on the Power of CRM Integrations
 Salesforce’s Andy Kung on the Power of CRM Integrations Salesforce’s Andy Kung on the Power of CRM Integrations
Salesforce’s Andy Kung on the Power of CRM Integrations
 
All Web Leads’ Lorena Lauv on How to Scale a Virtual Call Center
All Web Leads’ Lorena Lauv on How to Scale a Virtual Call CenterAll Web Leads’ Lorena Lauv on How to Scale a Virtual Call Center
All Web Leads’ Lorena Lauv on How to Scale a Virtual Call Center
 
Why Mobile Messaging Works?
Why Mobile Messaging Works?Why Mobile Messaging Works?
Why Mobile Messaging Works?
 
Understand How Consumers Use Messaging
Understand How Consumers Use MessagingUnderstand How Consumers Use Messaging
Understand How Consumers Use Messaging
 
What Can You Do With Twilio
What Can You Do With TwilioWhat Can You Do With Twilio
What Can You Do With Twilio
 
How To Track Calls Using Twilio?
How To Track Calls Using Twilio?How To Track Calls Using Twilio?
How To Track Calls Using Twilio?
 
Twilio Contact Center Overview
Twilio Contact Center OverviewTwilio Contact Center Overview
Twilio Contact Center Overview
 
Twilio Signal 2016 WebRTC Reborn
Twilio Signal 2016 WebRTC RebornTwilio Signal 2016 WebRTC Reborn
Twilio Signal 2016 WebRTC Reborn
 
Twilio Signal 2016 Using Add-ons
Twilio Signal 2016 Using Add-onsTwilio Signal 2016 Using Add-ons
Twilio Signal 2016 Using Add-ons
 
Twilio Signal 2016 Technical Blogging
Twilio Signal 2016 Technical Blogging Twilio Signal 2016 Technical Blogging
Twilio Signal 2016 Technical Blogging
 
Twilio Signal 2016 Serverless Contact Center
Twilio Signal 2016 Serverless Contact CenterTwilio Signal 2016 Serverless Contact Center
Twilio Signal 2016 Serverless Contact Center
 
Twilio Signal 2016 Robots-IoT-Watson-Cognitive + Twilio
Twilio Signal 2016 Robots-IoT-Watson-Cognitive + TwilioTwilio Signal 2016 Robots-IoT-Watson-Cognitive + Twilio
Twilio Signal 2016 Robots-IoT-Watson-Cognitive + Twilio
 
Twilio Signal 2016 Leading An Open Hardware Revolution
Twilio Signal 2016 Leading An Open Hardware RevolutionTwilio Signal 2016 Leading An Open Hardware Revolution
Twilio Signal 2016 Leading An Open Hardware Revolution
 
Twilio Signal 2016 IoT Using LittleBits and Twilio SMS
Twilio Signal 2016 IoT Using LittleBits and Twilio SMSTwilio Signal 2016 IoT Using LittleBits and Twilio SMS
Twilio Signal 2016 IoT Using LittleBits and Twilio SMS
 
Twilio Signal 2016 Chaos Patterns
Twilio Signal 2016 Chaos PatternsTwilio Signal 2016 Chaos Patterns
Twilio Signal 2016 Chaos Patterns
 
Twilio Signal 2016 How to Impact Non-profits
Twilio Signal 2016 How to Impact Non-profits Twilio Signal 2016 How to Impact Non-profits
Twilio Signal 2016 How to Impact Non-profits
 
Twilio Signal 2016 Bringing P2P to the Masses with WebRTC
Twilio Signal 2016 Bringing P2P to the Masses with WebRTCTwilio Signal 2016 Bringing P2P to the Masses with WebRTC
Twilio Signal 2016 Bringing P2P to the Masses with WebRTC
 
Twilio Signal 2016 Listing Services and Lead Generation
Twilio Signal 2016 Listing Services and Lead GenerationTwilio Signal 2016 Listing Services and Lead Generation
Twilio Signal 2016 Listing Services and Lead Generation
 

Último

How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
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
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?XfilesPro
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 

Último (20)

How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
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...
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 

Deploying Next Gen Systems with Zero Downtime

  • 3. 125,000,000 123,090,34 100,000,000 4 75,000,000 67,186,111 e 50,000,000 25,679,631 25,000,000 365,782 0 Dec 2009 Dec 2010 Dec 2011 Dec 2012 Twilio Transactions Per Month
  • 4. WHY ZERO DOWNTIME? #twiliocon
  • 5. HI. I’M TIM I’m Director of Engineering at twilio #twiliocon
  • 6. THE CHALLENGE • Design, build, deploy replacements of 2 core systems. #twiliocon
  • 7. THE CHALLENGE • Design, build, deploy replacements of 2 core systems. ➡ They must be HA. #twiliocon
  • 8. THE CHALLENGE • Design, build, deploy replacements of 2 core systems. ➡ They must be HA. ➡ They must be horizontally-scalable. #twiliocon
  • 9. THE CHALLENGE • Design, build, deploy replacements of 2 core systems. ➡ They must be HA. ➡ They must be horizontally-scalable. #twiliocon
  • 10. THE CHALLENGE • Design, build, deploy replacements of 2 core systems. ➡ They must be HA. ➡ They must be horizontally-scalable. ... Oh, and don’t lose a single billing event or API request in the process. #twiliocon
  • 11. HI. I’M FRANK I’m API-Team Engineering Lead at twilio #twiliocon
  • 12. OUT WITH THE OLD... #twiliocon
  • 13. OUT WITH THE OLD... • Monolithic Codebase #twiliocon
  • 14. OUT WITH THE OLD... • Monolithic Codebase • Serving Millions of API Requests #twiliocon
  • 15. ... AND IN WITH THE NEW #twiliocon
  • 16. ... AND IN WITH THE NEW • Python + Flask #twiliocon
  • 17. ... AND IN WITH THE NEW • Python + Flask • Designed to serve billions of API requests #twiliocon
  • 18. ... AND IN WITH THE NEW • Python + Flask • Designed to serve billions of API requests • Zero Downtime, Zero Regressions #twiliocon
  • 19. TEST, TEST, TEST #twiliocon
  • 20. TEST, TEST, TEST • Unit & Functional tests for local development #twiliocon
  • 21. TEST, TEST, TEST • Unit & Functional tests for local development • The same tests run in our Staging Cluster #twiliocon
  • 22. TEST, TEST, TEST • Unit & Functional tests for local development • The same tests run in our Staging Cluster • The same cluster tests run against Both API Frameworks #twiliocon
  • 23. A TALE OF TWO APIS #twiliocon
  • 24. A TALE OF TWO APIS CLUSTER TESTS #twiliocon
  • 25. A TALE OF TWO APIS CLUSTER TESTS #twiliocon
  • 26. A TALE OF TWO APIS CLUSTER TESTS #twiliocon
  • 27. A TALE OF TWO APIS DIFF RESULTS CLUSTER TESTS #twiliocon
  • 28. A TALE OF TWO APIS DIFF RESULTS CLUSTER TESTS #twiliocon
  • 30. NGINX.CONF # Map the HTTP header X-Requested-Api-Stack: <value> # to a named location in nginx map $http_x_requested_api_stack $requested_stack_default_php { default @php; python @python; }
  • 31. NGINX.CONF # Map the HTTP header X-Requested-Api-Stack: <value> # to a named location in nginx map $http_x_requested_api_stack $requested_stack_default_php { default @php; python @python; }
  • 32. NGINX.CONF # Map the HTTP header X-Requested-Api-Stack: <value> # to a named location in nginx map $http_x_requested_api_stack $requested_stack_default_php { default @php; python @python; }
  • 33. NGINX.CONF # Map the HTTP header X-Requested-Api-Stack: <value> # to a named location in nginx map $http_x_requested_api_stack $requested_stack_default_php { default @php; python @python; }
  • 34. NGINX.CONF # Map the HTTP header X-Requested-Api-Stack: <value> # to a named location in nginx map $http_x_requested_api_stack $requested_stack_default_php { default @php; python @python; } location @python { proxy_pass 127.0.0.1:5555; } location @php { proxy_pass 127.0.0.1:12345; }
  • 35. NGINX.CONF # Map the HTTP header X-Requested-Api-Stack: <value> # to a named location in nginx map $http_x_requested_api_stack $requested_stack_default_php { default @php; python @python; } location @python { proxy_pass 127.0.0.1:5555; } location @php { proxy_pass 127.0.0.1:12345; } location ~ / { try_files Kwijibo $requested_stack_default_php; }
  • 36. SPOT THE DIFFERENCE GET /2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaa/Applications/APaaaaaaaaaaaaaaaaaaa {'TwilioResponse': {'TwilioResponse': [{'Application': [ [{'Application': [ {'Sid': 'APaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'}, {'Sid': 'APaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'}, {'DateCreated': 'Mon, 22 Aug 2011 20:58:45 +0000'}, {'DateCreated': 'Mon, 22 Aug 2011 20:58:45 +0000'}, {'DateUpdated': 'Mon, 22 Aug 2011 20:58:45 +0000'}, {'DateUpdated': 'Mon, 22 Aug 2011 20:58:45 +0000'}, {'AccountSid': 'ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'}, {'AccountSid': 'ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'}, {'FriendlyName': 'Application Friendly Name'}, {'FriendlyName': 'Application Friendly Name'}, {'ApiVersion': '2010-04-01'}, {'ApiVersion': '2010-04-01'}, {'VoiceUrl': 'http://www.example.com/voice'}, {'VoiceUrl': 'http://www.example.com/voice'}, {'VoiceMethod': 'GET'}, {'VoiceMethod': 'GET'}, {'VoiceFallbackUrl': 'http://www.example.com/voice-callback'}, {'VoiceFallbackUrl': 'http://www.example.com/voice-callback'}, {'VoiceFallbackMethod': 'GET'}, {'VoiceFallbackMethod': 'GET'}, {'StatusCallback': 'http://www.example.com/status-callback'}, {'StatusCallback': 'http://www.example.com/status-callback'}, {'StatusCallbackMethod': 'GET'}, {'StatusCallbackMethod': 'GET'}, {'VoiceCallerIdLookup': 'false'}, {'VoiceCallerIdLookup': 'False'}, {'SmsUrl': 'http://www.example.com/sms'}, {'SmsUrl': 'http://www.example.com/sms'}, {'SmsMethod': 'GET'}, {'SmsMethod': 'GET'}, {'SmsFallbackUrl': 'http://www.example.com/sms-fallback'}, {'SmsFallbackUrl': 'http://www.example.com/sms-fallback'}, {'SmsFallbackMethod': 'GET'}, {'SmsFallbackMethod': 'GET'}, {'SmsStatusCallback': 'http://www.example.com/sms-status-callback'}, {'SmsStatusCallback': 'http://www.example.com/sms-status-callback'},
  • 37. SPOT THE DIFFERENCE GET /2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaa/Applications/APaaaaaaaaaaaaaaaaaaa {'TwilioResponse': [{'Application': [ {'Sid': 'APaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'}, {'DateCreated': 'Mon, 22 Aug 2011 20:58:45 +0000'}, {'DateUpdated': 'Mon, 22 Aug 2011 20:58:45 +0000'}, {'AccountSid': 'ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'}, {'FriendlyName': 'Application Friendly Name'}, {'ApiVersion': '2010-04-01'}, {'VoiceUrl': 'http://www.example.com/voice'}, {'VoiceMethod': 'GET'}, {'VoiceFallbackUrl': 'http://www.example.com/voice-callback'}, {'VoiceFallbackMethod': 'GET'}, {'StatusCallback': 'http://www.example.com/status-callback'}, {'StatusCallbackMethod': 'GET'}, - {'VoiceCallerIdLookup': 'false'}, ? ^ + {'VoiceCallerIdLookup': 'False'}, ? ^ {'SmsUrl': 'http://www.example.com/sms'}, {'SmsMethod': 'GET'}, {'SmsFallbackUrl': 'http://www.example.com/sms-fallback'}, {'SmsFallbackMethod': 'GET'}, {'SmsStatusCallback': 'http://www.example.com/sms-status-callback'},
  • 38. ALL GROWN UP #twiliocon
  • 39. ALL GROWN UP API #twiliocon
  • 40. ALL GROWN UP API UNIT TESTS #twiliocon
  • 41. ALL GROWN UP API UNIT TESTS FUNCTIONAL TESTS #twiliocon
  • 42. ALL GROWN UP API UNIT TESTS FUNCTIONAL TESTS DIFF TESTS #twiliocon
  • 43. ALL GROWN UP API UNIT TESTS FUNCTIONAL TESTS DIFF TESTS CANARY DEPLOY #twiliocon
  • 44. ALL GROWN UP API UNIT TESTS FUNCTIONAL TESTS DIFF TESTS CANARY DEPLOY API #twiliocon
  • 45. ALL GROWN UP API UNIT TESTS FUNCTIONAL TESTS DIFF TESTS CANARY DEPLOY API #twiliocon
  • 46. Flask-RESTful • A simple REST resource framework for python Flask applications • Simplifies argument parsing, generating output, & defining resources • ORM / Library independent. It’s only dependency is Flask itself. http://www.twilio.com/open-source #twiliocon
  • 47. HI. I’M ADAM I’m MicroTransactions-Team Engineering Lead at twilio #twiliocon
  • 49. NERDY TELECOM STARTUP SEEKS RELIABLE HA #twiliocon
  • 53. TRANSACTIONS @TWILIO V1 BALANCE AGGREGAT UPDATER ION DEQUEUER DEQUEUER TX QUEUE DEQUEUER AGG DEQUEUER TX MYSQL AGG DEQUEUER DEQUEUER #twiliocon
  • 54. TRANSACTIONS @TWILIO V1 BALANCE AGGREGAT UPDATER ION DEQUEUER DEQUEUER TX QUEUE DEQUEUER AGG DEQUEUER TX MYSQL AGG DEQUEUER DEQUEUER #twiliocon
  • 55. TRANSACTIONS @TWILIO V1 BALANCE AGGREGAT UPDATER ION DEQUEUER DEQUEUER TX QUEUE DEQUEUER AGG DEQUEUER TX MYSQL AGG DEQUEUER DEQUEUER #twiliocon
  • 56.
  • 57. TX- TX- MYSQL INSERT only log data Automatically increments MY SQL balance and counters REDIS MYSQL REDIS POST-FLIGHT #twiliocon
  • 59. ONLINE SYSTEM UPGRADES • Double book-keeping with Shadow Mode #twiliocon
  • 60. ONLINE SYSTEM UPGRADES • Double book-keeping with Shadow Mode • Rollback support with Account Flags & Feature Flags #twiliocon
  • 61. ONLINE SYSTEM UPGRADES • Double book-keeping with Shadow Mode • Rollback support with Account Flags & Feature Flags • Gradual rollout #twiliocon
  • 62. 1. SHADOW MODE TX TX-MASTER- QUEUE DEQUEUER NGB LEGACY QUEUE QUEUE NGB- LEGACY- DEQUEUER DEQUEUER #twiliocon
  • 63. 1. SHADOW MODE TX TX-MASTER- QUEUE DEQUEUER ATOMIC faucet controls NGB LEGACY QUEUE QUEUE NGB- LEGACY- DEQUEUER DEQUEUER #twiliocon
  • 64. Sid Account Sid Old System New System SV... AC... 29.5500 29.5500 SV... AC... 144.8200 144.8200 COMPARING SV... SV... AC... AC... 35.6700 30.4200 35.6700 30.4200 FAUCETS: VS. OLD SYSTEM SV... SV... AC... AC... 106.9100 109.7900 106.9100 109.7900 NEW SYSTEM SV... SV... AC... AC... 5.5900 10.8400 5.5900 10.8400 SV... AC... 74.0250 73.9450 SV... AC... 29.00 49.00 SV... AC... 13.9600 13.1200 SV... AC... 71.3800 91.2400 SV... AC... 671.0650 646.5050 SV... AC... 71.2600 71.2600 SV... AC... 44.5000 44.5000
  • 65. Sid Account Sid Old System New System SV... AC... 29.5500 29.5500 SV... AC... 144.8200 144.8200 COMPARING SV... SV... AC... AC... 35.6700 30.4200 35.6700 30.4200 FAUCETS: VS. OLD SYSTEM SV... SV... AC... AC... 106.9100 109.7900 106.9100 109.7900 NEW SYSTEM SV... SV... AC... AC... 5.5900 10.8400 5.5900 10.8400 SV... AC... 74.0250 73.9450 SV... AC... 29.00 49.00 SV... AC... 13.9600 13.1200 SV... AC... 71.3800 91.2400 SV... AC... 671.0650 646.5050 SV... AC... 71.2600 71.2600 SV... AC... 44.5000 44.5000
  • 66. 2. ROLLBACK SUPPORT Toggle Account Features #twiliocon
  • 67. 2. ROLLBACK SUPPORT Toggle Cluster Features #twiliocon
  • 68. 3. GRADUAL ROLLOUT (PRACTICE e Week 1 Week 2 Week 3 Week 4 Week 5 Week 6 Week 7 Week 8 # of Errors Accounts on Next Gen Billing
  • 69. BETTER TOOLS Problem Solution • Redis killed by Linux OOM Killer • Rollback account flags • Inaccurate balances on NGB • Fix bug, deploy, compare • Credit card purchases failing • Rollback account flags • Failing to write log entries for NGB • Rollback feature flags #twiliocon
  • 70. THANK YOU COME ASK US QUESTIONS!

Notas do Editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. Lets rewind to 2009 and take a look at what we built.\n
  44. At Twilio\n- \nnerd out to billing everyday. \n\nIts odd, quirky, but super powerful \n\n- mission critical to the advancement of twilio.\n\nWe decided to invest in building this early on in the company.\n
  45. \n
  46. high availability\nalways be processing\n
  47. Realtime scoreboards, usage, metrics\n
  48. Two piggy banks\nSingle process dequeuers - limited by the number of transactions you can process on a single database\n
  49. Two piggy banks\nSingle process dequeuers - limited by the number of transactions you can process on a single database\n
  50. \n
  51. Once we understood the problems...\n\nWent to the drawing board...\n\nWe built something new to replace the infrastructure alongside it.\n\n&lt;button&gt;\n\nA system that disconnects our dequeuers from our processors. \n\n&lt;button&gt; \n\nProcessors powered by a REST API and uses status codes for success &amp; error resolution.\n\n&lt;button&gt;\n\nOnly inserting into our databases as a log server.\n\n&lt;button&gt;\n\nAnd to fix our realtime issue, we&amp;#x2019;re using redis as an in-flight datastore to atomically process metrics as we process transactions.\n
  52. \n
  53. \n
  54. \n
  55. Now we have two systems side-by-side, but we need to compare the two.\n&lt;click&gt;\nDouble book keeping lets us compare balances and metrics.\n\nIf we have a bug,\n&lt;click&gt;\nwe need to rollback. \n\nAnd we don&amp;#x2019;t want to do it all at once.\n&lt;click&gt;\n\n
  56. Now we have two systems side-by-side, but we need to compare the two.\n&lt;click&gt;\nDouble book keeping lets us compare balances and metrics.\n\nIf we have a bug,\n&lt;click&gt;\nwe need to rollback. \n\nAnd we don&amp;#x2019;t want to do it all at once.\n&lt;click&gt;\n\n
  57. Now we have two systems side-by-side, but we need to compare the two.\n&lt;click&gt;\nDouble book keeping lets us compare balances and metrics.\n\nIf we have a bug,\n&lt;click&gt;\nwe need to rollback. \n\nAnd we don&amp;#x2019;t want to do it all at once.\n&lt;click&gt;\n\n
  58. With so much throughput, we couldn&amp;#x2019;t just shut down the billing system. We also couldn&amp;#x2019;t lose a billing event.\n&lt;click&gt;\nSo we built an abstraction between the two systems that would allow us to atomically control transactions.\n&lt;click&gt;\nWhen the faucet is turned off, it will wait till both queues are drained and send us a report.\n&lt;click&gt;\n
  59. With so much throughput, we couldn&amp;#x2019;t just shut down the billing system. We also couldn&amp;#x2019;t lose a billing event.\n&lt;click&gt;\nSo we built an abstraction between the two systems that would allow us to atomically control transactions.\n&lt;click&gt;\nWhen the faucet is turned off, it will wait till both queues are drained and send us a report.\n&lt;click&gt;\n
  60. Check the books. Can we turn any accounts online?\n
  61. Nope, we should not enable any accounts yet.\n
  62. If we had moved accounts, with a click, we can migrate them back.\n
  63. Or if the cluster catches fire, we can turn off the entire new system and reroute billing traffic back to its legacy system.\n\n
  64. &lt;TODO&gt;\nGraph build out each week with the story.\n\n\n\n\nPractice is good.\nWe tested our platform thoroughly in a practice mode with no account flags turned on.\n\nAs we progressed and fixed the edge-cases, we migrated 1%, %5, all the way up to all accounts over a period of time.\n\nPlanning with your tools lets you build a gradual deployment with ease.\n\n
  65. Just to follow up\n\nbetter tools equal better deployments.\n\nWhen we had issues with our new in-flight store, we had a way to rollback.\nWhen we were seeing discrepancies in balances, we would investigate, fix, deploy, and compare.\n\nSo you get the idea, to migrate to a new micro-payments platform,\nwe must engineer tools that let us migrate back and\nforth with ease so that we can spend time on the solutions.\n
  66. \n