Successfully reported this slideshow.
Your SlideShare is downloading. ×

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

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 101 Ad

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

Download to read offline

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

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

Advertisement
Advertisement

More Related Content

Advertisement

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

More from DevOpsDays Tel Aviv (20)

Advertisement

Recently uploaded (20)

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 THE CLOUD… …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 Example Product Self Multi- * aaS Service tenant
  27. 27. GaaE: Google as an Example Product Self Multi- * aaS Service tenant Gmail   Not *aaS, web-app
  28. 28. GaaE: Google as an Example Product Self Multi- * aaS Service tenant Gmail   Not *aaS, web-app Google Apps   SaaS
  29. 29. GaaE: Google as an Example Product Self Multi- * aaS Service tenant Gmail   Not *aaS, web-app Google Apps   SaaS Google App Engine   PaaS
  30. 30. GaaE: Google as an Example Product Self Multi- * aaS Service tenant Gmail   Not *aaS, web-app Google Apps   SaaS Google App Engine   PaaS Google Compute Engine   IaaS
  31. 31. AaaE: Amazon as an Example Product Self Multi- * aaS Service tenant
  32. 32. AaaE: Amazon as an Example Product Self Multi- * aaS Service tenant Amazon store   Not *aaS, web-app
  33. 33. AaaE: Amazon as an Example Product Self Multi- * aaS Service tenant Amazon store   Not *aaS, web-app aStore   SaaS
  34. 34. AaaE: Amazon as an Example Product Self Multi- * aaS Service tenant Amazon store   Not *aaS, web-app aStore   SaaS Amazon Elastic Beanstalk   PaaS
  35. 35. AaaE: Amazon as an Example Product Self Multi- * aaS Service tenant Amazon store   Not *aaS, web-app aStore   SaaS Amazon Elastic Beanstalk   PaaS Amazon 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 Types Muli-tenancy Type
  42. 42. Multi Tenancy Types Muli-tenancy Type Data Separation
  43. 43. Multi Tenancy Types Muli-tenancy Type Data Separation Application Separation
  44. 44. Multi Tenancy Types Muli-tenancy Type Data Separation Application Separation Process Separation
  45. 45. GaaE for Multi Tenancy Types Product Muli-tenancy Type
  46. 46. GaaE for Multi Tenancy Types Product Muli-tenancy Type Google Apps Data Separation
  47. 47. GaaE for Multi Tenancy Types Product Muli-tenancy Type Google Apps Data Separation Google App Engine Application Separation
  48. 48. GaaE for Multi Tenancy Types Product Muli-tenancy Type Google Apps Data Separation Google App Engine Application Separation Google Compute Engine Process Separation
  49. 49. Comparing the Strategies Strategy Pros Cons Separating data  Normal Java Application  Manual state separation  Complicated and critical schema
  50. 50. Comparing the Strategies  Strategy Pros Cons Separating data  Normal Java Application  Manual state separation  Complicated and critical schema
  51. 51. Comparing the Strategies  Strategy Pros Cons Separating data  Normal Java Application  Manual state separation  Complicated and critical schema Separating processes  No shared state  JVM per tenant!  Simple transition from existing
  52. 52. Comparing the Strategies  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!
  53. 53. Comparing the Strategies  Strategy Pros Cons Separating data  Normal Java Application  Manual state separation  Complicated and critical schema Separating  No shared state application  Or is it?  Simple transition from  existing Separating processes  No shared state  JVM per tenant!  Simple transition from existing
  54. 54. Comparing the Strategies  Strategy Pros Cons Separating data  Normal Java Application  Manual state separation  Complicated and critical schema  Separating  No shared state application  Or is it?  Simple transition from  existing Separating processes  No shared state  JVM per tenant!  Simple transition from existing
  55. 55. Comparing the Strategies  Strategy Pros Cons Separating data  Normal Java Application  Manual state separation  Complicated and critical schema  Separating  No shared state  Stay tuned… application  Or is it?  Simple transition from  existing Separating 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 FOR SHARED LIBRARIES
  64. 64. Spring Framework
  65. 65. Spring Framework public 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 Framework public 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 Framework public 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 PARADIGM SHIFT
  98. 98. Reversing the Cycle
  99. 99. Reversing the Cycle
  100. 100. Consequences

×