Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

42
© Copyright 2014 Pivotal. All rights reserved. © Copyright 2014 Pivotal. All rights reserved. Cloud Foundry and Microservices A Mutualistic Symbiotic Relationship 1 Matt Stine Cloud Foundry Platform Engineer CF Summit 2014

description

With businesses built around software now disrupting multiple industries that appeared to have stable leaders, the need has emerged for enterprises to create "software factories" built around the following principles: Streaming customer feedback directly into rapid, iterative cycles of application development Horizontally scaling applications to meet user demand Compatibility with an enormous diversity of clients, with mobility (smartphones, tablets, etc.) taking the lead Continuous delivery of value, shrinking the cycle time from concept to cash Infrastructure has taken the lead in adapting to meet these needs with the move to the cloud, and Platform as a Service (PaaS) has raised the level of abstraction to a focus on an ecosystem of applications and services. However, most applications are still developed as if we're living in the previous generation of both business and infrastructure: the monolithic application. Microservices - small, loosely coupled applications that follow the Unix philosophy of "doing one thing well" - represent the application development side of enabling rapid, iterative development, horizontal scale, polyglot clients, and continuous delivery. They also enable us to scale application development and eliminate long term commitments to a single technology stack. While microservices are simple, they are certainly not easy. It's recently been said that "microservices are not a free lunch". Interestingly enough, if you look at the concerns expressed here about microservices, you'll find that they are exactly the challenges that a PaaS is intended to address. So while microservices do not necessarily imply cloud (and vice versa), there is in fact a symbiotic relationship between the two, with each approach somehow compensating for the limitations of the other, much like the practices of eXtreme Programming.

Transcript of Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

Page 1: Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

© Copyright 2014 Pivotal. All rights reserved.© Copyright 2014 Pivotal. All rights reserved.

Cloud Foundry and MicroservicesA Mutualistic Symbiotic Relationship

1

Matt Stine Cloud Foundry Platform Engineer CF Summit 2014

Page 2: Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

© Copyright 2014 Pivotal. All rights reserved. 2

“Software Keeps Eating the World”

Page 3: Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

© Copyright 2014 Pivotal. All rights reserved. 3

Software Keeps Changing Industries

$3.5B valuation Financial Services

$3.5B valuation Travel & Hospitality

$3.5B valuation Transportation

$3.2B Acquisition by Google Home Automation

$20B valuation Entertainment

$26B valuation Tesla--Automotive

$19.5B

Page 4: Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

© Copyright 2014 Pivotal. All rights reserved. 4

Warner Music: Software FactoriesWarner Software Factory Platform • New applications and major updates

- Before: 6 months, team of 10 developers - After: 6 weeks, same team - Speed/Agility: 400% faster on new platform - HR Hard Savings: $1.1M per application update

delivered

Page 5: Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

© Copyright 2014 Pivotal. All rights reserved. 5

Iterative Development

Design Develop

Test

Customer Feedback Customer

Delivery

Analytics

Page 6: Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

© Copyright 2014 Pivotal. All rights reserved.

Horizontal Scale

6

Slow/Expensive Fast/Cheap

Page 7: Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

© Copyright 2014 Pivotal. All rights reserved.

Diversity of Clients

7

http://money.cnn.com/2014/02/28/technology/mobile/mobile-apps-internet/

In January 2014, mobile devices accounted for 55% of Internet usage in the United States. Apps made up 47% of Internet traffic and 8% of traffic came from mobile

browsers.

Page 8: Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

© Copyright 2014 Pivotal. All rights reserved. 8

Continuous Delivery

Page 9: Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

© Copyright 2014 Pivotal. All rights reserved. 9

Software Factories

Feedback Rapid Iteration

Horizontal Scale

Diversity of Clients

Continuous Delivery

InfrastructureApplications

MonolithsMicroservices

Physical/Virtual Cloud Foundry

Page 10: Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

© Copyright 2014 Pivotal. All rights reserved. 10

New Architectural Constraints•CF optimizes for 12 Factor Linux applications

•Microservices: a radical departure from traditional monolithic applications

• In both cases, the enterprise is forced to “think different.”

Page 11: Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

© Copyright 2014 Pivotal. All rights reserved.

How XP Practices Support Each Other

11

http://www.kusmin.eu/wiki/index.php/How_XP_Practices_Support_Each_Other

Page 12: Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

© Copyright 2014 Pivotal. All rights reserved.

A Mutualistic Symbiotic Relationship…

12

Cloud FoundryMicroservices

http://en.wikipedia.org/wiki/Symbiosis#Mutualism

Page 13: Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

© Copyright 2014 Pivotal. All rights reserved.© Copyright 2014 Pivotal. All rights reserved.

Microservices Overview

13

Page 14: Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

© Copyright 2014 Pivotal. All rights reserved. 14

Simple vs. Easy• Simple

• sim- plex

• one fold/braid

• vs complex

• Easy

• ease < aise < adjacens

• lie near

• vs hard

Page 15: Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

© Copyright 2014 Pivotal. All rights reserved.

Monolithic Architecture

15

Relational Database

Data Access

Service

HTML JavaScript MVC

Service

Monolithic ApplicationBrowser

Page 16: Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

© Copyright 2014 Pivotal. All rights reserved. 16

Monolithic Architectures•Complex / Easy

•Modularity Dependent Upon Language / Frameworks

•Change Cycles Tightly Coupled / Obstacle to Frequent Deploys

• Inefficient Scaling

•Can Be Intimidating to New Developers

•Obstacle to Scaling Development

• Requires Long-Term Commitment to Technical Stack

Page 17: Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

© Copyright 2014 Pivotal. All rights reserved.

Microservice Architecture

17

HTTP

HTTP

HTTP

HTTP

HTTP

HTTP

AMQPAMQP

Relational DB

Key/Value Store

Graph DB

Page 18: Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

© Copyright 2014 Pivotal. All rights reserved. 18

Microservice Architectures• Simple / Hard

•Modularity Based on Component Services

•Change Cycles Decoupled / Enable Frequent Deploys

• Efficient Scaling

• Individual Components Less Intimidating to New Developers

• Enables Scaling of Development

• Eliminates Long-Term Commitment to Technical Stack

Page 19: Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

© Copyright 2014 Pivotal. All rights reserved.

Conway’s Law

19

Any organization that designs a system (defined broadly) will produce a design whose structure is a copy of the organization's communication structure.

Melvyn Conway, 1967

http://martinfowler.com/articles/microservices.html#OrganizedAroundBusinessCapabilities

Page 20: Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

© Copyright 2014 Pivotal. All rights reserved.

Organize Around Business Capabilities

20

Data Access

Service

HTML JavaScript MVC

Service

UI S

pecialists

Middlew

are S

pecialists

DB

As

Business C

apability

Business C

apability

Business C

apabilitySiloed Functional Teams

http://martinfowler.com/articles/microservices.html#OrganizedAroundBusinessCapabilities

Siloed Application Architectures

Cross- functional Teams

Microservice Architectures

Page 21: Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

© Copyright 2014 Pivotal. All rights reserved. 21

Partitioning Strategies•By Noun (e.g. product info service)

•By Verb (e.g. shipping service)

• Single Responsibility Principle(http://programmer.97things.oreilly.com/wiki/index.php/The_Single_Responsibility_Principle)

Page 22: Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

© Copyright 2014 Pivotal. All rights reserved. 22

UNIX Pipes and Filters

cut -d" " -f1 < access.log | sort | uniq -c | sort -rn | less

Page 23: Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

© Copyright 2014 Pivotal. All rights reserved.

Choreography over Orchestration

23

https://www.flickr.com/photos/gabrielsaldana/5896491978

https://www.flickr.com/photos/chrisbrenschmidt/2223763842

http://martinfowler.com/articles/microservices.html#SmartEndpointsAndDumbPipes

Page 24: Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

© Copyright 2014 Pivotal. All rights reserved.© Copyright 2014 Pivotal. All rights reserved. 24

Overviewhttp://12factor.net

Page 25: Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

© Copyright 2014 Pivotal. All rights reserved. 25

Twelve Factor + Cloud Foundry•One codebase tracked in revision control, many deploys

•Multiple = Distributed System

•Consistent with CF application unit

• Explicitly declare and isolate dependencies

•CF emphasis on deployable units (e.g. Java WAR)

•CF Buildpacks provide runtime dependencies

Page 26: Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

© Copyright 2014 Pivotal. All rights reserved. 26

Twelve Factor + Cloud Foundry• Store config in the environment

•Nicely facilitated via CF

• Treat backing services as attached resources

• cf create-service / cf bind-service

• Strictly separate build and run stages

•CF Buildpacks + immutable Warden containers

Page 27: Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

© Copyright 2014 Pivotal. All rights reserved. 27

Twelve Factor + Cloud Foundry• Execute the app as one or more stateless processes

• CF Warden containers - no clustered memory, no shared FS.

• Challenge for the monolith!

• Export services via port binding

• CF provides HTTP/HTTPS today, more future (TCP?)

• Scale out via the process model

• cf scale app -i 1000

Page 28: Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

© Copyright 2014 Pivotal. All rights reserved. 28

Twelve Factor + Cloud Foundry•Maximize robustness with fast startup and graceful shutdown

• CF scales quickly, but can only move as fast as your app can bootstrap (challenge for the monolith!)

• Keep development, staging, and production as similar as possible

• CF is CF! Spaces provide separation of concerns without technical differences.

Page 29: Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

© Copyright 2014 Pivotal. All rights reserved. 29

Twelve Factor + Cloud Foundry• Treat logs as event streams

•CF Loggregator!

• Run admin/management tasks as one-off processes

• Still a challenge to be addressed…

Page 30: Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

© Copyright 2014 Pivotal. All rights reserved. 30

Twelve Factor + Microservices• Fully compatible architectural style

• Frameworks tend to optimize around same ideas

• Examples:

• Spring Boot + Cloud

• http://projects.spring.io/spring-boot

• http://projects.spring.io/spring-cloud

•Dropwizard (https://dropwizard.github.io/dropwizard)

Page 31: Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

© Copyright 2014 Pivotal. All rights reserved.© Copyright 2014 Pivotal. All rights reserved. 31

http://highscalability.com/blog/2014/4/8/microservices-not-a-free-lunch.html

Page 32: Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

© Copyright 2014 Pivotal. All rights reserved. 32

Paying for your lunch…• Significant Operations Overhead

• Substantial DevOps Skills Required

• Implicit Interfaces

•Duplication of Effort

•Distributed System Complexity

•Asynchronicity is Difficult!

• Testability Challenges

Page 33: Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

© Copyright 2014 Pivotal. All rights reserved. 33

Paying for your lunch…• Significant Operations Overhead

• Substantial DevOps Skills Required

• Implicit Interfaces

•Duplication of Effort

•Distributed System Complexity

•Asynchronicity is Difficult!

• Testability Challenges

Page 34: Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

© Copyright 2014 Pivotal. All rights reserved. 34

Significant Operations Overhead• Mitigate polyglot language/environment provisioning complexity via CF Buildpacks

• Mitigate failover and resilience concerns via CF Scale, CF Health Monitor, and future CF App AZ’s (http://blog.gopivotal.com/cloud-foundry-pivotal/products/the-four-levels-of-ha-in-pivotal-cf)

• Mitigate routing/load balancing and plumbing concerns via CF Router and CF Services

• High quality monitoring = CF BP agent-based tooling, future CF metric streams

• High quality operations infrastructure = CF BOSH!

• Robust release/deployment automation = CF API, scriptable CF CLI, Maven/Gradle Plugins, Strong Cloudbees/Jenkins partnerships

Page 35: Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

© Copyright 2014 Pivotal. All rights reserved. 35

Currently, there is not much in terms of frameworks and open source tooling to support this from an operational perspective. It's likely therefore that a team rolling out

Microservices will need to make significant investment in custom scripting or development to manage these processes before they write a line of code that delivers

business value. !

Operations is the most obvious and commonly held objection towards the model, though it is too easily brushed aside by proponents of this architecture.

http://highscalability.com/blog/2014/4/8/microservices-not-a-free-lunch.html

Page 36: Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

© Copyright 2014 Pivotal. All rights reserved. 36

Page 37: Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

© Copyright 2014 Pivotal. All rights reserved.

No Open Source Tooling?

37

Page 38: Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

© Copyright 2014 Pivotal. All rights reserved. 38

Substantial DevOps Skills Required• This is a Good Thing™ in any architecture!

•CF keeps your microservices up and available (and your monoliths too!)

•CF = development and production parity!

• Polyglot persistence without all the fuss: CF BOSH and Service Brokers

Page 39: Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

© Copyright 2014 Pivotal. All rights reserved. 39

Distributed System Complexity•Agreed: Microservices imply distributed systems.

•All of the CF platform features we’ve discussed help to mitigate these concerns:

• latent/unreliable networks

• fault tolerance

• load variability

Page 40: Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

© Copyright 2014 Pivotal. All rights reserved. 40

Testability Challenges•With CF, it is NOT difficult to recreate environments in a

consistent way for either manual or automated testing!

• Idiomatic Microservices involves placing less emphasis on testing and more on monitoring

•Not sure where this idea comes from…

•CF is an enabler of both!

Page 41: Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

© Copyright 2014 Pivotal. All rights reserved.

A Mutualistic Symbiotic Relationship

41

Cloud FoundryMicroservices

http://en.wikipedia.org/wiki/Symbiosis#Mutualism

Page 42: Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship

A NEW PLATFORM FOR A NEW ERA