This document discusses migrating applications to Cloud Foundry. It notes that new application types like mobile, social, and SaaS apps are being released early and often. It also discusses that applications are becoming more data intensive. Cloud Foundry is presented as an open Platform as a Service that allows deploying and scaling applications in seconds across multiple clouds without lock-in. It reviews core Cloud Foundry services and the developer experience. Challenges like caching, jobs, search, logging and configuration are discussed. Overall, it promotes Cloud Foundry as the application platform for the cloud era and encourages learning more and getting involved.
2. What’s happening with applications today?
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
2
3. The Open
Platform as a Service
Deploy and scale applications in
seconds, without locking yourself
into a single cloud
Open,
ple, ble
Sim , Scala
lexible
F
5. Choice of frameworks, services & clouds
OSS community
e!
on
al
a nd
St
+
vFabric
Postgres
Ap
p
Data
lica
Services
'o
n *S
vFabric
erv
RabbitMQTM Msg
ice
Services
*In
ter
fac
e*
Other
Services
Additional partners
services …
5
6. Choice of frameworks, services & clouds
OSS community
ne!
lo
da
an
St
+
vFabric
Postgres
Ap
e(
Private((
p
fac
Data
lica
Services
Clouds((
ter
'o
r(In
n *S
vFabric
ide
erv
RabbitMQTM Public(
ov
Msg
ice
(Pr
Services
Clouds( Partners(
*In
ud
ter
Cl o
fac
.COM
Micro(
e*
Other
Services Clouds(
Additional partners
services …
A void
Lo ck-in
6
7. Real choice of provider
Choice of Private Choice of Public Choice of Cloud
Cloud Distributions Cloud Providers Infrastructure
.COM
Bare metal
7
10. Developer Perspective
• Program to standard APIs
– SQL drivers
– Mongo client libraries
– ...
• Connection settings from VCAP_SERVICES environment
variable
10
11. When you’re ready to deploy...
!
!
!$!vmc!target!<any!cloud>!
!!
!$!vmc!push!<my6app>!
!
!!!>!bind!services?!Yes!
!
!$!vmc!instances!<my6app>!+100!!
!
!
! That’s all folks!
11
12. The sample application
• http://grails.org
• Built with Grails
– JVM web framework
– Spring MVC under the hood
– Groovy as the main development language
12
17. Architecture
HTTP
Controller View
Twitter
Service REST
Async Plugin
Update
GORM/Hibernate
Database
Forum
+ Jobs
17
18. Single instance
Cache
Search
Job
indices
App
Node
Local, embedded ehcache
18
19. Single instance
Cache
Search
Job
indices
App
Node
Local Lucene indexes
19
20. Single instance
Cache
Search
Job
indices
App
Node
Single job of each type
20
21. Multi-instance
Cache Cache Cache
Search Search Search
Job Job Job
indices indices indices
App App App
Node Node Node
3. Return 2. Return 3. Return
1. Update
stale data latest stale data
21
22. Multi-instance
Cache Cache Cache
Search Search Search
Job Job Job
indices indices indices
App App App
Node Node Node
Mail Job Mail Job Mail Job
Jobs are executed three times?
22
23. Caching
Caching shared data
==
Shared cache
23
24. Ehcache
Simple & effective
Distributed mode
But...
No multicast on Cloud Foundry!
24
25. So, what do we use?
• Key-value store
• In-memory with persistence (fast)
• Pub-sub
• Single service for all app instances
25
26. Grails Cache plugin
• Based on Spring 3.1 cache abstraction
– @Cacheable
– @CacheEvict
• Ehcache & Redis providers
– Spring Data RedisCacheManager
• <cache:block>
• <cache:render template=”...”>
26
33. Jobs
Pros Cons
Efficient in-JVM Extra burden on web
processing server
Quartz Tried & tested
Relatively simple
Use right language for Counts against your
the job quota
Workers Distribute the workload
33
34. 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
34
35. Synchronisation with an event bus
Distribute Distribute
Distribute
Initiate
event
Event Event Event
bus bus bus
35
36. Schrödinger’s Cat
There’s a cat in here!
Is the cat alive or dead?
36
37. Local filesystem
There’s a file in here!
Does the file exist or not?
37
38. 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
38
39. Wiki images
Blob store
GridFS
Controller
Upload
User
39
40. 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?
40
49. Application (WIP*)
Source https://github.com/grails-samples/grails-website
Live http://grails-website.cloudfoundry.com/
* Work in Progress
49
50. Summary
• PaaS is the application platform for the Cloud era
• 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
50
51. 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
51