Migrating to CloudFoundry

  • 2,809 views
Uploaded on

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

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

More in: Technology , Business
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
2,809
On Slideshare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
45
Comments
0
Likes
3

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 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