Migrating to Cloud FoundryPeter Ledbrook - VMwaret: @pledbrooke: pledbrook@vmware.com© 2012 VMware, Inc. All rights reserv...
What’s happening with applications today?Frameworks are what really matter  •  Developer productivity and innovation  •  R...
The promise of PaaS           App 1             App 2          App 3                            Platform        Servlet Co...
The Open        Platform as a Service Deploy and scale applications inseconds, without locking yourself        into a sing...
Choice of frameworks, services & clouds                                      OSS community               ne!             l...
Choice of frameworks, services & clouds                                                                   OSS community   ...
Choice of frameworks, services & clouds                                                                                   ...
Real choice of provider Choice of Private    Choice of Public   Choice of CloudCloud Distributions   Cloud Providers     I...
Deployment tools          vmc (command line)                               9
Core services                10
Developer Perspective• Program to standard APIs  – SQL drivers  – Mongo client libraries  – ...• Connection settings from ...
When you’re ready to deploy...     !     !       !$!vmc!target!<any!cloud>!     !!       !$!vmc!push!<my6app>!     !      ...
The sample application• http://grails.org• Built with Grails  – JVM web framework  – Spring MVC under the hood  – Groovy a...
14
15
16
17
Architecture                       HTTP        Controller              View                                               ...
Single instance                     Cache                             Search               Job                            ...
Single instance                    Cache                            Search              Job                            ind...
Single instance                     Cache                             Search               Job                            ...
Multi-instance       Cache                         Cache                      Cache               Search                  ...
Multi-instance       Cache                         Cache                         Cache                 Search             ...
Caching          Caching shared data                  ==             Shared cache                                24
Ehcache           Simple & effective           Distributed mode           But...     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 insta...
Grails Cache plugin• Based on Spring 3.1 cache abstraction  – @Cacheable  – @CacheEvict• Ehcache & Redis providers  – Spri...
28
HTTP session               Sticky sessions!                                  29
HTTP session         Or consider Redis for         distributed session store                                     30
Jobs• @Scheduled, Quartz, etc.• Which node runs a job?        Local data             Shared data       Do nothing        Q...
Distribution with workers                            Worker                            Worker                             ...
Distribution with workers                                     Worker                                     Worker           ...
Jobs                     Pros                   Cons            Efficient in-JVM       Extra burden on web            proc...
Search• Compass 2.0  – Lucene indexes on local file system  – Indexes database data• > 1 node == stale indexes• Search as ...
Synchronisation with an event bus      Distribute                                   Distribute                   Distribut...
Event bus                                             Update    Call REST                     Save entity    Index   read ...
Event bus• Platform Core plugin  – Event API + simple in-memory implementation• Events Si plugin  – Event bus implementati...
Schrödinger’s Cat            Is the cat alive or dead?                                        39
Schrödinger’s Cat           Resolved only when we look                                        40
Local filesystem                                  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 ...
Wiki images       mongo-file plugin                    for example                                  Blob store            ...
Logging• View logs with `vmc logs`• What if the application instance is restarted?  – Logs are gone• What about multiple a...
Distributed logging              Node.js +                                 SockJS +                                 MongoD...
Config              Package in the app?               Store in database?         Inject via environment variable?         ...
Dynamic config load                            Config.groovy                      ConfigLoader.groovy                     ...
Mail• No SMTP - oh no!• HTTP providers  – SendGrid  – Mailgun  – Amazon Simple Email Service                              ...
Easy HTTP Mail                 resources.groovy                 MailerJob.groovy                                    49
Data       How do we load initial data?       Perform data migrations?             Back data up?                          ...
Access your services                   Mongo Client                    vmc tunnel                     (SSH Tunnel)        ...
Import/export         Import == mysql < data.sql         Export == mysqldump                                      52
Application (WIP*)   Source     https://github.com/grails-samples/grails-website   Live       http://grails-website.cloudf...
Summary• PaaS is the application platform for the Cloud era• Cloud Foundry can support real applications• PaaS will change...
What’s next?• Sign up - www.cloudfoundry.com• Get the source code - www.cloudfoundry.org• Download your Micro Cloud Foundr...
Q&A
Upcoming SlideShare
Loading in …5
×

Migrating to CloudFoundry

4,744 views

Published on

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

Published in: Technology, Business
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,744
On SlideShare
0
From Embeds
0
Number of Embeds
870
Actions
Shares
0
Downloads
49
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Migrating to CloudFoundry

  1. Migrating to Cloud FoundryPeter Ledbrook - VMwaret: @pledbrooke: pledbrook@vmware.com© 2012 VMware, Inc. All rights reserved.
  2. What’s happening with applications today?Frameworks are what really matter •  Developer productivity and innovation •  Reduce time to marketNew application types •  Mobile, Social, SaaS •  Apps released early and oftenData intensive •  Emerging requirements: elasticity, multi-cloud •  Web orientation drives exponential data volumesDeployed on virtual and cloud infrastructures •  Virtualization, Cloud, PaaS 2
  3. The promise of PaaS App 1 App 2 App 3 Platform Servlet Container Database Other services Infrastructure CPU Memory OS • Zero config • Automatic provisioning 3
  4. The Open Platform as a Service Deploy and scale applications inseconds, without locking yourself into a single cloud Open, ple, ble Sim , Scala lexible F
  5. Choice of frameworks, services & clouds OSS community ne! lo da an St + 5
  6. 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 … 6
  7. 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 7
  8. Real choice of provider Choice of Private Choice of Public Choice of CloudCloud Distributions Cloud Providers Infrastructure .COM Bare metal 8
  9. Deployment tools vmc (command line) 9
  10. Core services 10
  11. Developer Perspective• Program to standard APIs – SQL drivers – Mongo client libraries – ...• Connection settings from VCAP_SERVICES environment variable 11
  12. When you’re ready to deploy... ! ! !$!vmc!target!<any!cloud>! !! !$!vmc!push!<my6app>! ! !!!>!bind!services?!Yes! ! !$!vmc!instances!<my6app>!+100!! ! ! ! That’s all folks! 12
  13. 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. 14
  15. 15
  16. 16
  17. 17
  18. Architecture HTTP Controller View Twitter Service REST Async Plugin Update GORM/Hibernate Database Forum + Jobs 18
  19. Single instance Cache Search Job indices App Node Local, embedded ehcache 19
  20. Single instance Cache Search Job indices App Node Local Lucene indexes 20
  21. Single instance Cache Search Job indices App Node Single job of each type 21
  22. Multi-instance Cache Cache Cache Search Search SearchJob Job Job indices indices indices App App App Node Node Node3. Return 2. Return 3. Return 1. Updatestale data latest stale data 22
  23. Multi-instance Cache Cache Cache Search Search SearchJob Job Job indices indices indices App App App Node Node Node Mail Job Mail Job Mail Job Jobs are executed three times? 23
  24. Caching Caching shared data == Shared cache 24
  25. Ehcache Simple & effective Distributed mode But... No multicast on Cloud Foundry! 25
  26. So, what do we use?• Key-value store• In-memory with persistence (fast)• Pub-sub• Single service for all app instances 26
  27. 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. 28
  29. HTTP session Sticky sessions! 29
  30. HTTP session Or consider Redis for distributed session store 30
  31. Jobs• @Scheduled, Quartz, etc.• Which node runs a job? Local data Shared data Do nothing Quartz JDBC Worker Store 31
  32. Distribution with workers Worker Worker Worker ? App App App Node Node Node 32
  33. Distribution with workers Worker Worker Worker Node-specific data App App App Node Node Node 33
  34. 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 34
  35. 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
  36. Synchronisation with an event bus Distribute Distribute Distribute Initiate event Event Event Event bus bus bus 36
  37. Event bus Update Call REST Save entity Index read DBs serviceSpring Integration Event Bus AMQP Plugins Plugins Plugins Application 37
  38. 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
  39. Schrödinger’s Cat Is the cat alive or dead? 39
  40. Schrödinger’s Cat Resolved only when we look 40
  41. Local filesystem There’s a file in here! Does the file exist or not? 41
  42. 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
  43. Wiki images mongo-file plugin for example Blob store GridFS Controller Upload User 43
  44. 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
  45. Distributed logging Node.js + SockJS + MongoDB AMQP AMQP AMQP Appender Appender Appender App App App Node Node Node 45
  46. Config Package in the app? Store in database? Inject via environment variable? 46
  47. Dynamic config load Config.groovy ConfigLoader.groovy 47
  48. Mail• No SMTP - oh no!• HTTP providers – SendGrid – Mailgun – Amazon Simple Email Service 48
  49. Easy HTTP Mail resources.groovy MailerJob.groovy 49
  50. Data How do we load initial data? Perform data migrations? Back data up? 50
  51. Access your services Mongo Client vmc tunnel (SSH Tunnel) Cloud Foundry MongoDB service 51
  52. Import/export Import == mysql < data.sql Export == mysqldump 52
  53. Application (WIP*) Source https://github.com/grails-samples/grails-website Live http://grails-website.cloudfoundry.com/* Work in Progress 53
  54. 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
  55. 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
  56. Q&A

×