Migrating to Cloud Foundry

4,376 views

Published on

Presentation at GOTO Amsterdam 2012 on how to migrate an existing servlet-based application to the Cloud Foundry PaaS.

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

No Downloads
Views
Total views
4,376
On SlideShare
0
From Embeds
0
Number of Embeds
1,018
Actions
Shares
0
Downloads
72
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Migrating to Cloud Foundry

  1. 1. Migrating to Cloud FoundryPeter Ledbrook - VMwaret: @pledbrooke: pledbrook@vmware.com© 2012 VMware, Inc. All rights reserved.
  2. 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. 3. 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
  4. 4. Choice of frameworks, services & clouds OSS community ne! lo da an St + 4
  5. 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. 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. 7. Real choice of provider Choice of Private Choice of Public Choice of CloudCloud Distributions Cloud Providers Infrastructure .COM Bare metal 7
  8. 8. Deployment tools vmc (command line) 8
  9. 9. Core services 9
  10. 10. Developer Perspective• Program to standard APIs – SQL drivers – Mongo client libraries – ...• Connection settings from VCAP_SERVICES environment variable 10
  11. 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. 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
  13. 13. 13
  14. 14. 14
  15. 15. 15
  16. 16. 16
  17. 17. Architecture HTTP Controller View Twitter Service REST Async Plugin Update GORM/Hibernate Database Forum + Jobs 17
  18. 18. Single instance Cache Search Job indices App Node Local, embedded ehcache 18
  19. 19. Single instance Cache Search Job indices App Node Local Lucene indexes 19
  20. 20. Single instance Cache Search Job indices App Node Single job of each type 20
  21. 21. 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 21
  22. 22. 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? 22
  23. 23. Caching Caching shared data == Shared cache 23
  24. 24. Ehcache Simple & effective Distributed mode But... No multicast on Cloud Foundry! 24
  25. 25. So, what do we use?• Key-value store• In-memory with persistence (fast)• Pub-sub• Single service for all app instances 25
  26. 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
  27. 27. 27
  28. 28. HTTP session Sticky sessions! 28
  29. 29. HTTP session Or consider Redis for distributed session store 29
  30. 30. Jobs• @Scheduled, Quartz, etc.• Which node runs a job? Local data Shared data Do nothing Quartz JDBC Worker Store 30
  31. 31. Distribution with workers Worker Worker Worker ? App App App Node Node Node 31
  32. 32. Distribution with workers Worker Worker Worker Node-specific data App App App Node Node Node 32
  33. 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. 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. 35. Synchronisation with an event bus Distribute Distribute Distribute Initiate event Event Event Event bus bus bus 35
  36. 36. Schrödinger’s Cat There’s a cat in here! Is the cat alive or dead? 36
  37. 37. Local filesystem There’s a file in here! Does the file exist or not? 37
  38. 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. 39. Wiki images Blob store GridFS Controller Upload User 39
  40. 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
  41. 41. Distributed logging Node.js + SockJS + MongoDB AMQP AMQP AMQP Appender Appender Appender App App App Node Node Node 41
  42. 42. Config Package in the app? Store in database? Inject via environment variable? 42
  43. 43. Dynamic config load Config.groovy ConfigLoader.groovy 43
  44. 44. Mail• No SMTP - oh no!• HTTP providers – SendGrid – Mailgun – Amazon Simple Email Service 44
  45. 45. Easy HTTP Mail resources.groovy MailerJob.groovy 45
  46. 46. Data How do we load initial data? Perform data migrations? Back data up? 46
  47. 47. Access your services Mongo Client vmc tunnel (SSH Tunnel) Cloud Foundry MongoDB service 47
  48. 48. Import/export Import == mysql < data.sql Export == mysqldump 48
  49. 49. Application (WIP*) Source https://github.com/grails-samples/grails-website Live http://grails-website.cloudfoundry.com/* Work in Progress 49
  50. 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. 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
  52. 52. Q&A

×