migrating to cloudfoundry

Post on 17-May-2015

2.907 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

As presentet at GR8Conf EU 2012: http://gr8conf.eu/Presentations/Migrating-to-CloudFoundry

TRANSCRIPT

© 2012 VMware, Inc. All rights reserved.

Migrating to Cloud Foundry

Peter Ledbrook - VMwaret: @pledbrooke: pledbrook@vmware.com

What’s happening with applications today?

2

Frameworks are what really matter • Developer productivity and innovation

• Reduce time to market

New application types • Mobile, Social, SaaS

•  Apps released early and often

Data intensive •  Emerging requirements: elasticity, multi-cloud

• Web orientation drives exponential data volumes

Deployed on virtual and cloud infrastructures •  Virtualization, Cloud, PaaS

The promise of PaaS

3

InfrastructureCPU Memory OS

PlatformServlet Container Database Other services

App 1 App 2 App 3

• Zero config• Automatic provisioning

Deploy and scale applications in seconds, without locking yourself

into a single cloud

Simple, Open,

Flexible, Scalable

The Open Platform as a Service

5

Choice of frameworks, services & cloudsOSS community

+ Standalone!

6

Choice of frameworks, services & cloudsOSS community

Applica'on*Service*Interface*

Data Services

Other Services

Msg Services

vFabric Postgres

vFabric RabbitMQTM

Additional partners services …

+ Standalone!

7

Choice of frameworks, services & cloudsOSS community

Applica'on*Service*Interface*

Data Services

Other Services

Msg Services

vFabric Postgres

vFabric RabbitMQTM

Additional partners services …

Private((Clouds((

Public(Clouds(

Micro(Clouds(

.COM

Partners(

Cloud(Provide

r(Interface(

Avoid

Lock-in

+ Standalone!

Real choice of provider

8

Choice of Cloud Infrastructure

Bare metal

Choice of Private Cloud Distributions

Choice of Public Cloud Providers

.COM

Deployment tools

9

vmc (command line)

Core services

10

Developer Perspective

• Program to standard APIs– SQL drivers– Mongo client libraries– ...

• Connection settings from VCAP_SERVICES environment variable

11

When you’re ready to deploy...

12

!!!$!vmc!target!<any!cloud>!

!!!$!vmc!push!<my6app>!

!!!!>!bind!services?!Yes!

!!$!vmc!instances!<my6app>!+100!!

!!! That’s all folks!

The sample application

• http://grails.org• Built with Grails

– JVM web framework– Spring MVC under the hood– Groovy as the main development language

13

14

15

16

17

Architecture

18

Controller View

HTTP

Service

GORM/Hibernate

Database

REST

Async Plugin Update

Twitter

Forum+ Jobs

App Node

Cache

SearchindicesJob

Single instance

19

App Node

Cache

SearchindicesJob

App Node

Cache

SearchindicesJob

Local, embedded ehcache

App Node

Cache

SearchindicesJob

Single instance

20

App Node

Cache

SearchindicesJob

App Node

Cache

SearchindicesJob

Local Lucene indexes

App Node

Cache

SearchindicesJob

Single instance

21

App Node

Cache

SearchindicesJob

App Node

Cache

SearchindicesJob

Single job of each type

App Node

Cache

SearchindicesJob

Multi-instance

22

App Node

Cache

SearchindicesJob

App Node

Cache

SearchindicesJob

1. Update2. Returnlatest

3. Returnstale data

3. Returnstale data

App Node

Cache

SearchindicesJob

Multi-instance

23

App Node

Cache

SearchindicesJob

App Node

Cache

SearchindicesJob

Mail Job Mail Job Mail Job

Jobs are executed three times?

Caching

24

Caching shared data==

Shared cache

Ehcache

25

Simple & effectiveDistributed modeBut...

No multicast on Cloud Foundry!

So, what do we use?

• Key-value store• In-memory with persistence (fast)• Pub-sub• Single service for all app instances

26

Grails Cache plugin

• Based on Spring 3.1 cache abstraction– @Cacheable– @CacheEvict

• Ehcache & Redis providers– Spring Data RedisCacheManager

• <cache:block>• <cache:render template=”...”>

27

28

HTTP session

29

Sticky sessions!

HTTP session

30

Or consider Redis fordistributed session store

Jobs

• @Scheduled, Quartz, etc.• Which node runs a job?

31

Local data

Do nothing

Shared data

Quartz JDBC Store

Worker

AppNode

Distribution with workers

32

AppNode

AppNode

WorkerWorkerWorker

?

AppNode

Distribution with workers

33

AppNode

AppNode

WorkerWorkerWorker

Node-specificdata

Jobs

34

Pros Cons

Quartz

Workers

Efficient in-JVM processingTried & testedRelatively simple

Extra burden on web server

Use right language for the jobDistribute the workload

Counts against your quota

Search

• Compass 2.0– Lucene indexes on local file system– Indexes database data

• > 1 node == stale indexes• Search as a service

– Solr– Elastic Search– Index Tank– Amazon Cloud Search– Not on Cloud Foundry (yet)

• Synchronise indexes across nodes!– Eventual consistency is good enough

35

Event bus

Synchronisation with an event bus

36

Event bus

Event bus

Initiate event

Distribute

Distribute

Distribute

Event bus

37

Event Bus

Plugins ApplicationPluginsPlugins

Spring Integration AMQP

Save entity IndexUpdate

read DBsCall REST

service

Event bus

• Platform Core plugin– Event API + simple in-memory implementation

• Events Si plugin– Event bus implementation using Spring Integration

• Events Push plugin– Bridge events to browser via Atmosphere

• Potentially the standard cloud architecture– Message passing (relatively) easy to scale horizontally

38

Schrödinger’s Cat

39

Is the cat alive or dead?

Schrödinger’s Cat

40

Resolved only when we look

Local filesystem

41

There’s a file in here!

Does the file exist or not?

Ephemeral file system

• VMs are created and destroyed– => application file system created and destroyed– You can write to the local file system...– ...but you will probably lose that data at some point

• Don’t store persistent data on local FS!– File uploads

42

Wiki images

43

Controller

User

Upload

GridFSBlob store

mongo-file plugin for example

Logging

• View logs with `vmc logs`• What if the application instance is restarted?

– Logs are gone• What about multiple application instances?

– `vmc logs --instance 1` or `vmc logs --all`– but 30 days after deployment?

44

App Node

Distributed logging

45

App Node

App Node

AMQPAppender

AMQPAppender

AMQPAppender

Node.js +SockJS +MongoDB

Config

46

Package in the app?

Store in database?

Inject via environment variable?

Dynamic config load

47

Config.groovy

ConfigLoader.groovy

Mail

• No SMTP - oh no!• HTTP providers

– SendGrid– Mailgun– Amazon Simple Email Service

48

Easy HTTP Mail

49

resources.groovy

MailerJob.groovy

Data

50

How do we load initial data?

Perform data migrations?

Back data up?

Access your services

51

Mongo Client

vmc tunnel

Cloud Foundry

MongoDBservice

(SSH Tunnel)

Import/export

52

Import == mysql < data.sql

Export == mysqldump

Application (WIP*)

53

https://github.com/grails-samples/grails-website

http://grails-website.cloudfoundry.com/

Source

Live

* Work in Progress

Summary

• PaaS is the application platform for the Cloud era• Cloud Foundry can support real applications• PaaS will change the way you write apps

– Design for horizontal scalability– Account for ephemeral file system– Rich set of services– Go polyglot!

• Tools & libraries are important– Spring for the win!

• Can use Redis in place of RabbitMQ for some patterns

54

What’s next?

• Sign up - www.cloudfoundry.com• Get the source code - www.cloudfoundry.org• Download your Micro Cloud Foundry –

my.cloudfoundry.com/micro• Learn more on the Cloud Foundry blog -

blog.cloudfoundry.com• Follow us - @cloudfoundry

55

Q&A

top related