javaone 2014: cloud developer's dharma: redefining 'done' for cloud applications

58
Cloud Developer’s DHARMA… redefining ‘done’ for Cloud applications Daniel Bryant Principal Consultant, Open Credo [email protected] @danielbryantuk

Upload: daniel-bryant

Post on 28-Nov-2014

1.383 views

Category:

Technology


0 download

DESCRIPTION

Building Java applications for the IaaS cloud is easy, right? “Sure, no problem. Just lift and shift,” all the cloud vendors shout in unison. However, the reality of building and deploying cloud applications can often be different. This session introduces lessons learned from the trenches during several years of designing and implementing cloud-based Java applications, which we have codified into our Cloud Developer's “DHARMA” rules: Documented (just enough); Highly cohesive/loosely coupled (all the way down); Automated from code commit to cloud; Resource-aware; Monitored thoroughly; and Antifragile. This session was presented at JavaOne 2014

TRANSCRIPT

Page 1: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

Cloud Developer’s DHARMA…redefining ‘done’ for Cloud

applications

Daniel BryantPrincipal Consultant, Open Credo

[email protected]@danielbryantuk

Page 2: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

What to expect

• Problems when developing for the Cloud– “Lift and shift”– Smashing the monolith– Greenfield

• Some suggestions on where to focus efforts

• Tools and techniques

• Lots of information… (slides will be available)

Page 3: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Who Am I?

• Principal Consultant at Open Credo– Agile transformations– DevOps– Microservices and Cloud

• LJC Associate

• Adopt OpenJDK and JSR

Page 4: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Core Changes…

• Service-Oriented Architecture

• Cloud-based deployments

• DevOps Culture

Page 5: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Core Changes…

• Service-Oriented Architecture– Twitter’s Story (bit.ly/1j1WbmI)

• Cloud-based deployments– Today!

• DevOps Culture– Devoxx UK talk (bit.ly/1BylnZb)– Previous LJC Event (bit.ly/1elVPJz)

Page 6: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Common Cloud Problems

TL;DR…

Page 7: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Not respecting the underlying environment

Page 8: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Lack of application/platform monitoring…

Page 9: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Bizarre failure modes…

Page 10: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Difficult to understand the architecture

Page 11: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Not testing in the Cloud…(hint: here be dragons!)

Page 12: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

We’ve created a “Cloud Developer’s DHARMA” to act as a checklist when building Cloud apps

Page 13: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

dharma/ˈdɑːmə,ˈdəːmə/

noun

1. Signifies behaviors that are considered to be in accord with order that makes life and universe possible (Hinduism)

2. "cosmic law and order”, but is also applied to the teachings of the Buddha (Buddhism)

Page 14: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Documented (just enough)

Highly cohesive/loosely coupled (all the way down)

Automated from commit to Cloud

Resource aware

Monitored thoroughly

Antifragile

Page 15: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Documented (just enough)

Highly cohesive/loosely coupled (all the way down)

Automated from commit to Cloud

Resource aware

Monitored thoroughly

Antifragile

Page 16: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Page 17: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Documentation (just enough)

• Provide a map for developers

• Component purpose (and contract)

• Initialisation instructions

• Highlights areas of operational risk

Page 18: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Simon Brown’s C4 Model

http://www.codingthearchitecture.com/

Page 19: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Page 20: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk09/04/2023 @danielbryantuk

Page 21: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

API Docs with Swagger

https://helloreverb.com/developers/swagger

Page 22: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Create a PACT

https://github.com/DiUS/pact-jvm

Page 23: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Documented (just enough)

Highly cohesive/loosely coupled (all the way down)

Automated from commit to Cloud

Resource aware

Monitored thoroughly

Antifragile

Page 24: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

High Cohesion / Loose Coupling (all the way down…)

• Code

• Architecture– Components– Services

• Public API– PayPal (bit.ly/1hnZNly)

Page 25: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Smashing the Monolith…

• Business functionality – “Cart Service”

• Technology chunk - “Email Service”

• Vertical Slice – “Registration” (Groupon: vimeo.com/105880150)

• Horizontal Slice– “User Repo” (Microservices: oreil.ly/1pp6qmx)

Page 26: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Documented (just enough)

Highly cohesive/loosely coupled (all the way down)

Automated from commit to Cloud

Resource aware

Monitored thoroughly

Antifragile

Page 27: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Automated from Commit to Cloud

• Continuous Integration

• Continuous Deployment

• Continuous Delivery

Page 28: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Our Build Pipeline

Jenkins, with plugins…

• Build Pipeline– wiki.jenkins-ci.org/display/JENKINS/Build+Pipeline+Plugin

• Parameterized build– wiki.jenkins-ci.org/display/JENKINS/Parameterized+Build

• Promoted Builds Plugin– wiki.jenkins-ci.org/display/JENKINS/Promoted+Builds+Plugin

Page 29: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Our Build Pipeline

• Component Build– Compile– Unit Tests (surefire)– Integration Tests (failsafe)

• Deployment onto QA Cloud– Python Scripts + Chef to provision– Verify success using Python

Page 30: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Our Build Pipeline

• Acceptance Tests– Cucumber (and Selenium)

• Performance Tests– Jmeter + Jenkins performance plugin– Make sure environment is realistic!!

• Live Deployment?

Page 31: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Automating QA

• Intra-component integration testing– Utilise embedded datastore/middleware– “Scassandra” (github.com/scassandra)– Service virtualisation (www.mbtest.org)

• Inter-component integration testing– The hardest part of SOA…– Consider ‘synthetic txns’

Page 32: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Infrastructure: Say No To Snowflakes!

• Automate all provisioning (store in SCM)

• Fry...– Chef, Puppet, SaltStack, Ansible– Bash, Python (Fabric)– Vendor APIs

• …or bake?– Packer.io– Netflix Aminator

Page 33: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Infrastructure: Say No To Snowflakes!

• Doing “Proper Development”– Gareth Rushgrove at Craft Conf (bit.ly/1njuc49)– Chef Conf (www.youtube.com/user/getchef)

• Local tooling/testing– Vagrant (www.vagrantup.com)– Docker (www.docker.io)

Page 34: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Documented (just enough)

Highly cohesive/loosely coupled (all the way down)

Automated from commit to Cloud

Resource aware

Monitored thoroughly

Antifragile

Page 35: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Deployment Platform: What you’ve got…

Page 36: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

What you think you want…

Page 37: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

What you get…

Fact: 9 out of 10 cheetahs prefer the taste of an Ops team over tinned food

Page 38: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Thou Shalt Know thy Cloud…

• AWS “Magnetic” EBS 100 IOPS (by default)– My Mac SSD does 49K IOPS

• 1000Mbps network max transfer ~125MB/s– My Mac does 400+ MB/s Sequential Write to SSD

• “Noisy [virtual] Neighbours”

Reference for Mac statistics: bit.ly/1ftJZH8

Page 39: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Thinking/Acting Operationally

• Cultivate “Mechanical Sympathy”

• Virtualisation – Tech Target (bit.ly/1kDVqyG)

• Networking– ‘Unix and Linux System Administration Handbook’– aws.amazon.com/documentation

Page 40: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Thinking/Acting Operationally

• Learn Linux fundamentals

• Diagnostic skills– top, netstat, vmstat, tcpdump– Java utils: jps, jstat, jmap, jhat– “DevOps Troubleshooting” by K. Rankin

• Maybe grow a beard…

Page 41: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Documented (just enough)

Highly cohesive/loosely coupled (all the way down)

Automated from commit to Cloud

Resource aware

Monitored thoroughly

Antifragile

Page 42: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Monitor All The Things!

• Infrastructure monitoring– Nagios / Zabbix– AppDynamics

• Centralised Logging

• Distributed Tracing – twitter.github.io/zipkin

Page 43: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Component Metrics

• Dropwizard’s Metrics– metrics.codahale.com

• Netflix’s Servo– github.com/Netflix/servo

• Etsy’s StatsD– github.com/etsy/statsd/wiki

Page 44: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Health Checks

Page 45: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Gauges, Counters, Meters, Timers…

Page 46: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Graph It!

Page 47: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Page 48: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Page 49: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Documented (just enough)

Highly cohesive/loosely coupled (all the way down)

Automated from commit to Cloud

Resource aware

Monitored thoroughly

Antifragile

Page 50: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Antifragile

• The opposite of fragile?– Robust…– Antifragile…

• Netflix are best-in-class– bit.ly/1gs5n3q

• System must be robust first!

Page 51: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Design for Failure

• Design patterns– Timeouts / retries– Bulkheads / circuit-breakers

• Inspiration– Chris Richardson (slidesha.re/1ft3vsg)– Netflix (bit.ly/1h5GMid)

Page 52: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Retries

https://github.com/rholder/guava-retrying

Page 54: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Robust in the Cloud

• Distributed Computing Principles– ‘For young bloods’ (bit.ly/1pKVepz)

• Check your business goals– Lift and shift?– Cloud hybrid?– Cloud native? (Elastic scaling etc)

Page 55: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Antifragile Patterns: Respect the CAP

Eventual consistency (ACID vs BASE)

Clever caching (soft-state)http://en.wikipedia.org/wiki/CAP_theoremhttp://cloudshankar.blogspot.co.uk/2013/05/eventual-consistency.html

Page 56: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Antifragile Patterns: Elastic Scaling

Stateless components

Distributed data stores / cachesAsynchronous communication

Command Query Responsibility Segregation (CQRS)

Page 57: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Documented (just enough)

Highly cohesive/loosely coupled (all the way down)

Automated from commit to Cloud

Resource aware

Monitored thoroughly

Antifragile

So, Cloud Apps are ‘done’ when…

Page 58: JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications

09/04/2023 @danielbryantuk

Thanks For Listening

• Massive thanks to all the Open Credo team!

• Questions / comments?– [email protected]– @danielbryantuk