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

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

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

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

Baruch Sadogursky

April 23, 2013
Tweet

More Decks by Baruch Sadogursky

Other Decks in Technology

Transcript

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

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

    Как мы с этим теперь живем (hint: попкорн)
  3. Опросик замутим! Я пользуюсь бинарным репозиторием:  Ясный перец, Artifactory!

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

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

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

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

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

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

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

    15 месяцев Вывод: Java 9: 05/2013
  11. Java 8: 12/2012 - Java 7: 07/2011 = Цикл в

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

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

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

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

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

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

    что JavaOne организует Oracle. Oops. Этот момент, когда понимаешь, что сказал лишнего…
  18. Отдельные WAR-ы: Tomcat Root ┌── lib ├── webapps │ ├──

    customer-name │ ├── other-customer-name │ └── many other customers └── other dirs (bin, conf, log, etc)
  19. 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
  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. Apache Wicket Мы полюбили Wicket за то, что он позволяет

    людям, которые ненавидят UI, делать UI, который не очень ненавидят пользователи.
  23. ┌── 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ы где?
  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 │ ├── 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-е!
  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-е!