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

Going Fast in Government

Going Fast in Government

Talk given to the London Web Performance meetup, featuring a bit of background to GOV.UK and a few short examples of how we try and deliver high quality services quickly.

Gareth Rushgrove

January 16, 2013
Tweet

More Decks by Gareth Rushgrove

Other Decks in Technology

Transcript

  1. http://www.flickr.com/photos/psd/7649345008 Going Fast in Government Tales from building GOV.UK London

    Web Performance 16th January 2013 gareth rushgrove | morethanseven.net
  2. Me

  3. gareth rushgrove | morethanseven.net Some Examples - Focus on user

    need - Ship fast - Measure everything - Treat infrastructure as software
  4. Scenario: Can log in Given the "EFG" application has booted

    When I try to login as a valid EFG user Then I should be on the EFG post-login page gareth rushgrove | morethanseven.net Smoke Tests
  5. gareth rushgrove | morethanseven.net Smoke Tests for Performance Scenario: Can

    log in Given the "EFG" application has booted And I am benchmarking When I try to login as a valid EFG user Then I should be on the EFG post-login page Then the time should be less than 1 seconds
  6. gareth rushgrove | morethanseven.net Also Monitoring Checks Scenario: Can log

    in Given the "EFG" application has booted And I am benchmarking When I try to login as a valid EFG user Then I should be on the EFG post-login page Then the time should be less than 1 seconds
  7. gareth rushgrove | morethanseven.net Why Infrastructure as Code? (Performance Edition)

    - Rapidly move between different infrastructures - Quickly provision new instances or environments - Share code between projects - Make agreed changes quickly (commit and deploy)
  8. package { 'apache2': ensure => latest, } service { 'apache2':

    ensure => running, provider => upstart, require => Package['apache2'] } gareth rushgrove | morethanseven.net Configuration Management Resources
  9. class govuk::apps::calendars( $port = 3011 ) { govuk::app { 'calendars':

    app_type => 'rack', port => $port, health_check_path => ‘/bank-holidays’, } } gareth rushgrove | morethanseven.net Configuration Management Apps
  10. class govuk::node::s_frontend inherits govuk::n include govuk::node::s_ruby_app_server include govuk::apps::businesssupportfinder include govuk::apps::calendars

    include govuk::apps::canary_frontend include govuk::apps::datainsight_frontend include govuk::apps::designprinciples include govuk::apps::feedback include govuk::apps::frontend include govuk::apps::licencefinder include govuk::apps::smartanswers include govuk::apps::static gareth rushgrove | morethanseven.net Configuration Management Nodes
  11. class govuk::node::s_frontend inherits govuk::n include govuk::node::s_ruby_app_server include govuk::apps::businesssupportfinder include govuk::apps::calendars

    include govuk::apps::canary_frontend include govuk::apps::datainsight_frontend include govuk::apps::designprinciples include govuk::apps::feedback include govuk::apps::frontend include govuk::apps::licencefinder include govuk::apps::smartanswers include govuk::apps::static gareth rushgrove | morethanseven.net Configuration Management Nodes
  12. class govuk::node::s_frontend inherits govuk::n include govuk::node::s_ruby_app_server include govuk::apps::businesssupportfinder include govuk::apps::calendars

    include govuk::apps::canary_frontend include govuk::apps::datainsight_frontend include govuk::apps::designprinciples include govuk::apps::feedback include govuk::apps::frontend include govuk::apps::licencefinder include govuk::apps::smartanswers include govuk::apps::static gareth rushgrove | morethanseven.net Configuration Management Nodes
  13. gareth rushgrove | morethanseven.net Software Defined Networks require 'rubygems' require

    'nat' nat do snat :interface => "Client Data", :original => { :ip => "10.0.0.0/xx" }, :translated => { :ip => "xx.xx.xx.xx" }, :desc => "Outbound internet traffic" dnat :interface => "Client Data", :original => { :ip => "xx.xx.xx.xx", :port => 22 }, :translated => { :ip => "10.0.0.xx", :port => 22 }, :desc => "jumpbox-1 SSH" dnat :interface => "Client Data", :original => { :ip => "xx.xx.xx.xx", :port => 80 },, :translated => { :ip => "10.0.0.xx", :port => 80 }, :desc => "jenkins, logging, monitoring HTTP"
  14. require 'rubygems' require 'firewall' firewall do # internal rules rule

    "ssh access to jumpbox1" do source :ip => "Any" destination :ip => "xx.xx.xx.xx", :port => 22 end rule "http to backend applications" do source :ip => "Any" destination :ip => "xx.xx.xx.xx", :port => 80 end rule "https to backend applications" do gareth rushgrove | morethanseven.net Including Firewall and Loadbalancer