Migrating to CloudFoundry


Published on

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

Published in: Technology, Business
  • Be the first to comment

No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
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