Advertisement

Migrating to Cloud Foundry

Grails Advocate
May. 28, 2012
Advertisement

More Related Content

Advertisement
Advertisement

Migrating to Cloud Foundry

  1. Migrating to Cloud Foundry Peter Ledbrook - VMware t: @pledbrook e: 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 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
  4. Choice of frameworks, services & clouds OSS community ne! lo da an St + 4
  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
  8. Deployment tools vmc (command line) 8
  9. Core services 9
  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
  13. 13
  14. 14
  15. 15
  16. 16
  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
  27. 27
  28. HTTP session Sticky sessions! 28
  29. HTTP session Or consider Redis for distributed session store 29
  30. Jobs • @Scheduled, Quartz, etc. • Which node runs a job? Local data Shared data Do nothing Quartz JDBC Worker Store 30
  31. Distribution with workers Worker Worker Worker ? App App App Node Node Node 31
  32. Distribution with workers Worker Worker Worker Node-specific data App App App Node Node Node 32
  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
  41. Distributed logging Node.js + SockJS + MongoDB AMQP AMQP AMQP Appender Appender Appender App App App Node Node Node 41
  42. Config Package in the app? Store in database? Inject via environment variable? 42
  43. Dynamic config load Config.groovy ConfigLoader.groovy 43
  44. Mail • No SMTP - oh no! • HTTP providers – SendGrid – Mailgun – Amazon Simple Email Service 44
  45. Easy HTTP Mail resources.groovy MailerJob.groovy 45
  46. Data How do we load initial data? Perform data migrations? Back data up? 46
  47. Access your services Mongo Client vmc tunnel (SSH Tunnel) Cloud Foundry MongoDB service 47
  48. Import/export Import == mysql < data.sql Export == mysqldump 48
  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
  52. Q&A
Advertisement