Going Cloud Native

Cloud Native Evolution

What are we going to do?

Agenda

CF Logo
  • Monolithic Applications
  • Challenges
  • Going Cloud Native


What is a Monolith?


Typically…

  • Tightly coupled
  • Multi-responsibility/mixed concerns
  • Large deployable unit(s)

Challenges

Monolithic
Scaling

Challenges

Monolithic
Release Cycles

Challenges

Monolithic
Onboarding

Challenges

Monolithic
Feedback Loop

What if we could...

Deploy quickly and confidently every time

Innovate quickly with fast feedback

What if we could...

Scale our teams and applications

Fail gracefully and recover quickly

What if we could...

Build the
Right Thing

We can reach...

Cloud Native
Confidence

What we will accomplish?

Goals

CF Logo
  • Have a basic understanding of Cloud Native development
  • Get hands on experience with Cloud Foundry
  • Learn how to use microservices to deliver faster
  • Explore helpful patterns and tools

Lab: Setting up your CF account and CF CLI

Going Cloud Native

Microservices and 12 factor apps

Microservices defined as...

"A loosely-coupled, service-oriented architecture with bounded context."

Adrian Cockcroft

Source: http://thenewstack.io/dockercon-europe-adrian-cockcroft-on-the-state-of-microservices/

"It allows updates without needing to understand how everything else works."

Adrian Cockcroft

Source: http://thenewstack.io/dockercon-europe-adrian-cockcroft-on-the-state-of-microservices/

single responsibility

separation of concerns

Impact of Microservices


Decoupled change cycles -> frequent deploys

Small codebase -> fast onboarding

Efficient scale -> technology & organizations

Data Microservices

Data Microservices

Microservices architectures have significant...

Ops Overhead
Mitigated by CF

So what is 12 factor?

Coping mechanism for diversity in distributed systems.

Lab: Pushing a data service

Going Cloud Native

12 Factor Review

What do you need to know?

I. Codebase

II. Dependencies

XII. Admin processes

What have you already experienced?

V. Build, release, run

VII. Port binding

X. Dev/prod parity

What are you going to experience?

VI. Processes

III. Config

IV. Backing services

VIII. Concurrency

IX. Disposability

Lab: Binding and Environment Variables

Going Cloud Native

Service Discovery

Services need to be...

Discoverable
Accessible

Stateless services are constantly...

scaling

failing

recovering

In distributed systems...

Application dependencies cease to be a method call away

Configuring each client is error prone and brittle

Service Discovery

Client Side load-balancing

Client side load-balancing is...

Simple - no need for another load-balancer

Efficient - minimize components between calls

Flexible - URIs change

Lab: Service Discovery with Eureka

Going Cloud Native

Circuit Breaking

Interactions between services need to be...

Reliable
Fault Tolerant

Cascading Failure

GIVEN: app that relies on 30 services

each service: 99.99% uptime

99.7% uptime

Cascading Failure

0.3% of 1 billion requests = 3,000,000 failures

Reality is generally worse

And if we don't recover gracefully...

source: www.dailymail.co.uk

Circuit Breaking

Lab: Circuit Breakers with Hystrix

Going Cloud Native

Distributed Tracing

When something goes bang…

how do we find the problem?

source: https://sudo.hailoapp.com/services/2015/03/09/journey-into-a-microservice-world-part-3/

XI. Logs - Treat logs as event streams

Tracing Solutions

Zipkin

Based on concepts in Google Dapper

Lab: Logs

Speed    |    Simplicity    |    Control