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

3,768 views
3,698 views

Published on

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

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,768
On SlideShare
0
From Embeds
0
Number of Embeds
2,578
Actions
Shares
0
Downloads
21
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

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

  1. 1. HOW WE TOOK OUR SERVER-SIDE APPLICATION TO THECLOUD……and liked what we got
  2. 2. Agenda Where we started What we did Paradigm shift
  3. 3. First Things First 3
  4. 4. BACKGROUND
  5. 5. Who’s talking?
  6. 6. Developer who?
  7. 7. Developer who?
  8. 8. JFrog Where?
  9. 9. JFrog Where?
  10. 10. JFrog Where?
  11. 11. JFrog Where?
  12. 12. Artifactory what?
  13. 13. Yet Another Java Server App
  14. 14. Moving Forward
  15. 15. Moving Forward
  16. 16. Moving Forward
  17. 17. Moving Forward
  18. 18. Moving Forward
  19. 19. Artifactory SaaS
  20. 20. Artifactory SaaS etc.
  21. 21. Moving Forward
  22. 22. A load of Artifacts!
  23. 23. JOURNEY TO THE CLOUD
  24. 24. THE *AAS BUZZ
  25. 25. * As A Service Self Service Multi-tenant
  26. 26. GaaE: Google as an ExampleProduct Self Multi- * aaS Service tenant
  27. 27. GaaE: Google as an ExampleProduct Self Multi- * aaS Service tenantGmail   Not *aaS, web-app
  28. 28. GaaE: Google as an ExampleProduct Self Multi- * aaS Service tenantGmail   Not *aaS, web-appGoogle Apps   SaaS
  29. 29. GaaE: Google as an ExampleProduct Self Multi- * aaS Service tenantGmail   Not *aaS, web-appGoogle Apps   SaaSGoogle App Engine   PaaS
  30. 30. GaaE: Google as an ExampleProduct Self Multi- * aaS Service tenantGmail   Not *aaS, web-appGoogle Apps   SaaSGoogle App Engine   PaaSGoogle Compute Engine   IaaS
  31. 31. AaaE: Amazon as an ExampleProduct Self Multi- * aaS Service tenant
  32. 32. AaaE: Amazon as an ExampleProduct Self Multi- * aaS Service tenantAmazon store   Not *aaS, web-app
  33. 33. AaaE: Amazon as an ExampleProduct Self Multi- * aaS Service tenantAmazon store   Not *aaS, web-appaStore   SaaS
  34. 34. AaaE: Amazon as an ExampleProduct Self Multi- * aaS Service tenantAmazon store   Not *aaS, web-appaStore   SaaSAmazon Elastic Beanstalk   PaaS
  35. 35. AaaE: Amazon as an ExampleProduct Self Multi- * aaS Service tenantAmazon store   Not *aaS, web-appaStore   SaaSAmazon Elastic Beanstalk   PaaSAmazon Elastic Cloud   IaaS
  36. 36. The SaaS Pains - Overview Multi-tenancy Platform selection > PaaS or IaaS DB schema updates
  37. 37. Multi-tenancy
  38. 38. Java 9 Already!
  39. 39. Wait for it?! Two-year release cycle Java 7: 07 2011 Java 8: 09 2013 Java 9: Late 2015
  40. 40. Wait for it?! Two-year release cycle Java 7: 07 2011 Java 8: 09 2013 Java 9: Late 2015
  41. 41. Multi Tenancy TypesMuli-tenancy Type
  42. 42. Multi Tenancy TypesMuli-tenancy TypeData Separation
  43. 43. Multi Tenancy TypesMuli-tenancy TypeData SeparationApplication Separation
  44. 44. Multi Tenancy TypesMuli-tenancy TypeData SeparationApplication SeparationProcess Separation
  45. 45. GaaE for Multi Tenancy TypesProduct Muli-tenancy Type
  46. 46. GaaE for Multi Tenancy TypesProduct Muli-tenancy TypeGoogle Apps Data Separation
  47. 47. GaaE for Multi Tenancy TypesProduct Muli-tenancy TypeGoogle Apps Data SeparationGoogle App Engine Application Separation
  48. 48. GaaE for Multi Tenancy TypesProduct Muli-tenancy TypeGoogle Apps Data SeparationGoogle App Engine Application SeparationGoogle Compute Engine Process Separation
  49. 49. Comparing the StrategiesStrategy Pros ConsSeparating data  Normal Java Application  Manual state separation  Complicated and critical schema
  50. 50. Comparing the Strategies Strategy Pros ConsSeparating data  Normal Java Application  Manual state separation  Complicated and critical schema
  51. 51. Comparing the Strategies Strategy Pros ConsSeparating data  Normal Java Application  Manual state separation  Complicated and critical schemaSeparating processes  No shared state  JVM per tenant!  Simple transition from existing
  52. 52. Comparing the Strategies Strategy Pros ConsSeparating data  Normal Java Application  Manual state separation  Complicated and critical schemaSeparating processes   No shared state Simple transition from existing  JVM per tenant!
  53. 53. Comparing the Strategies Strategy Pros ConsSeparating data  Normal Java Application  Manual state separation  Complicated and critical schemaSeparating  No shared stateapplication  Or is it?  Simple transition from existingSeparating processes  No shared state  JVM per tenant!  Simple transition from existing
  54. 54. Comparing the StrategiesStrategy Pros ConsSeparating data  Normal Java Application  Manual state separation  Complicated and critical schema Separating  No shared stateapplication  Or is it?  Simple transition from existingSeparating processes  No shared state  JVM per tenant!  Simple transition from existing
  55. 55. Comparing the StrategiesStrategy Pros ConsSeparating data  Normal Java Application  Manual state separation  Complicated and critical schema Separating  No shared state  Stay tuned…application  Or is it?  Simple transition from existingSeparating processes  No shared state  JVM per tenant!  Simple transition from existing
  56. 56. Separate Application: Tomcat Root┌── lib├── webapps│ ├── customer-name│ ├── other-customer-name│ └── many other customers└── other dirs (bin, conf, log, etc)
  57. 57. Separate Application
  58. 58. Separate Application
  59. 59. Too… many… classes…
  60. 60. Reuse!
  61. 61. Is it even possible?
  62. 62. Is it even possible?
  63. 63. THE QUEST FORSHAREDLIBRARIES
  64. 64. Spring Framework
  65. 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. 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. 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. 68. Apache Wicket
  69. 69. Thread Pools
  70. 70. Logger
  71. 71. Logger
  72. 72. CATS Software
  73. 73. Jackrabbit
  74. 74. Heap-wide Caches
  75. 75. THE QUEST FOR SHARED LIBRARIES:RESULTS
  76. 76. Tomcat Root – Where’s 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. 77. Tomcat Root – Where’s 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. 78. Tomcat Root – Where’s 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. 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. 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. 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. 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. 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. 84. PaaS or IaaS?
  85. 85. PaaS or IaaS?
  86. 86. What was it about DB upgrade?
  87. 87. THE DEVOPS
  88. 88. Providing Self Service
  89. 89. Separating Concerns
  90. 90. Outcome: DevOps
  91. 91. THE PROCESS
  92. 92. Diversity
  93. 93. Recursive Slide (w. baby picture)
  94. 94. Right Tools for the Job
  95. 95. Right Tools for the Job
  96. 96. Right Tools for the Job
  97. 97. THE PARADIGMSHIFT
  98. 98. Reversing the Cycle
  99. 99. Reversing the Cycle
  100. 100. Consequences

×