SlideShare a Scribd company logo
1 of 25
Банальности, проверенные опытом


                                      Keep it simple, stupid!




     Java под нагрузкой,
     в поисках проблем...


                       © Дельгядо Филипп, 2012                  1
Про что этот доклад

Я буду говорить про веб-проекты:

«отягощенные нагрузкой»
   нагрузка не самое главное в системе
   миллионы страниц в сутки
простые
   для обычных разработчиков
   с вменяемыми сроками и бюджетом
на Java




                           © Дельгядо Филипп, 2012   2
Почему Java

Я ее хорошо знаю

Много вменяемых разработчиков

Очень богатая инфраструктура

Хорошая производительность «из коробки»

Свобода выбора железа и OS

Беспроблемность


                        © Дельгядо Филипп, 2012   3
Итак, веб-фреймворки

Родные каркасы
   Struts 2
   JSF
   Spring MVC

Не совсем родные
    Grails (Groovy)
    Play! (Scala)

Ну и практически все, что можно себе вообразить (под сотню
разнообразных решений)




                           © Дельгядо Филипп, 2012           4
И почему они нам не подходят

У всех этих прекрасных решений есть несколько неприятных
особенностей
   Магия!!!
   Требования к разработчикам
   Требования к верстальщикам
   Конкретная направленность




                        © Дельгядо Филипп, 2012            5
И что еще есть?

А при этом у «больших» используется совсем другое

XScript (Яндекс, был в open-source)
   сервисы-сервисы-сервисы
   Xml/xslt/lua
   Java-free

Frontik (HH)
   А тот же XScript, только python вместо lua/xml

Да и у всех прочих все примерно одинаково и совсем не так, как в
популярных каркасах.




                            © Дельгядо Филипп, 2012                6
И как выглядит SOA




                © Дельгядо Филипп, 2012   7
А вот так это выглядит в Java




                 © Дельгядо Филипп, 2012   8
Используемые технологии

Что нам будет нужно из Java World

  Servlets
  Spring IoC
  Velocity
  Jackson
  Future и Fork&Join
  Annotations & Reflections




                       © Дельгядо Филипп, 2012   9
Добавляем магию

Что-бы все выглядело совсем прекрасно

  Автоопределение типа команды
  Сессии
  Аутентификация и авторизация
  I18n и l10n
  Spring Cache




                     © Дельгядо Филипп, 2012   10
Пример кода на frontend

@Command(path = "/user/login")
@NotAuthorized
public class LoginCommand
 implements ICommand<HttpCommandRequest, LoginCommand.MyResponse> {
public MyResponse execute(HttpCommandRequest request, final Context context) {
final String login = request.getParameter("email");
final String password = request.getParameter("password");
Future<User> user;
   user = serviceExecutor.doLocal(context, new Callable<User>() {
         @Override public User call() throws Exception {
           return b2BUserService.login(login); }
     });
 return new MyResponse(user.get());
}}




                                     © Дельгядо Филипп, 2012                     11
Сколько стоит

Трудоемкость и объем
  Примерно 2-3 человеконедели для среднего java dev
  Меньше сотни классов
  Несколько тысяч строк
  Какую-то сложность вызывают пара основных классов

 Требования к разработчикам на frontend
  А никаких дополнительных требований
  На обучение написанию frontend-команд уходит день

 Требования к разработке на backend
  Знание Java core
  Знание Spring IoC (что уже сравнимо с Java Core)
  Вполне можно использовать junior java


                           © Дельгядо Филипп, 2012    12
Особенности разработки

Верстка сама пишет эскиз для frontend'а
   Включая серверную валидацию (кроме сложных случаев)
   Описывает контракт сервер-верстка
Контракт верстка-сервер самодокументирована
   Фактически, граница проходит между frontend и backend и
   полностью описывается на Java
Разработка верстки и бизнес-логики независимы
   Заглушки на frontend пишет верстка, не дожидаясь серверной
   разработки
   Модели в бизнес-логики не зависят от логики отображения




                        © Дельгядо Филипп, 2012                 13
Граничные условия

Все вышесказанное не стоит применять, если
  У вас уже есть разработчики с опытом в подходящем framework'е
  У вас уже есть разработчики под PHP
  У вас нет особых требований к производительности
  У вас работают гуру, для которых проще все написать в Akka на Scala


Все вышесказанное можно попробовать, если
  У вас точно будут приличные нагрузки
  У вас нет времени на идеальные решения
  Вы не делаете второй Facebook
  Ожидается заметное количество ajax
  У вас есть специфические пожелания


                          © Дельгядо Филипп, 2012                  14
Уф, почти все



    Ну и хватит про
         WEB



                © Дельгядо Филипп, 2012   15
Пара слов про persistance



     Почему я люблю
         блобы
        На самом-то деле, я просто ненавижу ORM




                   © Дельгядо Филипп, 2012        16
Как я использую блобы

public <T extends Document> T     updateDocument (T document)
{
    Document document = this.getJdbcTemplate().update
    (
        'update table Table (…) set values (…)',
        document.getNextVersion(), document.getExpectedVersion(),
        document.getCode(), document.getName(),
         serializeToClob(document),
        document.getValueFormat()
    );
    return document;
}




                            © Дельгядо Филипп, 2012                 17
Например, дерево

Например, посмотрим на простенькое дерево с листьями
(древовидный справочник)
 Map<String, List<String>> parents;
 Map<String, String> names;
 Map<String, DocumentRef> documents;
 Map<String, List<String>> binding;

Совершенно не хочется тут видеть:
 Нормализованную БД
 ОРМ
 NoSQL



                       © Дельгядо Филипп, 2012         18
Плюсы

 Простота реализации
 Простота изменения структуры
 Производительность
 Все плюшки РСУБД
 Обновление версий ПО
 Предсказуемость




                    © Дельгядо Филипп, 2012   19
Минусы

                      Неканоничность
                      Нереляционность
                      Производительность
                      Кошмар для отчетов




         © Дельгядо Филипп, 2012           20
Мифы

Не нормализуемость


Производительность


Избыточность


Сложный поиск




                     © Дельгядо Филипп, 2012   21
Практики

Хорошо использовать для прототипирования


Легко сделать оптимистическую блокировку, историю,
версионирование


Всегда, кроме самого объекта, храните в БД тип объекта и
версию формата, в котором записан объект




                       © Дельгядо Филипп, 2012             22
Реальные проблемы

 Репликация и кластеризация на некоторых СУБД


 Сложности в драйверах у некоторых СУБД


 Года через два промышленной эксплуатации потихоньку
 блобы начинают исчезать




                    © Дельгядо Филипп, 2012            23
Граничные условия

Проще использовать в рамках Transaction Script


Наличие хорошего сериализатора (Jackson)


Часто меняющиеся структуры данных


Наличие DBA




                        © Дельгядо Филипп, 2012   24
Всем спасибо




                   Вопросы?


Dph.main@gmail.com
Yatb.livejournal.com


                       © Дельгядо Филипп, 2012   25

More Related Content

What's hot

Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Ontico
 
Вредные советы для разработчиков
Вредные советы для разработчиковВредные советы для разработчиков
Вредные советы для разработчиковITCrowd Almaty
 
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид ШирмановКомпонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид ШирмановMoscowJS
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Ontico
 
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...Pavel Dovbush
 
Application deployment & configuration management
Application deployment & configuration managementApplication deployment & configuration management
Application deployment & configuration managementAlexander Kirillov
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияYandex
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьCodeFest
 
Баба Яга против!
Баба Яга против!Баба Яга против!
Баба Яга против!Roman Dvornov
 
D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"Dev2Dev
 
Какой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис ЦыплаковКакой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис ЦыплаковAlex Tumanoff
 
Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныИнструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныRoman Dvornov
 
Читабельные отчеты для автоматизации на C# / Gallio / BDDfy
Читабельные отчеты для автоматизации на C# / Gallio / BDDfyЧитабельные отчеты для автоматизации на C# / Gallio / BDDfy
Читабельные отчеты для автоматизации на C# / Gallio / BDDfyDmytro Zharii
 
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...Ontico
 
SWD Page Recorder: Записывает PageObject'ы со скоростью ниндзя SeleniumCamp 2014
SWD Page Recorder: Записывает PageObject'ы со скоростью ниндзя SeleniumCamp 2014SWD Page Recorder: Записывает PageObject'ы со скоростью ниндзя SeleniumCamp 2014
SWD Page Recorder: Записывает PageObject'ы со скоростью ниндзя SeleniumCamp 2014Dmytro Zharii
 
Жизнь в изоляции
Жизнь в изоляцииЖизнь в изоляции
Жизнь в изоляцииRoman Dvornov
 
Денис Паясь
Денис ПаясьДенис Паясь
Денис ПаясьCodeFest
 
JavaScript завтра / Сергей Рубанов (Exante Limited)
JavaScript завтра / Сергей Рубанов  (Exante Limited)JavaScript завтра / Сергей Рубанов  (Exante Limited)
JavaScript завтра / Сергей Рубанов (Exante Limited)Ontico
 
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...Ontico
 

What's hot (20)

Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
 
Вредные советы для разработчиков
Вредные советы для разработчиковВредные советы для разработчиков
Вредные советы для разработчиков
 
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид ШирмановКомпонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
 
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
 
Application deployment & configuration management
Application deployment & configuration managementApplication deployment & configuration management
Application deployment & configuration management
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесь
 
Баба Яга против!
Баба Яга против!Баба Яга против!
Баба Яга против!
 
D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"
 
Какой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис ЦыплаковКакой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис Цыплаков
 
Remote Highload
Remote HighloadRemote Highload
Remote Highload
 
Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныИнструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важны
 
Читабельные отчеты для автоматизации на C# / Gallio / BDDfy
Читабельные отчеты для автоматизации на C# / Gallio / BDDfyЧитабельные отчеты для автоматизации на C# / Gallio / BDDfy
Читабельные отчеты для автоматизации на C# / Gallio / BDDfy
 
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...
 
SWD Page Recorder: Записывает PageObject'ы со скоростью ниндзя SeleniumCamp 2014
SWD Page Recorder: Записывает PageObject'ы со скоростью ниндзя SeleniumCamp 2014SWD Page Recorder: Записывает PageObject'ы со скоростью ниндзя SeleniumCamp 2014
SWD Page Recorder: Записывает PageObject'ы со скоростью ниндзя SeleniumCamp 2014
 
Жизнь в изоляции
Жизнь в изоляцииЖизнь в изоляции
Жизнь в изоляции
 
Денис Паясь
Денис ПаясьДенис Паясь
Денис Паясь
 
JavaScript завтра / Сергей Рубанов (Exante Limited)
JavaScript завтра / Сергей Рубанов  (Exante Limited)JavaScript завтра / Сергей Рубанов  (Exante Limited)
JavaScript завтра / Сергей Рубанов (Exante Limited)
 
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
 

Similar to 13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагрузкой, в поисках проблем...", Филипп Дельгядо (CTO Goodwix, ex-teamlead Яндекс.Деньги)

AOP and Design Patterns (GoF)
AOP and Design Patterns (GoF)AOP and Design Patterns (GoF)
AOP and Design Patterns (GoF)Andrey Gordienkov
 
Aspect Oriented Programming and Design Patterns
Aspect Oriented Programming and Design PatternsAspect Oriented Programming and Design Patterns
Aspect Oriented Programming and Design PatternsAndrey Gordienkov
 
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...GoSharp
 
Как писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDКак писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDPavel Tsukanov
 
За что не любить EF и чем его заменить
За что не любить EF и чем его заменитьЗа что не любить EF и чем его заменить
За что не любить EF и чем его заменитьGoSharp
 
лекция типовые ошибки
лекция типовые ошибкилекция типовые ошибки
лекция типовые ошибкиYury Zelensky
 
Автоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharpАвтоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharpgeekfamilyrussia
 
Автоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharpАвтоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharpGoSharp
 
kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDDkranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDDKrivoy Rog IT Community
 
ThemeForest: Как пробиться и стоит ли игра свеч? | Odessa Frontend Meetup #9
ThemeForest: Как пробиться и стоит ли игра свеч? | Odessa Frontend Meetup #9ThemeForest: Как пробиться и стоит ли игра свеч? | Odessa Frontend Meetup #9
ThemeForest: Как пробиться и стоит ли игра свеч? | Odessa Frontend Meetup #9OdessaFrontend
 
Секрет производства: программный продукт, за который не будет стыдно
Секрет производства: программный продукт, за который не будет стыдноСекрет производства: программный продукт, за который не будет стыдно
Секрет производства: программный продукт, за который не будет стыдноCUSTIS
 
Обзор Drupal 8 by Andrei Khalipau, Kostya Halipov and Егор Богатырёв
Обзор Drupal 8 by Andrei Khalipau, Kostya  Halipov and Егор БогатырёвОбзор Drupal 8 by Andrei Khalipau, Kostya  Halipov and Егор Богатырёв
Обзор Drupal 8 by Andrei Khalipau, Kostya Halipov and Егор БогатырёвMinsk PHP User Group
 
Презентация про DTrace на ADDconf в Минске
Презентация про DTrace на ADDconf в МинскеПрезентация про DTrace на ADDconf в Минске
Презентация про DTrace на ADDconf в МинскеAlex Chistyakov
 
Применение DTrace для оптимизации производительности на примере двух больших ...
Применение DTrace для оптимизации производительности на примере двух больших ...Применение DTrace для оптимизации производительности на примере двух больших ...
Применение DTrace для оптимизации производительности на примере двух больших ...SQALab
 
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell SoftwareМониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell SoftwareMarina Gryshko
 
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell SoftwareМониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell SoftwareBAKOTECH
 
Mobile Monday Kiev#1 - How to save time in Mobile Apps Development
Mobile Monday Kiev#1 - How to save time in Mobile Apps DevelopmentMobile Monday Kiev#1 - How to save time in Mobile Apps Development
Mobile Monday Kiev#1 - How to save time in Mobile Apps DevelopmentIntersog
 

Similar to 13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагрузкой, в поисках проблем...", Филипп Дельгядо (CTO Goodwix, ex-teamlead Яндекс.Деньги) (20)

AOP and Design Patterns (GoF)
AOP and Design Patterns (GoF)AOP and Design Patterns (GoF)
AOP and Design Patterns (GoF)
 
Aspect Oriented Programming and Design Patterns
Aspect Oriented Programming and Design PatternsAspect Oriented Programming and Design Patterns
Aspect Oriented Programming and Design Patterns
 
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
 
Domain Context Integration
Domain Context IntegrationDomain Context Integration
Domain Context Integration
 
Как писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDКак писать красивый код или основы SOLID
Как писать красивый код или основы SOLID
 
За что не любить EF и чем его заменить
За что не любить EF и чем его заменитьЗа что не любить EF и чем его заменить
За что не любить EF и чем его заменить
 
лекция типовые ошибки
лекция типовые ошибкилекция типовые ошибки
лекция типовые ошибки
 
Автоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharpАвтоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharp
 
drools introduction
drools introductiondrools introduction
drools introduction
 
Автоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharpАвтоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharp
 
kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDDkranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
 
ThemeForest: Как пробиться и стоит ли игра свеч? | Odessa Frontend Meetup #9
ThemeForest: Как пробиться и стоит ли игра свеч? | Odessa Frontend Meetup #9ThemeForest: Как пробиться и стоит ли игра свеч? | Odessa Frontend Meetup #9
ThemeForest: Как пробиться и стоит ли игра свеч? | Odessa Frontend Meetup #9
 
Секрет производства: программный продукт, за который не будет стыдно
Секрет производства: программный продукт, за который не будет стыдноСекрет производства: программный продукт, за который не будет стыдно
Секрет производства: программный продукт, за который не будет стыдно
 
Обзор Drupal 8 by Andrei Khalipau, Kostya Halipov and Егор Богатырёв
Обзор Drupal 8 by Andrei Khalipau, Kostya  Halipov and Егор БогатырёвОбзор Drupal 8 by Andrei Khalipau, Kostya  Halipov and Егор Богатырёв
Обзор Drupal 8 by Andrei Khalipau, Kostya Halipov and Егор Богатырёв
 
Multilingual Drupal 8
Multilingual Drupal 8Multilingual Drupal 8
Multilingual Drupal 8
 
Презентация про DTrace на ADDconf в Минске
Презентация про DTrace на ADDconf в МинскеПрезентация про DTrace на ADDconf в Минске
Презентация про DTrace на ADDconf в Минске
 
Применение DTrace для оптимизации производительности на примере двух больших ...
Применение DTrace для оптимизации производительности на примере двух больших ...Применение DTrace для оптимизации производительности на примере двух больших ...
Применение DTrace для оптимизации производительности на примере двух больших ...
 
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell SoftwareМониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
 
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell SoftwareМониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
 
Mobile Monday Kiev#1 - How to save time in Mobile Apps Development
Mobile Monday Kiev#1 - How to save time in Mobile Apps DevelopmentMobile Monday Kiev#1 - How to save time in Mobile Apps Development
Mobile Monday Kiev#1 - How to save time in Mobile Apps Development
 

More from IT-Portfolio

16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Highload...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Highload...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Highload...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Highload...IT-Portfolio
 
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...IT-Portfolio
 
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...IT-Portfolio
 
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...IT-Portfolio
 
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...IT-Portfolio
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...IT-Portfolio
 
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...IT-Portfolio
 
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Шардинг в...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Шардинг в...20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Шардинг в...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Шардинг в...IT-Portfolio
 
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Инженерны...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Инженерны...20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Инженерны...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Инженерны...IT-Portfolio
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Особенности р...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Особенности р...13 октября, DEV {web} - конференция о Highload веб-разработке. "Особенности р...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Особенности р...IT-Portfolio
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...IT-Portfolio
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Архитектура п...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Архитектура п...13 октября, DEV {web} - конференция о Highload веб-разработке. "Архитектура п...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Архитектура п...IT-Portfolio
 

More from IT-Portfolio (12)

16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Highload...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Highload...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Highload...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Highload...
 
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...
 
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...
 
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...
 
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
 
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...
 
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Шардинг в...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Шардинг в...20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Шардинг в...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Шардинг в...
 
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Инженерны...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Инженерны...20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Инженерны...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Инженерны...
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Особенности р...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Особенности р...13 октября, DEV {web} - конференция о Highload веб-разработке. "Особенности р...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Особенности р...
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Архитектура п...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Архитектура п...13 октября, DEV {web} - конференция о Highload веб-разработке. "Архитектура п...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Архитектура п...
 

13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагрузкой, в поисках проблем...", Филипп Дельгядо (CTO Goodwix, ex-teamlead Яндекс.Деньги)

  • 1. Банальности, проверенные опытом Keep it simple, stupid! Java под нагрузкой, в поисках проблем... © Дельгядо Филипп, 2012 1
  • 2. Про что этот доклад Я буду говорить про веб-проекты: «отягощенные нагрузкой» нагрузка не самое главное в системе миллионы страниц в сутки простые для обычных разработчиков с вменяемыми сроками и бюджетом на Java © Дельгядо Филипп, 2012 2
  • 3. Почему Java Я ее хорошо знаю Много вменяемых разработчиков Очень богатая инфраструктура Хорошая производительность «из коробки» Свобода выбора железа и OS Беспроблемность © Дельгядо Филипп, 2012 3
  • 4. Итак, веб-фреймворки Родные каркасы Struts 2 JSF Spring MVC Не совсем родные Grails (Groovy) Play! (Scala) Ну и практически все, что можно себе вообразить (под сотню разнообразных решений) © Дельгядо Филипп, 2012 4
  • 5. И почему они нам не подходят У всех этих прекрасных решений есть несколько неприятных особенностей Магия!!! Требования к разработчикам Требования к верстальщикам Конкретная направленность © Дельгядо Филипп, 2012 5
  • 6. И что еще есть? А при этом у «больших» используется совсем другое XScript (Яндекс, был в open-source) сервисы-сервисы-сервисы Xml/xslt/lua Java-free Frontik (HH) А тот же XScript, только python вместо lua/xml Да и у всех прочих все примерно одинаково и совсем не так, как в популярных каркасах. © Дельгядо Филипп, 2012 6
  • 7. И как выглядит SOA © Дельгядо Филипп, 2012 7
  • 8. А вот так это выглядит в Java © Дельгядо Филипп, 2012 8
  • 9. Используемые технологии Что нам будет нужно из Java World Servlets Spring IoC Velocity Jackson Future и Fork&Join Annotations & Reflections © Дельгядо Филипп, 2012 9
  • 10. Добавляем магию Что-бы все выглядело совсем прекрасно Автоопределение типа команды Сессии Аутентификация и авторизация I18n и l10n Spring Cache © Дельгядо Филипп, 2012 10
  • 11. Пример кода на frontend @Command(path = "/user/login") @NotAuthorized public class LoginCommand implements ICommand<HttpCommandRequest, LoginCommand.MyResponse> { public MyResponse execute(HttpCommandRequest request, final Context context) { final String login = request.getParameter("email"); final String password = request.getParameter("password"); Future<User> user; user = serviceExecutor.doLocal(context, new Callable<User>() { @Override public User call() throws Exception { return b2BUserService.login(login); } }); return new MyResponse(user.get()); }} © Дельгядо Филипп, 2012 11
  • 12. Сколько стоит Трудоемкость и объем Примерно 2-3 человеконедели для среднего java dev Меньше сотни классов Несколько тысяч строк Какую-то сложность вызывают пара основных классов Требования к разработчикам на frontend А никаких дополнительных требований На обучение написанию frontend-команд уходит день Требования к разработке на backend Знание Java core Знание Spring IoC (что уже сравнимо с Java Core) Вполне можно использовать junior java © Дельгядо Филипп, 2012 12
  • 13. Особенности разработки Верстка сама пишет эскиз для frontend'а Включая серверную валидацию (кроме сложных случаев) Описывает контракт сервер-верстка Контракт верстка-сервер самодокументирована Фактически, граница проходит между frontend и backend и полностью описывается на Java Разработка верстки и бизнес-логики независимы Заглушки на frontend пишет верстка, не дожидаясь серверной разработки Модели в бизнес-логики не зависят от логики отображения © Дельгядо Филипп, 2012 13
  • 14. Граничные условия Все вышесказанное не стоит применять, если У вас уже есть разработчики с опытом в подходящем framework'е У вас уже есть разработчики под PHP У вас нет особых требований к производительности У вас работают гуру, для которых проще все написать в Akka на Scala Все вышесказанное можно попробовать, если У вас точно будут приличные нагрузки У вас нет времени на идеальные решения Вы не делаете второй Facebook Ожидается заметное количество ajax У вас есть специфические пожелания © Дельгядо Филипп, 2012 14
  • 15. Уф, почти все Ну и хватит про WEB © Дельгядо Филипп, 2012 15
  • 16. Пара слов про persistance Почему я люблю блобы На самом-то деле, я просто ненавижу ORM © Дельгядо Филипп, 2012 16
  • 17. Как я использую блобы public <T extends Document> T updateDocument (T document) { Document document = this.getJdbcTemplate().update ( 'update table Table (…) set values (…)', document.getNextVersion(), document.getExpectedVersion(), document.getCode(), document.getName(), serializeToClob(document), document.getValueFormat() ); return document; } © Дельгядо Филипп, 2012 17
  • 18. Например, дерево Например, посмотрим на простенькое дерево с листьями (древовидный справочник) Map<String, List<String>> parents; Map<String, String> names; Map<String, DocumentRef> documents; Map<String, List<String>> binding; Совершенно не хочется тут видеть: Нормализованную БД ОРМ NoSQL © Дельгядо Филипп, 2012 18
  • 19. Плюсы Простота реализации Простота изменения структуры Производительность Все плюшки РСУБД Обновление версий ПО Предсказуемость © Дельгядо Филипп, 2012 19
  • 20. Минусы Неканоничность Нереляционность Производительность Кошмар для отчетов © Дельгядо Филипп, 2012 20
  • 22. Практики Хорошо использовать для прототипирования Легко сделать оптимистическую блокировку, историю, версионирование Всегда, кроме самого объекта, храните в БД тип объекта и версию формата, в котором записан объект © Дельгядо Филипп, 2012 22
  • 23. Реальные проблемы Репликация и кластеризация на некоторых СУБД Сложности в драйверах у некоторых СУБД Года через два промышленной эксплуатации потихоньку блобы начинают исчезать © Дельгядо Филипп, 2012 23
  • 24. Граничные условия Проще использовать в рамках Transaction Script Наличие хорошего сериализатора (Jackson) Часто меняющиеся структуры данных Наличие DBA © Дельгядо Филипп, 2012 24
  • 25. Всем спасибо Вопросы? Dph.main@gmail.com Yatb.livejournal.com © Дельгядо Филипп, 2012 25