dipping your toes into cloud native application development

Post on 16-Jan-2017

1.180 Views

Category:

Internet

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Dipping Your Toes Into Cloud Native Application Development

Who is this guy?

– mattfarina.com, @mattfarina– Principal Engineer, Advanced Technology

Group, Hewlett Packard Enterprise– Go, Node.js, PHP, Ruby, Python, .NET… in

just past 5 years– Recently wrote book, “Go in Practice”– Co-lead Kubernetes SIG Apps– Likes to build things in the cloud– Doesn’t like bullet lists

2

3By Swaminathan https://www.flickr.com/photos/araswami/2284451064/

Been doing cloud for 6 years and cloud native for 4 years. Yes, there is a difference

4By Ted Silveira https://www.flickr.com/photos/cafebongo/14062452417/

Went from a large monolithic pet app to a cloud native application through a practical process

5By Dubwise Version https://www.flickr.com/photos/dubwise_version/4718137117

1.Why care about cloud native development?

2.What is cloud native?3.What tools can be used?4.How can you get from here to there?

6

Why care about cloud native?

7

8By: Fernando Frazão/Agência Brasil

Speed and Flexibility

9Almost No Downtime

By: Marcin Wichary

What does cloud native really mean?

10

“container packaged, dynamically scheduled, and microservices based application development and operations.”– Cloud Native Computing Foundation (CNCF)

11

“container packaged”

12By Sergio Morchon https://www.flickr.com/photos/smorchon/2431349077/

Containers isn’t just Docker…

13

Does this mean I can’t do cloud native with VMs?

14

“dynamically scheduled”

15

Method 1: You Manage It

16

Object Storage

Chef, Ansible, or Puppet

Network

Compute

Compute

Compute

Compute

Compute

Compute

Compute

Compute

But, what way do most desktop applications work?

Choice 1 Choice B

17

App Laptop

Desktop

Pro Desktop

App CPU(s)

RAM

Drives

NIC(s)

Method 2: Datacenter/Cluster as a Computer

18

Computer

• Could be a datacenter, rack, or single computer

• Manages the needed infra and changes for your apps for you

• Think of it as one computer rather than managed collection

REST API

What’s Happening Inside The Computer?

19

Computer

REST APIRouter

Scheduler

App 1 App 2

App 3 App 4

Storage

Config

20

Combined Truth

21

ComputerREST API

Server

Server

Server Server

Server

ServerRouter

Router

Router

Chef, Ansible, or

Puppet

As app devs and operators see it What infra devs and operators do

Managing Apps and a Datacenter as a Computer

22

What You Can Use Today

23

“microservices based”

What is a microservice?–Small–Focused on doing one thing well (single responsibility principle)–Independently deployable–Clearly defined API for interaction–Potentially reusable in other systems

24

25

Monolithic App

Monolithic App

Monolithic App

Monolithic App

Micro Micro Micro Micro Micro

Micro

Micro

Micro

Micro

Micro

Micro

Micro

Micro

Potential Network ProblemDon’t let the network be your bottleneck

26

What makes a good REST API?

– Versioned, typically in the URL

– Use proper HTTP methods

– Behind Authentication and Authorization

– HTTP/2 if possible (for pipelines and connection reuse)

– TLS/HTTPS (encrypted transport)

– Proper HTTP response codes

– JSON

– Open API Initiative (Swagger)

27

Reuse connections

28

HTTP/2 and Pipelining

29

12 Factor++ (12factor.net)

1. One codebase tracked in revision control, many deploys

2. Explicitly declare and isolate dependencies

3. Store config in the environment4. Treat backing services as attached

resources5. Strictly separate build and run

stages6. Execute the app as one or more

typically stateless processes containers

7. Export services via port binding8. Scale out via the process model

containers9. Maximize robustness with fast

startup and graceful shutdown10.Keep development, staging, and

production as similar as possible11.Treat logs as event streams12.Run admin/management tasks as

one-off processes containers

30

Store config in the environment

31

Treat backing services as attached resources

32

µ

Execute the app as one or more stateless processes

33

Treat logs as event streams (stdout)

34

Pets vs cattle

35

Updating Applications

36

37

App(online)

App(online)

App(online)

App(offline)

App(offline)

App(offline)

App(update)

App(update)

App(update)

App(online)

App(online)

App(online)

Blue / Green DeploymentsStart with Green

38

RouterUsers

AppAppAppApp

AppAppAppApp

Blue / Green DeploymentsSwitch to Blue

39

RouterUsers

AppAppAppApp

AppAppAppApp

Canary Release

40

Rolling Updates

41

v1 v1

v1 v1

v1 v1

v1 v1

v1 v1

v1 v1

v1 v1

v1 v1

v1 v1

v1 v1

v1 v1

v1 v1

v1 v1

v1 v1

v1 v1

v1 v1

Rolling Updates

42

v2 v1

v1 v1

v1 v1

v1 v1

v1 v1

v1 v1

v1 v1

v1 v1

v1 v1

v1 v1

v1 v1

v1 v1

v1 v1

v1 v1

v1 v1

v1 v1

Rolling Updates

43

v2 v2

v1 v1

v2 v2

v1 v1

v1 v1

v1 v1

v1 v1

v1 v1

v2 v1

v1 v1

v1 v1

v1 v1

v1 v1

v1 v1

v1 v1

v1 v1

Rolling Updates

44

v2 v2

v2 v2

v2 v2

v2 v2

v2 v2

v2 v2

v2 v2

v2 v2

v2 v2

v2 v2

v2 v2

v2 v2

v2 v2

v2 v2

v2 v2

v2 v2

3 Paths To Cloud Native:

1. Migration2. Greenfield3. Additive

45

Path 1: Migrating

46

My Web App Before The Cloud

47

This may look familiar

Webserver

Webserver

Webserver

Webserver

Load BalancersLoad BalancersUsersSharedfilesystemVia Gluster

memcached

memcached

memcached

memcached

MySQL

MySQL

MySQL

MySQL

MySQL had master and slave with fail over

Setup split between two physical locations

Individual servers managed by Chef in Prod, Test, and Dev environments

3x Web Apps+ more coming

48

… at the same time... Experiments in the cloud

49

Object Storage

VMVM VM

VM VM VM

Network

Users

Cloud resources managed by scripts and toolchains (like Chef)

Block Storage

50

51

52

aPaaS

53

Development Platform

54

Stackato Cluster(s)

Stackato ClustersProduction, QA, and Development Clusters

55

App 1

Load BalancersLoad BalancersUsersmemcachedmemcachedmemcached

MySQLMySQLMySQL

MySQL shifted over life of cluster. In Stackato and SaaS were used

Automation and scripts managed the clusters running on a IaaS (backed by VMs, Networking, Block Storage, and Object Storage).

App 1App 1

App 1App 1App 2

App 1App 1App N

…Detected top level problems and handled some failover

Ops Managed Platform

Filesystem Service

Stackato ClustersDev Process

56

Production Stackato

QAStackato

DevStackato

PersonalEnvironment(s)

CI/CDGitDev

Branch to environment:master → productionQA → QAdevel → Dev

Production and QA used blue/green deployments with zero downtime

Features work on via feature branches

Continuous Integration is about trust

57https://commons.wikimedia.org/wiki/File:CISV_trust_game.JPG

Continuous Integration brings reproducibility

58

https://en.wikipedia.org/wiki/Assembly_line#/media/File:Ford_assembly_line_-_1913.jpg https://en.wikipedia.org/wiki/KUKA_Systems#/media/File:Application_field_automotive.jpg

What is CD in CI/CD?

Continuous Delivery

Continuous Deployment

59

Code change pushed

Test code

BuildImage

Store build

...New build detected /

chosenDeploy to

environment

Started With A Mono App

60

Stackato

memcached

MySQL

Filesystem Service

App 1Big Mono App

Started With A Mono App

61

Stackato

memcached

MySQL

Filesystem Service

App 1Slightly SmallerBig App

App 1Microservice(App 2)

Path 2: Greenfield

62

Start With Your Setup

63

Computer

REST API

Setup CI

64

Environment 1 Stackato

Environment 2 Stackato

Environment 3 Stackato

PersonalEnvironment(s)

CI/CD(Code Engine /

Jenkins)GitDev

Built a Cloud Native Application

65

Stackato

DB DB DB

User InterfaceSe

rvic

e 1

Serv

ice

2

Serv

ice

3

Serv

ice

4

Serv

ice

N

… SaaS

Built a Cloud Native Application

66

Docker

DB DB DB

User InterfaceSe

rvic

e 1

Serv

ice

2

Serv

ice

3

Serv

ice

4

Serv

ice

N

… SaaS

Automation and ChatOps FTW

67

Path 3: Additive

68

We had a traditional application

69

These were physical but could have been VM

Webserver

Webserver

WebserverLoad BalancersLoad BalancersUsers

MongoDB

MongoDB

MongoDB

MongoDB

Setup split between multiple physical locations

Individual servers managed by Chef in Prod, Test, and Dev environments

Webserver

Added Cloud Native Environment

70

The legacy environment was not retired

Webserver

Webserver

Webserver MongoDB

MongoDB

MongoDB

MongoDB

Legacy App called to cloud native app over REST API

Webserver

Stackato

Service 1

Service 2

Service 3

Service 4

Load BalancersLoad BalancersUsers

Monitor Everything

71

Webserver

Webserver

WebserverMongoDB

MongoDB

MongoDB

MongoDBWebserver

Stackato

Service 1 Service 2

Load BalancersLoad BalancersUsers

Monitor IntelligentlyIf you didn’t monitor it did it happen?

72

Tools You Can Use

73

74

Datacenter/Cluster as a ComputerMake it easy for developers

75

Computer

REST APIThing that deploys

Start With A PlatformThink Datacenter as a Computer

76

Lifecycle ManagementConsider Helm when using Kubernetes

77

Kubernetes

REST APIHelm (to manage deployment)

CI/CD

The CI/CD SystemMake it easy for developers

78

Computer

REST APIThing that deploysGitDev

CI/CD SystemsThere are just so many

79

Some Are Container Based By Default

80

ChatOps

81

Config service

82

Monitor Everything

83

GitHub ScientistPlus others following suit with more language support

84

GitHub Scientisthttp://githubengineering.com/scientist/

85

Questions?Matt Farina@mattfarinamattfarina.com / hpe.com

86

top related