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

Как мы залезли на облако, все настроили как надо, и теперь едим попкорн

Как мы залезли на облако, все настроили как надо, и теперь едим попкорн

Превратить обычное серверное Java приложение в облачную платформу может оказаться намного сложнее, чем кажется. Главная проблема, естественно, заключается в обеспечении «коммунальности» (multi-tenancy). В этом докладе я поделюсь опытом JFrog в создании SaaS решения, которое успешно используется сообществом Java. После короткого вступления о видах облачных приложений, я расскажу об архитектурных проблемах с которыми мы столкнулись и способами их решения, затем мы поговорим о важности автоматизации при поддержании одновременно скачиваемой и облачной версий продукта и о таких инструментах как Chef и Puppet для ее достижения, и в завершение доклада я поделюсь с вами наблюдениями о смене парадигмы, которая произошла в JFrog-е в процессе перехода на SaaS. Ну, и попкорн!

Baruch Sadogursky

June 29, 2013
Tweet

More Decks by Baruch Sadogursky

Other Decks in Technology

Transcript

  1. Об чём речь? • Чего было • Чего стало •

    Как мы с этим теперь живем (hint: попкорн)
  2. Об чём речь? • Чего было • Чего стало •

    Как мы с этим теперь живем (hint: попкорн) • Итого: 187 слайдов. Fasten your seatbelts.
  3. Об чём речь? • Чего было • Чего стало •

    Как мы с этим теперь живем (hint: попкорн) • Итого: 187 слайдов. Fasten your seatbelts.
  4. Опросик замутим! Я пользуюсь бинарным репозиторием:  Ясный перец, Artifactory!

     Стыдно, конечно, но пока еще Nexus.  Я не люблю фичи, у меня Archiva.
  5. Опросик замутим! Я пользуюсь бинарным репозиторием:  Ясный перец, Artifactory!

     Стыдно, конечно, но пока еще Nexus.  Я не люблю фичи, у меня Archiva.  Я пещерный человек. Ась? Бинарный кто?
  6. Опросик замутим! Я пользуюсь бинарным репозиторием:  Ясный перец, Artifactory!

     Стыдно, конечно, но пока еще Nexus.  Я не люблю фичи, у меня Archiva.  Я пещерный человек. Ась? Бинарный кто? Итого: 146%
  7. Пользователи одобряэ: – Не нужно содержать сервера – Офигительная техподдержка

    – Всегда апдейтнут! Пользователи нэгодуэ: – Нельзя задеплоить плагинчик!
  8. Пользователи одобряэ: – Не нужно содержать сервера – Офигительная техподдержка

    – Всегда апдейтнут! Пользователи нэгодуэ: – Нельзя задеплоить плагинчик!
  9. Пользователи одобряэ: – Не нужно содержать сервера – Офигительная техподдержка

    – Всегда апдейтнут! Пользователи нэгодуэ: – Нельзя задеплоить плагинчик!
  10. Да, кстати… В связи с актуальными событиями, в слайды добавлено

    огромное количество Чопты Роисси. Sorry about that. Meme overuse!
  11. Java 8: 12/2012 - Java 7: 07/2011 = Цикл в

    15 месяцев Вывод: Java 9: 05/2013
  12. Java 7: 07/2011 + 24 месяца = Java 8: 01/2014

    Сколько Марк скажет
  13. Java 7: 07/2011 + 24 месяца = Java 8: 01/2014

    + 24 месяца = Сколько Марк скажет
  14. Java 7: 07/2011 + 24 месяца = Java 8: 01/2014

    + 24 месяца = Java 9: 01/2016 Сколько Марк скажет
  15. Java 7: 07/2011 + 24 месяца = Java 8: 01/2014

    + 24 месяца = Java 9: 01/2016 Сколько Марк скажет
  16. Java 7: 07/2011 + 24 месяца = Java 8: 03/2014

    + 24 месяца = Java 9: 03/2016 (Если не будет больше постов про поезд) Сколько Марк скажет
  17. Java 7: 07/2011 + 24 месяца = Java 8: 03/2014

    + 24 месяца = Java 9: 03/2016 (Если не будет больше постов про поезд) Сколько Марк скажет
  18. Здесь была шутка про Марка и Чопту Роисси, но я

    вспомнил, что в зале сидит Саша из Oracle.
  19. Отдельные WAR-ы: Tomcat Root ┌── lib ├── webapps │ ├──

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

    public AppCtxHolder() { } public void setApplicationContext(ApplicationContext applicationContext) { ctx = applicationContext; } public static ApplicationContext getApplicationContext() { return ctx; } } Злодейский App. Context Holder Pattern
  21. public class AppCtxHolder implements ApplicationContextAware { private static ApplicationContext ctx;

    public AppCtxHolder() { } public void setApplicationContext(ApplicationContext applicationContext) { ctx = applicationContext; } public static ApplicationContext getApplicationContext() { return ctx; } } Злодейский App. Context Holder Pattern
  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; } } Злодейский App. Context Holder Pattern
  23. Apache Wicket Мы полюбили Wicket за то, что он позволяет

    людям, которые ненавидят UI, делать UI, который не очень ненавидят пользователи.
  24. ┌── 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 – A JARы где?
  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 – A JARы где?
  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 – A JARы где?
  27. ┌── 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 – А в глобальной Lib-е!
  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 – А в глобальной 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 – А в глобальной 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 – А в глобальной 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 – А в глобальной Lib-е!