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

Aren't we forgetting someone?

Aren't we forgetting someone?

How do DBAs fit into the world of DevOps? We usually think of DevOps as a collaboration between developers and operations or support engineers so it’s easy to forget the database admins who occupy both the development and operations space.

Organisationally they are often separate, sometimes geographically as well as organisationally. How does the database fit into the DevOps or Continuous Delivery story, both technologically and culturally?

Dan North has been helping a number of large organisations at various stages on their journey to continuous delivery and in every case their legacy database dependencies are a major stumbling block. Where do you start unpicking the database? How can you tell if it is working? Is the Matrix just a very big Oracle instance?

Daniel Terhorst-North

February 04, 2016
Tweet

More Decks by Daniel Terhorst-North

Other Decks in Technology

Transcript

  1. @tastapod Can we treat the “database as code”? Servers as

    code Network and DNS as code Release management as code
  2. @tastapod Can we treat the “database as code”? Servers as

    code Network and DNS as code Configuration as code Release management as code
  3. @tastapod Can we treat the “database as code”? Servers as

    code Network and DNS as code Configuration as code Release management as code Database as code
  4. @tastapod Database as code All changes scripted and automated All

    changes under version control Ability to release on demand
  5. @tastapod Database as code All changes scripted and automated All

    changes under version control Ability to release on demand DBAs integrated with Dev and Ops
  6. id name language 1 chef ruby 2 puppet ruby 3

    ansible python 4 salt python products
  7. id name language 1 chef ruby 2 puppet ruby 3

    ansible python 4 salt python products relation (table)
  8. id name language 1 chef ruby 2 puppet ruby 3

    ansible python 4 salt python products field (column) relation (table)
  9. id name language 1 chef ruby 2 puppet ruby 3

    ansible python 4 salt python products field (column) record (row) relation (table)
  10. id name language 1 chef ruby 2 puppet ruby 3

    ansible python 4 salt python products field (column) record (row) relation (table) id name product_id 10 Puppet Labs 2 11 Chef inc. 1 12 SaltStack 4 13 Red Hat 3 vendors
  11. id name language 1 chef ruby 2 puppet ruby 3

    ansible python 4 salt python products field (column) record (row) relation (table) id name product_id 10 Puppet Labs 2 11 Chef inc. 1 12 SaltStack 4 13 Red Hat 3 vendors foreign key
  12. id name language 1 chef ruby 2 puppet ruby 3

    ansible python 4 salt python products field (column) record (row) relation (table) id name product_id 10 Puppet Labs 2 11 Chef inc. 1 12 SaltStack 4 13 Red Hat 3 vendors foreign key index
  13. id name language 1 chef ruby 2 puppet ruby 3

    ansible python 4 salt python products field (column) relation (table) id name product_id 10 Puppet Labs 2 11 Chef inc. 1 12 SaltStack 4 13 Red Hat 3 vendors foreign key UPDATE products SET name = … stored proc index record (row)
  14. id name language 1 chef ruby 2 puppet ruby 3

    ansible python 4 salt python products field (column) relation (table) id name product_id 10 Puppet Labs 2 11 Chef inc. 1 12 SaltStack 4 13 Red Hat 3 vendors foreign key UPDATE products SET name = … stored proc constraint index record (row)
  15. id name language 1 chef ruby 2 puppet ruby 3

    ansible python 4 salt python products field (column) relation (table) id name product_id 10 Puppet Labs 2 11 Chef inc. 1 12 SaltStack 4 13 Red Hat 3 vendors foreign key UPDATE products SET name = … stored proc constraint trigger index record (row)
  16. id name language 1 chef ruby 2 puppet ruby 3

    ansible python 4 salt python products field (column) relation (table) id name product_id 10 Puppet Labs 2 11 Chef inc. 1 12 SaltStack 4 13 Red Hat 3 vendors foreign key UPDATE products SET name = … stored proc constraint trigger index table_size = … heap_size = … free_space = … last_access = … heuristics record (row)
  17. @tastapod Database changes come from multiple directions Application changes Performance

    needs Data growth Upgrades and patches Policy changes Dev
  18. @tastapod Database changes come from multiple directions Application changes Performance

    needs Policy changes Dev Business Data growth Upgrades and patches
  19. @tastapod Database changes come from multiple directions Application changes Performance

    needs Data growth Upgrades and patches Dev Ops Policy changes Business
  20. @tastapod DBAs have been bridging Dev and Ops for years!

    Dev Ops but not how we would define it…
  21. reference data changes with business structural data application data procs,

    triggers Multiple data lifecycles changes with app changes with app
  22. reference data changes with business structural data application data procs,

    triggers Multiple data lifecycles changes with app changes with app changes with usage
  23. @tastapod Database mistakes can have a high impact Cascading failures

    Performance impact Data loss Coincident failures
  24. @tastapod Database mistakes can have a high impact Cascading failures

    Performance impact Data loss Data corruption Coincident failures
  25. @tastapod Database mistakes can have a high impact Cascading failures

    Performance impact Data loss Data corruption Detection can be distant in space and time, and cost Coincident failures
  26. @tastapod DevOps relies on minimising impact impact likelihood We used

    to obsess about this DevOps cares about this MTBF MTTR
  27. DevOps is relentless and change-eager This is the culture clash!

    DBAs are conservative and change-cautious @tastapod
  28. @tastapod The Status Quo Most changes are manual Driven by

    tickets or change requests Carefully planned and scrutinised
  29. @tastapod The Status Quo Most changes are manual Driven by

    tickets or change requests Carefully planned and scrutinised Fragmented audit trail
  30. @tastapod The Status Quo Most changes are manual Driven by

    tickets or change requests Carefully planned and scrutinised Fragmented audit trail Expensive and time-consuming to repeat
  31. @tastapod Database-as-code #1: Migrations ALTER TABLE … ADD COLUMN …

    … INSERT INTO ref_data… … current new VCS
  32. @tastapod Database-as-code #1: Migrations ALTER TABLE … ADD COLUMN …

    … INSERT INTO ref_data… … current new dbdeploy (RIP) VCS
  33. @tastapod Database-as-code #1: Migrations ALTER TABLE … ADD COLUMN …

    … INSERT INTO ref_data… … current new dbdeploy (RIP) rails VCS
  34. @tastapod Database-as-code #1: Migrations ALTER TABLE … ADD COLUMN …

    … INSERT INTO ref_data… … current new dbdeploy (RIP) rails flyway VCS
  35. @tastapod Database-as-code #1: Migrations ALTER TABLE … ADD COLUMN …

    … INSERT INTO ref_data… … current new dbdeploy (RIP) rails flyway liquibase VCS
  36. @tastapod Code-as-code: A comparison ALTER TABLE … ADD COLUMN …

    … INSERT INTO ref_data… … current new VCS
  37. @tastapod VCS Code-as-code: A comparison - old_code… … + new_code…

    … current new Developer edits the code VCS figures out the script
  38. @tastapod VCS Code-as-code: A comparison - old_code… … + new_code…

    … current new Developer edits the code VCS figures out the script VCS can create new state
  39. @tastapod VCS Database-as-code #2: DBVCS? ALTER TABLE … ADD COLUMN

    … … INSERT INTO ref_data… … current new Developer edits the database VCS figures out the script VCS can create new state
  40. @tastapod VCS Database-as-code #2: DBVCS? ALTER TABLE … ADD COLUMN

    … … INSERT INTO ref_data… … current new Red Gate is close but commercial. No OSS equivalent Developer edits the database VCS figures out the script VCS can create new state
  41. @tastapod Engage with your DBA Their context is broader than

    yours They already have a foot in both camps
  42. @tastapod Engage with your DBA Their context is broader than

    yours They already have a foot in both camps Elevate the constraint
  43. @tastapod Engage with your DBA Their context is broader than

    yours They already have a foot in both camps Elevate the constraint Don’t “DevOps” the DBAs!
  44. @tastapod Engage with your DBA Their context is broader than

    yours They already have a foot in both camps Elevate the constraint Don’t “DevOps” the DBAs! Now, who else are we forgetting?