migrating to cloudfoundry
Post on 17-May-2015
2.907 Views
Preview:
DESCRIPTION
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
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
• 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