Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Baruch Sadogursky

Avatar for DevopsCon DevopsCon
January 28, 2013

Baruch Sadogursky

How we took our server-side application to the Cloud and liked what we got.

Presented in DevOps tools track at DevOps Con Israel 2013

Avatar for DevopsCon

DevopsCon

January 28, 2013
Tweet

More Decks by DevopsCon

Other Decks in Technology

Transcript

  1. Product Self Service Multi- tenant * aaS Gmail  

    Not *aaS, web-app GaaE: Google as an Example
  2. Product Self Service Multi- tenant * aaS Gmail  

    Not *aaS, web-app Google Apps   SaaS GaaE: Google as an Example
  3. Product Self Service Multi- tenant * aaS Gmail  

    Not *aaS, web-app Google Apps   SaaS Google App Engine   PaaS GaaE: Google as an Example
  4. Product Self Service Multi- tenant * aaS Gmail  

    Not *aaS, web-app Google Apps   SaaS Google App Engine   PaaS Google Compute Engine   IaaS GaaE: Google as an Example
  5. Product Self Service Multi- tenant * aaS Amazon store 

     Not *aaS, web-app AaaE: Amazon as an Example
  6. Product Self Service Multi- tenant * aaS Amazon store 

     Not *aaS, web-app aStore   SaaS AaaE: Amazon as an Example
  7. Product Self Service Multi- tenant * aaS Amazon store 

     Not *aaS, web-app aStore   SaaS Amazon Elastic Beanstalk   PaaS AaaE: Amazon as an Example
  8. Product Self Service Multi- tenant * aaS Amazon store 

     Not *aaS, web-app aStore   SaaS Amazon Elastic Beanstalk   PaaS Amazon Elastic Cloud   IaaS AaaE: Amazon as an Example
  9.  Multi-tenancy  Platform selection > PaaS or IaaS 

    DB schema updates The SaaS Pains - Overview
  10.  Two-year release cycle  Java 7: 07 2011 

    Java 8: 09 2013  Java 9: Late 2015 Wait for it?!
  11.  Two-year release cycle  Java 7: 07 2011 

    Java 8: 09 2013  Java 9: Late 2015 Wait for it?!
  12. GaaE for Multi Tenancy Types Product Muli-tenancy Type Google Apps

    Data Separation Google App Engine Application Separation
  13. GaaE for Multi Tenancy Types Product Muli-tenancy Type Google Apps

    Data Separation Google App Engine Application Separation Google Compute Engine Process Separation
  14. Strategy Pros Cons Separating data  Normal Java Application 

    Manual state separation  Complicated and critical schema Comparing the Strategies
  15. Strategy Pros Cons Separating data  Normal Java Application 

    Manual state separation  Complicated and critical schema Comparing the Strategies 
  16. Strategy Pros Cons Separating data  Normal Java Application 

    Manual state separation  Complicated and critical schema Separating processes  No shared state  Simple transition from existing  JVM per tenant! Comparing the Strategies 
  17. Strategy Pros Cons Separating data  Normal Java Application 

    Manual state separation  Complicated and critical schema Separating processes  No shared state  Simple transition from existing  JVM per tenant! Comparing the Strategies  
  18. Strategy Pros Cons Separating data  Normal Java Application 

    Manual state separation  Complicated and critical schema Separating application  No shared state  Or is it?  Simple transition from existing Separating processes  No shared state  Simple transition from existing  JVM per tenant! Comparing the Strategies  
  19. Strategy Pros Cons Separating data  Normal Java Application 

    Manual state separation  Complicated and critical schema Separating application  No shared state  Or is it?  Simple transition from existing Separating processes  No shared state  Simple transition from existing  JVM per tenant! Comparing the Strategies   
  20. Strategy Pros Cons Separating data  Normal Java Application 

    Manual state separation  Complicated and critical schema Separating application  No shared state  Or is it?  Simple transition from existing  Stay tuned… Separating processes  No shared state  Simple transition from existing  JVM per tenant! Comparing the Strategies   
  21. Separate Application: Tomcat Root ┌── lib ├── webapps │ ├──

    customer-name │ ├── other-customer-name │ └── many other customers └── other dirs (bin, conf, log, etc)
  22. public class AppCtxHolder implements ApplicationContextAware { private static ApplicationContext ctx;

    public AppCtxHolder() { } public void setApplicationContext(ApplicationContext applicationContext) { ctx = applicationContext; } public static ApplicationContext getApplicationContext() { return ctx; } } Spring Framework
  23. public class AppCtxHolder implements ApplicationContextAware { private static ApplicationContext ctx;

    public AppCtxHolder() { } public void setApplicationContext(ApplicationContext applicationContext) { ctx = applicationContext; } public static ApplicationContext getApplicationContext() { return ctx; } } Spring Framework
  24. public class AppCtxHolder implements ApplicationContextAware { private static ApplicationContext ctx;

    public AppCtxHolder() { } public void setApplicationContext(ApplicationContext applicationContext) { ctx = applicationContext; } public static ApplicationContext getApplicationContext() { return ctx; } } Spring Framework
  25. ┌── 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) Tomcat Root – Where’s the JARs?
  26. ┌── 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) Tomcat Root – Where’s the JARs?
  27. ┌── 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) Tomcat Root – Where’s the JARs?
  28. ┌── 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) Tomcat Root – In Global Lib!
  29. ┌── 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) Tomcat Root – In Global Lib!
  30. ┌── 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) Tomcat Root – In Global Lib!
  31. ┌── 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) Tomcat Root – In Global Lib!
  32. ┌── 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) Tomcat Root – In Global Lib!