Top Banner
HOW WE TOOK OUR SERVER- SIDE APPLICATION TO THE CLOUD… …and liked what we got
101

How we took our server side application to the cloud and liked what we got, Baruch Sadogursky

Jan 17, 2015

Download

Technology

DevOps Israel

Taking traditional Java server-side applications to the multi-tenant Cloud introduces lots of challenges. In this session, we will share our experience of creating a SaaS offering, which is currently being used successfully by the Java community. We will start by reviewing the challenges we faced during the SaaS conversion. Next, we will share our experience with the EC2 platform. We will discuss the importance of automation and how we use tools like Chef and Puppet for SaaS provisioning. Finally, we will describe how creating a SaaS version of our product shifted our way of thinking about software release. We will recommend what’s required to successfully release both SaaS and downloadable versions of your product.

Presented in the Case Studies and Tools track at DevOps Con Israel 2013
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • 1. HOW WE TOOK OUR SERVER-SIDE APPLICATION TO THECLOUDand liked what we got

2. Agenda Where we started What we did Paradigm shift 3. First Things First 3 4. BACKGROUND 5. Whos talking? 6. Developer who? 7. Developer who? 8. JFrog Where? 9. JFrog Where? 10. JFrog Where? 11. JFrog Where? 12. Artifactory what? 13. Yet Another Java Server App 14. Moving Forward 15. Moving Forward 16. Moving Forward 17. Moving Forward 18. Moving Forward 19. Artifactory SaaS 20. Artifactory SaaSetc. 21. Moving Forward 22. A load of Artifacts! 23. JOURNEY TO THE CLOUD 24. THE *AAS BUZZ 25. * As A Service Self Service Multi-tenant 26. GaaE: Google as an ExampleProductSelfMulti- * aaS Service tenant 27. GaaE: Google as an ExampleProductSelfMulti- * aaS Service tenantGmailNot *aaS, web-app 28. GaaE: Google as an ExampleProduct SelfMulti- * aaSService tenantGmail Not *aaS, web-appGoogle Apps SaaS 29. GaaE: Google as an ExampleProduct SelfMulti- * aaSService tenantGmail Not *aaS, web-appGoogle Apps SaaSGoogle App Engine PaaS 30. GaaE: Google as an ExampleProduct SelfMulti- * aaSService tenantGmail Not *aaS, web-appGoogle Apps SaaSGoogle App Engine PaaSGoogle Compute Engine IaaS 31. AaaE: Amazon as an ExampleProduct SelfMulti- * aaSService tenant 32. AaaE: Amazon as an ExampleProductSelfMulti- * aaS Service tenantAmazon storeNot *aaS, web-app 33. AaaE: Amazon as an ExampleProductSelfMulti- * aaS Service tenantAmazon storeNot *aaS, web-appaStore SaaS 34. AaaE: Amazon as an ExampleProductSelfMulti- * aaS Service tenantAmazon storeNot *aaS, web-appaStore SaaSAmazon Elastic Beanstalk PaaS 35. AaaE: Amazon as an ExampleProductSelfMulti- * aaS Service tenantAmazon storeNot *aaS, web-appaStore SaaSAmazon Elastic Beanstalk PaaSAmazon Elastic Cloud IaaS 36. The SaaS Pains - Overview Multi-tenancy Platform selection> PaaS or IaaS DB schema updates 37. Multi-tenancy 38. Java 9 Already! 39. Wait for it?! Two-year release cycle Java 7: 07 2011 Java 8: 09 2013 Java 9: Late 2015 40. Wait for it?! Two-year release cycle Java 7: 07 2011 Java 8: 09 2013 Java 9: Late 2015 41. Multi Tenancy TypesMuli-tenancy Type 42. Multi Tenancy TypesMuli-tenancy TypeData Separation 43. Multi Tenancy TypesMuli-tenancy TypeData SeparationApplication Separation 44. Multi Tenancy TypesMuli-tenancy TypeData SeparationApplication SeparationProcess Separation 45. GaaE for Multi Tenancy TypesProductMuli-tenancy Type 46. GaaE for Multi Tenancy TypesProductMuli-tenancy TypeGoogle AppsData Separation 47. GaaE for Multi Tenancy TypesProduct Muli-tenancy TypeGoogle Apps Data SeparationGoogle App Engine Application Separation 48. GaaE for Multi Tenancy TypesProduct Muli-tenancy TypeGoogle Apps Data SeparationGoogle App Engine Application SeparationGoogle Compute Engine Process Separation 49. Comparing the StrategiesStrategyProsConsSeparating data Normal Java Application Manual stateseparation Complicated andcritical schema 50. Comparing the Strategies StrategyProsConsSeparating data Normal Java Application Manual stateseparation Complicated andcritical schema 51. Comparing the Strategies StrategyPros ConsSeparating data Normal Java Application Manual state separation Complicated and critical schemaSeparating processes No shared state JVM per tenant! Simple transition from existing 52. Comparing the Strategies StrategyPros ConsSeparating data Normal Java Application Manual state separation Complicated and critical schemaSeparating processes No shared state Simple transition from existing JVM per tenant! 53. Comparing the Strategies StrategyPros ConsSeparating data Normal Java Application Manual state separation Complicated and critical schemaSeparatingNo shared stateapplication Or is it?Simple transition from existingSeparating processes No shared state JVM per tenant! Simple transition from existing 54. Comparing the StrategiesStrategyPros ConsSeparating data Normal Java Application Manual state separation Complicated and critical schema SeparatingNo shared stateapplication Or is it?Simple transition from existingSeparating processes No shared state JVM per tenant! Simple transition from existing 55. Comparing the StrategiesStrategyPros ConsSeparating data Normal Java Application Manual state separation Complicated and critical schema SeparatingNo shared state Stay tunedapplication Or is it?Simple transition from existingSeparating processes No shared state JVM per tenant! Simple transition from existing 56. Separate Application: Tomcat Root lib webapps customer-name other-customer-name many other customers other dirs (bin, conf, log, etc) 57. Separate Application 58. Separate Application 59. Too many classes 60. Reuse! 61. Is it even possible? 62. Is it even possible? 63. THE QUEST FORSHAREDLIBRARIES 64. Spring Framework 65. Spring Frameworkpublic class AppCtxHolder implements ApplicationContextAware {private static ApplicationContext ctx; public AppCtxHolder() { } public void setApplicationContext(ApplicationContext applicationContext) { ctx = applicationContext; } public static ApplicationContext getApplicationContext() { return ctx; }} 66. Spring Frameworkpublic class AppCtxHolder implements ApplicationContextAware {private static ApplicationContext ctx; public AppCtxHolder() { } public void setApplicationContext(ApplicationContext applicationContext) { ctx = applicationContext; } public static ApplicationContext getApplicationContext() { return ctx; }} 67. Spring Frameworkpublic class AppCtxHolder implements ApplicationContextAware {private static ApplicationContext ctx; public AppCtxHolder() { } public void setApplicationContext(ApplicationContext applicationContext) { ctx = applicationContext; } public static ApplicationContext getApplicationContext() { return ctx; }} 68. Apache Wicket 69. Thread Pools 70. Logger 71. Logger 72. CATS Software 73. Jackrabbit 74. Heap-wide Caches 75. THE QUEST FOR SHARED LIBRARIES:RESULTS 76. Tomcat Root Wheres the JARs? lib webapps customer-name favicon.ico META-INF WEB-INF web.xml classes DUMMY.TXT other-customer-name favicon.ico META-INF WEB-INF many other customers other dirs (bin, conf, log, etc) 77. Tomcat Root Wheres the JARs? lib webapps customer-name favicon.ico META-INF WEB-INF web.xml classes DUMMY.TXT other-customer-name favicon.ico META-INF WEB-INF many other customers other dirs (bin, conf, log, etc) 78. Tomcat Root Wheres the JARs? lib webapps customer-name favicon.ico META-INF WEB-INF web.xml classes DUMMY.TXT other-customer-name favicon.ico META-INF WEB-INF many other customers other dirs (bin, conf, log, etc) 79. Tomcat Root In Global Lib! lib artifactory artifactory-*.jar jackrabbit-core-jfrog-2.2.8c.jar spring-core-3.1.1.RELEASE.jar wicket-core-1.5.3.jar other jars catalina.jar servlet-api.jar other jars webapps other dirs (bin, conf, log, etc) 80. Tomcat Root In Global Lib! lib artifactory artifactory-*.jar jackrabbit-core-jfrog-2.2.8c.jar spring-core-3.1.1.RELEASE.jar wicket-core-1.5.3.jar other jars catalina.jar servlet-api.jar other jars webapps other dirs (bin, conf, log, etc) 81. Tomcat Root In Global Lib! lib artifactory artifactory-*.jar jackrabbit-core-jfrog-2.2.8c.jar spring-core-3.1.1.RELEASE.jar wicket-core-1.5.3.jar other jars catalina.jar servlet-api.jar other jars webapps other dirs (bin, conf, log, etc) 82. Tomcat Root In Global Lib! lib artifactory artifactory-*.jar jackrabbit-core-jfrog-2.2.8c.jar spring-core-3.1.1.RELEASE.jar wicket-core-1.5.3.jar other jars catalina.jar servlet-api.jar other jars webapps other dirs (bin, conf, log, etc) 83. Tomcat Root In Global Lib! lib artifactory artifactory-*.jar jackrabbit-core-jfrog-2.2.8c.jar spring-core-3.1.1.RELEASE.jar wicket-core-1.5.3.jar other jars catalina.jar servlet-api.jar other jars webapps other dirs (bin, conf, log, etc) 84. PaaS or IaaS? 85. PaaS or IaaS? 86. What was it about DB upgrade? 87. THE DEVOPS 88. Providing Self Service 89. Separating Concerns 90. Outcome: DevOps 91. THE PROCESS 92. Diversity 93. Recursive Slide (w. baby picture) 94. Right Tools for the Job 95. Right Tools for the Job 96. Right Tools for the Job 97. THE PARADIGMSHIFT 98. Reversing the Cycle 99. Reversing the Cycle 100. Consequences