Банальности, проверенные опытом                                      Keep it simple, stupid!     Java под нагрузкой,     в...
Про что этот докладЯ буду говорить про веб-проекты:«отягощенные нагрузкой»   нагрузка не самое главное в системе   миллион...
Почему JavaЯ ее хорошо знаюМного вменяемых разработчиковОчень богатая инфраструктураХорошая производительность «из коробки...
Итак, веб-фреймворкиРодные каркасы   Struts 2   JSF   Spring MVCНе совсем родные    Grails (Groovy)    Play! (Scala)Ну и п...
И почему они нам не подходятУ всех этих прекрасных решений есть несколько неприятныхособенностей   Магия!!!   Требования к...
И что еще есть?А при этом у «больших» используется совсем другоеXScript (Яндекс, был в open-source)   сервисы-сервисы-серв...
И как выглядит SOA                © Дельгядо Филипп, 2012   7
А вот так это выглядит в Java                 © Дельгядо Филипп, 2012   8
Используемые технологииЧто нам будет нужно из Java World  Servlets  Spring IoC  Velocity  Jackson  Future и Fork&Join  Ann...
Добавляем магиюЧто-бы все выглядело совсем прекрасно  Автоопределение типа команды  Сессии  Аутентификация и авторизация  ...
Пример кода на frontend@Command(path = "/user/login")@NotAuthorizedpublic class LoginCommand implements ICommand<HttpComma...
Сколько стоитТрудоемкость и объем  Примерно 2-3 человеконедели для среднего java dev  Меньше сотни классов  Несколько тыся...
Особенности разработкиВерстка сама пишет эскиз для frontendа   Включая серверную валидацию (кроме сложных случаев)   Описы...
Граничные условияВсе вышесказанное не стоит применять, если  У вас уже есть разработчики с опытом в подходящем frameworkе ...
Уф, почти все    Ну и хватит про         WEB                © Дельгядо Филипп, 2012   15
Пара слов про persistance     Почему я люблю         блобы        На самом-то деле, я просто ненавижу ORM                 ...
Как я использую блобыpublic <T extends Document> T     updateDocument (T document){    Document document = this.getJdbcTem...
Например, деревоНапример, посмотрим на простенькое дерево с листьями(древовидный справочник) Map<String, List<String>> par...
Плюсы Простота реализации Простота изменения структуры Производительность Все плюшки РСУБД Обновление версий ПО Предсказуе...
Минусы                      Неканоничность                      Нереляционность                      Производительность   ...
МифыНе нормализуемостьПроизводительностьИзбыточностьСложный поиск                     © Дельгядо Филипп, 2012   21
ПрактикиХорошо использовать для прототипированияЛегко сделать оптимистическую блокировку, историю,версионированиеВсегда, к...
Реальные проблемы Репликация и кластеризация на некоторых СУБД Сложности в драйверах у некоторых СУБД Года через два промы...
Граничные условияПроще использовать в рамках Transaction ScriptНаличие хорошего сериализатора (Jackson)Часто меняющиеся ст...
Всем спасибо                   Вопросы?Dph.main@gmail.comYatb.livejournal.com                       © Дельгядо Филипп, 201...
Upcoming SlideShare
Loading in …5
×

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

4,436 views

Published on

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

Аннотация
Не так давно с некоторым изумлением узнал, что Java для нагруженных систем представляется совершенной terra incognita. Хотя и совершенно не хочется бороться с мифами, по крайней мере, с удовольствием расскажу, как просто и без хлопот использовать Java в вебе. Про "суровый" highload рассказывать не буду, а вот про простые решения - с удовольствием. Ну и на закуску расскажу, за что я нежно люблю блобы.

О себе
Teamlead сколько себя помню, успел поработать и в "Яндекс.Деньгах" и в "БК Марафон". Люблю простые решения, сложные задачи и хорошую коммуникацию.

Published in: Technology

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

  1. 1. Банальности, проверенные опытом Keep it simple, stupid! Java под нагрузкой, в поисках проблем... © Дельгядо Филипп, 2012 1
  2. 2. Про что этот докладЯ буду говорить про веб-проекты:«отягощенные нагрузкой» нагрузка не самое главное в системе миллионы страниц в суткипростые для обычных разработчиков с вменяемыми сроками и бюджетомна Java © Дельгядо Филипп, 2012 2
  3. 3. Почему JavaЯ ее хорошо знаюМного вменяемых разработчиковОчень богатая инфраструктураХорошая производительность «из коробки»Свобода выбора железа и OSБеспроблемность © Дельгядо Филипп, 2012 3
  4. 4. Итак, веб-фреймворкиРодные каркасы Struts 2 JSF Spring MVCНе совсем родные Grails (Groovy) Play! (Scala)Ну и практически все, что можно себе вообразить (под сотнюразнообразных решений) © Дельгядо Филипп, 2012 4
  5. 5. И почему они нам не подходятУ всех этих прекрасных решений есть несколько неприятныхособенностей Магия!!! Требования к разработчикам Требования к верстальщикам Конкретная направленность © Дельгядо Филипп, 2012 5
  6. 6. И что еще есть?А при этом у «больших» используется совсем другоеXScript (Яндекс, был в open-source) сервисы-сервисы-сервисы Xml/xslt/lua Java-freeFrontik (HH) А тот же XScript, только python вместо lua/xmlДа и у всех прочих все примерно одинаково и совсем не так, как впопулярных каркасах. © Дельгядо Филипп, 2012 6
  7. 7. И как выглядит SOA © Дельгядо Филипп, 2012 7
  8. 8. А вот так это выглядит в Java © Дельгядо Филипп, 2012 8
  9. 9. Используемые технологииЧто нам будет нужно из Java World Servlets Spring IoC Velocity Jackson Future и Fork&Join Annotations & Reflections © Дельгядо Филипп, 2012 9
  10. 10. Добавляем магиюЧто-бы все выглядело совсем прекрасно Автоопределение типа команды Сессии Аутентификация и авторизация I18n и l10n Spring Cache © Дельгядо Филипп, 2012 10
  11. 11. Пример кода на frontend@Command(path = "/user/login")@NotAuthorizedpublic 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. 12. Сколько стоитТрудоемкость и объем Примерно 2-3 человеконедели для среднего java dev Меньше сотни классов Несколько тысяч строк Какую-то сложность вызывают пара основных классов Требования к разработчикам на frontend А никаких дополнительных требований На обучение написанию frontend-команд уходит день Требования к разработке на backend Знание Java core Знание Spring IoC (что уже сравнимо с Java Core) Вполне можно использовать junior java © Дельгядо Филипп, 2012 12
  13. 13. Особенности разработкиВерстка сама пишет эскиз для frontendа Включая серверную валидацию (кроме сложных случаев) Описывает контракт сервер-версткаКонтракт верстка-сервер самодокументирована Фактически, граница проходит между frontend и backend и полностью описывается на JavaРазработка верстки и бизнес-логики независимы Заглушки на frontend пишет верстка, не дожидаясь серверной разработки Модели в бизнес-логики не зависят от логики отображения © Дельгядо Филипп, 2012 13
  14. 14. Граничные условияВсе вышесказанное не стоит применять, если У вас уже есть разработчики с опытом в подходящем frameworkе У вас уже есть разработчики под PHP У вас нет особых требований к производительности У вас работают гуру, для которых проще все написать в Akka на ScalaВсе вышесказанное можно попробовать, если У вас точно будут приличные нагрузки У вас нет времени на идеальные решения Вы не делаете второй Facebook Ожидается заметное количество ajax У вас есть специфические пожелания © Дельгядо Филипп, 2012 14
  15. 15. Уф, почти все Ну и хватит про WEB © Дельгядо Филипп, 2012 15
  16. 16. Пара слов про persistance Почему я люблю блобы На самом-то деле, я просто ненавижу ORM © Дельгядо Филипп, 2012 16
  17. 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. 18. Например, деревоНапример, посмотрим на простенькое дерево с листьями(древовидный справочник) Map<String, List<String>> parents; Map<String, String> names; Map<String, DocumentRef> documents; Map<String, List<String>> binding;Совершенно не хочется тут видеть: Нормализованную БД ОРМ NoSQL © Дельгядо Филипп, 2012 18
  19. 19. Плюсы Простота реализации Простота изменения структуры Производительность Все плюшки РСУБД Обновление версий ПО Предсказуемость © Дельгядо Филипп, 2012 19
  20. 20. Минусы Неканоничность Нереляционность Производительность Кошмар для отчетов © Дельгядо Филипп, 2012 20
  21. 21. МифыНе нормализуемостьПроизводительностьИзбыточностьСложный поиск © Дельгядо Филипп, 2012 21
  22. 22. ПрактикиХорошо использовать для прототипированияЛегко сделать оптимистическую блокировку, историю,версионированиеВсегда, кроме самого объекта, храните в БД тип объекта иверсию формата, в котором записан объект © Дельгядо Филипп, 2012 22
  23. 23. Реальные проблемы Репликация и кластеризация на некоторых СУБД Сложности в драйверах у некоторых СУБД Года через два промышленной эксплуатации потихоньку блобы начинают исчезать © Дельгядо Филипп, 2012 23
  24. 24. Граничные условияПроще использовать в рамках Transaction ScriptНаличие хорошего сериализатора (Jackson)Часто меняющиеся структуры данныхНаличие DBA © Дельгядо Филипп, 2012 24
  25. 25. Всем спасибо Вопросы?Dph.main@gmail.comYatb.livejournal.com © Дельгядо Филипп, 2012 25

×