Managing Microservices Effectively

Daniel Hall (@smarthall)

About Me

  • Systems Engineer at LIFX
  • Making the 'Internet' in the Internet of Things

About This Talk

  • This is how we do things at LIFX
  • Feel free to ask questions as we go
  • It works for us, it might not work for you
  • Think about how each bit fits into your situation

Step One: Write your apps

  • You may not get input into this part
  • Micro services are popular at the moment
  • Design pattern that works with continuous delivery

Microservices

  • Try to keep as much state outside your apps
  • Don't make them too small, they're not nanoservices
  • Don't make them too big, they're not milliservices
  • Each service should be
    • Replacable
    • Independently Deployable
    • Have a single capability (billing, authentication)
  • Think about information flow and circular dependencies

The Hype Curve

Jeremy Kemp CC-BY-SA

(http://commons.wikimedia.org/wiki/File:Gartner_Hype_Cycle.svg)

Microservices

Step Two: Packaging

  • All dependencies need to be available
  • Needs to be small or cachable
    • Faster install means faster deployments
  • You might want multiple versions on the same machine
  • Preferably it works in several environments

Docker

  • Filesystem layers stacked on top of each other
  • Uses Linux containers to isolate applications
  • You can run a local Docker registry
    • Security
    • Speed
  • You can run it locally in dev and on your servers
  • Less of 'it works on my laptop'
  • Minuscule performance hit compared to VMs

The Hype Curve

Jeremy Kemp CC-BY-SA

(http://commons.wikimedia.org/wiki/File:Gartner_Hype_Cycle.svg)

Docker

Step Three: Deployment

  • As fast as possible
  • Preferably minimal interaction
  • Recovery from failures

Mesos/Marathon

  • Mesos manages tasks running on a cluster
  • Marathon coordinates long running jobs
  • You submit a JSON job description to Marathon
  • Marathon handles switching from the old app to new
  • Marathon will also handle task failure and recover
  • Health checks ensure broken tasks get replaced

The Hype Curve

Jeremy Kemp CC-BY-SA

(http://commons.wikimedia.org/wiki/File:Gartner_Hype_Cycle.svg)

Mesos/Marathon

Extra Credit: Sheduling

  • Some things need to run repeatedly
  • Cron works, but its not really HA
  • HA Crons exist but can be complex
  • Your cluster probably has spare capacity

Chronos

  • Chronos runs your scheduled tasks in Mesos
  • Uses ISO8601 intervals to specify schedules
  • Use your spare capacity for repeating tasks
  • Can rerun failing jobs
  • Can handle job dependencies
  • Records stats on run times for jobs

The Hype Curve

Jeremy Kemp CC-BY-SA

(http://commons.wikimedia.org/wiki/File:Gartner_Hype_Cycle.svg)

Chronos

Summary

Demo

https://github.com/smarthall/ansible-mesos

Demo Time!

  • All the code is on Github
    • https://github.com/smarthall/ansible-mesos
  • 'vagrant up' will give you a development cluster
  • './init-cluster.sh' will add some sample apps

Managing Microservices Effectively

By Daniel Hall

Managing Microservices Effectively

  • 1,914