SERP или просто страница результатов поисковой выдачи — это действительно большой проект с огромной аудиторией. Над ним работают около 40 фронтендеров из разных городов. Эта страница показывается больше 200 000 000 раз в день. При таких размерах даже модульная архитектура уже не слишком спасала нас от странных, неочевидных зависимостей, лишних стилей и нескольких разных реализаций почти одинаковых компонентов.
Процесс разработки новой, даже довольно простой на первый взгляд фичи занимал чудовищное количество времени и представлял из себя хаотичное взаимодействие большого количества людей: фронта, бэкенда, дизайнеров и менеджеров.
Стала закрадываться мысль, что пора что-то менять. И мы поменяли.
В докладе я расскажу о том, как мы с помощью проекта на стыке фронтендеров, менеджеров, и дизайнеров, навели во всем этом идеальный порядок. Каким образом поменяли наш код процессы и инструменты, а также что нам это дало, и как будем жить с этим дальше.
Если вам знакомы похожие проблемы, то наш опыт может оказаться вам чертовски полезным.
Полной автоматизацией процесса сборки приложения уже никого не удивишь. Не в последнюю очередь благодаря Maven – системе управления жизненным циклом проекта. Однако проекты растут очень быстро: увеличивается количество модулей, тестов, зависимостей, используемых плагинов. И всего лишь за год легковесный проект, на сборку которого уходило 5 минут, превращается в монстра, который пожирает время разработчиков 30-минутной сборкой. Чтобы справится с этой проблемой разработчикам приходится постоянно чистить свой код и бороться со скоростью выполнения тестов. Это верное решение, но не следует забывать о том, что и сам процесс сборки можно улучшить. В этом докладе будет рассмотрено, как при помощи простых и нехитрых шагов можно оптимизировать работу с зависимостями и обогатить скрипты сборки полезными плагинами. Также будут обсуждаться тонкости конфигурации основных плагинов и особенности работы с командной строкой, которые появились в последней версии Maven.
DevConf 2016
"Производительность MySQL: что нового?", Алексей Копытов
Алексей Копытов — разработчик MySQL и связанных с ним проектов с 2004г. Работал в компаниях MySQL AB, Sun Microsystems и Oracle. В компании Percona участвовал в разработке Percona Server, XtraBackup и XtraDB Cluster. В настоящее время занимается проблемами производительности MySQL на современном оборудовании.
MySQL 5.7 предлагает огромное количество улучшений в производительности практически всех компонентов: InnoDB, секционирования, бэкапов, репликации, DDL и оптимизаторе запросов.
В этом докладе мы рассмотрим эти оптимизации подробно, а также поговорим о проблемах, которые остаются актуальными до сих пор, возможных методах их решения и планируемых дальнейших оптимизациях в MySQL 8.
SERP или просто страница результатов поисковой выдачи — это действительно большой проект с огромной аудиторией. Над ним работают около 40 фронтендеров из разных городов. Эта страница показывается больше 200 000 000 раз в день. При таких размерах даже модульная архитектура уже не слишком спасала нас от странных, неочевидных зависимостей, лишних стилей и нескольких разных реализаций почти одинаковых компонентов.
Процесс разработки новой, даже довольно простой на первый взгляд фичи занимал чудовищное количество времени и представлял из себя хаотичное взаимодействие большого количества людей: фронта, бэкенда, дизайнеров и менеджеров.
Стала закрадываться мысль, что пора что-то менять. И мы поменяли.
В докладе я расскажу о том, как мы с помощью проекта на стыке фронтендеров, менеджеров, и дизайнеров, навели во всем этом идеальный порядок. Каким образом поменяли наш код процессы и инструменты, а также что нам это дало, и как будем жить с этим дальше.
Если вам знакомы похожие проблемы, то наш опыт может оказаться вам чертовски полезным.
Полной автоматизацией процесса сборки приложения уже никого не удивишь. Не в последнюю очередь благодаря Maven – системе управления жизненным циклом проекта. Однако проекты растут очень быстро: увеличивается количество модулей, тестов, зависимостей, используемых плагинов. И всего лишь за год легковесный проект, на сборку которого уходило 5 минут, превращается в монстра, который пожирает время разработчиков 30-минутной сборкой. Чтобы справится с этой проблемой разработчикам приходится постоянно чистить свой код и бороться со скоростью выполнения тестов. Это верное решение, но не следует забывать о том, что и сам процесс сборки можно улучшить. В этом докладе будет рассмотрено, как при помощи простых и нехитрых шагов можно оптимизировать работу с зависимостями и обогатить скрипты сборки полезными плагинами. Также будут обсуждаться тонкости конфигурации основных плагинов и особенности работы с командной строкой, которые появились в последней версии Maven.
DevConf 2016
"Производительность MySQL: что нового?", Алексей Копытов
Алексей Копытов — разработчик MySQL и связанных с ним проектов с 2004г. Работал в компаниях MySQL AB, Sun Microsystems и Oracle. В компании Percona участвовал в разработке Percona Server, XtraBackup и XtraDB Cluster. В настоящее время занимается проблемами производительности MySQL на современном оборудовании.
MySQL 5.7 предлагает огромное количество улучшений в производительности практически всех компонентов: InnoDB, секционирования, бэкапов, репликации, DDL и оптимизаторе запросов.
В этом докладе мы рассмотрим эти оптимизации подробно, а также поговорим о проблемах, которые остаются актуальными до сих пор, возможных методах их решения и планируемых дальнейших оптимизациях в MySQL 8.
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Ontico
Современный Веб всё больше стремится к динамичным, похожим на приложения, сайтам.
Оперативно строить быстрый и динамичный интерфейс на проекте N1.RU нам помогает Vue.js.
Однако, как и многие современные библиотеки и фреймворки, Vue.js не умеет рендериться на сервере.
При этом иметь такую возможность бывает полезно по нескольким причинам: начиная от вопросов SEO и заканчивая красотой загрузки страницы.
Чтобы реализовать такую возможность для Vue.js мы создали его дополнение — Vue-server.js.
Я расскажу о том, что умеет Vue.js, что у нашего дополнения "под капотом", почему мы выбрали такой путь и как, вообще, всё это работает. А ещё попробую дать критическую оценку проделанной работе.
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)Ontico
1. Типы шаблонизаторов DOM/innerHTML.
2. Внутренности AngularJS и почему он тормозит.
3. Внутренности ReactJS и почему он тормозит.
4. Менее раскрученные решения Blaze/PaperclipJS/Riot и что там сделано лучше.
5. Плюсы и минусы virtualdom.
6. Работа с DOM может быть быстрее, если:
6.1 Использовать одни и те-же участки DOM несколько раз.
6.2 Сокращать количество reflow с DocumentFragment.
6.3 Быстрое создание повторяющихся участков DOM с помощью cloneNode.
6.4 Создавать куски DOM ahead of time.
7. Встречаем temple - шаблонизатор, работающий в разы быстрее reactjs и не требующий загрузки 40k библиотеки времени исполнения.
Доклад на конференции Selenium Camp 2012.
http://seleniumcamp.com/program/#parallel-testing
Видео: http://video.yandex.ru/users/xpinjection/view/105/#hq
В последнее время тема пиринговых технологий становится очень популярной. Уже не первый день работают такие проекты как криптовалюта Bitcoin, микроблоги Twister и мессенджер Tox. Теперь дошло дело и до децентрализованного веба.
Доклад посвящен новому open-source проекту — base.network — распределенному независимому пиринговому вебу. Расскажу про общую схему работы сети, немного о работе с криптографией на JavaScript, о создании приложений на JavaScript без использования центральных серверов.
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Andrey Rebrov
Как-то так происходит, что “на 10 девчонок по статистике 9 ребят”, а точнее на группу из 5-7 разработчиков – 1 тестировщик. Или его нет совсем. Так что очень часто приходится и код писать, и тестировать, а дата релиза все ближе и ближе.
В тех случаях, когда мы пишем веб-приложение, помочь в нашей нелегкой судьбе может бодрящий микс из Selenium и TestNG... Как это сделали мы, какие потом получили выводы и результаты — все это я и хочу рассказать и показать
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)Ontico
В докладе будут рассмотрены приемы, практики и «фишки», которые полезно использовать для создания любого Frontend-приложения.
Мы поговорим об организации модульности и компонентов на примере приложений с Angular, React и Polymer. Обсудим, как использовать особенности JavaScript, и рассмотрим особые случаи, когда фреймворки действительно приходят на помощь.
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Ontico
Современный Веб всё больше стремится к динамичным, похожим на приложения, сайтам.
Оперативно строить быстрый и динамичный интерфейс на проекте N1.RU нам помогает Vue.js.
Однако, как и многие современные библиотеки и фреймворки, Vue.js не умеет рендериться на сервере.
При этом иметь такую возможность бывает полезно по нескольким причинам: начиная от вопросов SEO и заканчивая красотой загрузки страницы.
Чтобы реализовать такую возможность для Vue.js мы создали его дополнение — Vue-server.js.
Я расскажу о том, что умеет Vue.js, что у нашего дополнения "под капотом", почему мы выбрали такой путь и как, вообще, всё это работает. А ещё попробую дать критическую оценку проделанной работе.
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)Ontico
1. Типы шаблонизаторов DOM/innerHTML.
2. Внутренности AngularJS и почему он тормозит.
3. Внутренности ReactJS и почему он тормозит.
4. Менее раскрученные решения Blaze/PaperclipJS/Riot и что там сделано лучше.
5. Плюсы и минусы virtualdom.
6. Работа с DOM может быть быстрее, если:
6.1 Использовать одни и те-же участки DOM несколько раз.
6.2 Сокращать количество reflow с DocumentFragment.
6.3 Быстрое создание повторяющихся участков DOM с помощью cloneNode.
6.4 Создавать куски DOM ahead of time.
7. Встречаем temple - шаблонизатор, работающий в разы быстрее reactjs и не требующий загрузки 40k библиотеки времени исполнения.
Доклад на конференции Selenium Camp 2012.
http://seleniumcamp.com/program/#parallel-testing
Видео: http://video.yandex.ru/users/xpinjection/view/105/#hq
В последнее время тема пиринговых технологий становится очень популярной. Уже не первый день работают такие проекты как криптовалюта Bitcoin, микроблоги Twister и мессенджер Tox. Теперь дошло дело и до децентрализованного веба.
Доклад посвящен новому open-source проекту — base.network — распределенному независимому пиринговому вебу. Расскажу про общую схему работы сети, немного о работе с криптографией на JavaScript, о создании приложений на JavaScript без использования центральных серверов.
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Andrey Rebrov
Как-то так происходит, что “на 10 девчонок по статистике 9 ребят”, а точнее на группу из 5-7 разработчиков – 1 тестировщик. Или его нет совсем. Так что очень часто приходится и код писать, и тестировать, а дата релиза все ближе и ближе.
В тех случаях, когда мы пишем веб-приложение, помочь в нашей нелегкой судьбе может бодрящий микс из Selenium и TestNG... Как это сделали мы, какие потом получили выводы и результаты — все это я и хочу рассказать и показать
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)Ontico
В докладе будут рассмотрены приемы, практики и «фишки», которые полезно использовать для создания любого Frontend-приложения.
Мы поговорим об организации модульности и компонентов на примере приложений с Angular, React и Polymer. Обсудим, как использовать особенности JavaScript, и рассмотрим особые случаи, когда фреймворки действительно приходят на помощь.
XSLT (eXtensible Stylesheet Language Transformations) is a language for transforming XML documents into other XML documents or HTML. It uses XPath to navigate XML documents and allows adding, removing, rearranging, and sorting elements in the output document. Some key points:
- XSLT transforms an XML source tree into an XML result tree
- It uses templates and applies templates to elements to transform the document
- Common elements include <xsl:template>, <xsl:value-of>, <xsl:for-each>, <xsl:if>, <xsl:choose>, and <xsl:apply-templates>
- XSLT is supported by browsers through built-in or third
Web Components usher in a new era of web development based on encapsulated and interoperable custom elements that extend HTML itself. Built atop these new standards, Polymer makes it easier and faster to create anything from a button to a complete application across desktop, mobile, and beyond.
Vagrant - поднимаем проект на рабочей машине
Vagrant может быть еще проще (Vagrant plugins)
Как Ansible упрощает разворачивание проекта в Vagrant
А вы пробовали Docker?
5. Configuration Management
Bad-bad story...
Что случилось?
● сайт упал и
не поднимается
● все настройки умерли
вместе с сервером
● … а это был не один сервер
● …
● админ в запое
● … идт
6. Configuration Management
В чем проблема?
●
●
●
●
●
●
●
●
пакеты ставятся руками
каждый конфиг настраивается тоже руками (vim, nano…)
install_all_packages_on_this_server.sh или bootstrap.sh
серверы могут быть разные (OS, roles, services)
компьютеров становится все больше, а рук не прибавляется
документация по настройке конкретного сервера(или сервиса) почти
всегда отсутствует
отсутствуют инструменты тестирования окружения
мониторинг ?..
8. Configuration Management
Почему Chef:
● Эффективность
все настройки и конфигурации лежат в одном месте
● Масштабируемость
разделение на окружения, роли и ноды
● Повторное исползование
создаем ноду и через несколько минут имеем готовый инстанс
● Документация
рецепты хранят всю информацию о вашем окружении
9. Configuration Management
Еще плюсы:
+ Меньше ошибок
+ Возможность тестирования
+ Версионность
+ Гибкость
+ Большое сообщество
+ Over 1220 готовых (официальных) кукбуков
10. Configuration Management
Что Chef не может:
● Магическим образом настроить ваш сервер
● Безрассудно использовать кукбуки и рецепты
● Мониторить ваши сервера и приложения
● Использовать концепцию “отката”
11. Configuration Management
Infrastructure as code:
●
Управление инфраструктурой как идемпотентным
Ресурсом (Resource)
●
Складываем все в Рецепты (Recipe)
●
Настраивайте ваши серверы и запускайте
интегрированную инфраструктуру
●
Отслеживайте и управляйте инфраструктурой как исходным кодом
●
Ruby DSL(Domain Specific Language)
13. Configuration Management
Терминология:
Ресурсы (Resources)
●
имеет определенный тип
●
у него есть имя
●
а также аттрибуты
●
выполняет действия
19 #...
20 package “nginx” do
21
version “1.4.4”
22
action :install
23 end
для приведения ресурса
в нужное состояние
35 #...
36 service “nginx” do
37
action [:enable, :start]
38 end
14. Configuration Management
Терминология:
Провайдеры (Providers)
●
Провайдеры описывают поведение ресурсов
●
Вы описываете “ЧТО” должно быть сделано вместо “КАК” делать
●
Несколько провайдеров для каждого типа ресурсов
(apt, yum, rubygems, portage, macports, и т.д.)
●
Ресурсы > Платформа > Провайдер
15. Configuration Management
Терминология:
Рецепты (Recipes)
●
Это коллекция
ресурсов
●
Код рецептов
повторно используется
и имеет блочную структуру
case node[‘platform_family’]
when ‘rhel’
package ‘ImageMagick’
when ‘debian’, ‘mac_os_x’
package ‘imagemagick’
end
dev_pkg = value_for_platform(
[‘redhat’, ‘fedora’] => {
‘default’ => “ImageMagick-devel”
},
“ubuntu” => {
“8.04” => “libmagick9-dev”,
“8.10” => “libmagick9-dev”,
“default” => “libmagickwand-dev”
}
)
package dev_pkg
17. Configuration Management
Терминология:
Поваренные книги (Cookbooks)
●
●
●
●
Распределенные
Инфраструктура как код
Обычно - отдельный репозиторий в системе контроля версий
Содержат:
○ Рецепты
○ Активы (файлы/шаблоны) - статические и динамические
○ Аттрибуты
○ Метаданные
20. Configuration Management
Управление данными:
Аттрибуты (Attributes)
●
Многоуровневый хэш настроек
●
Могут быть использованы в узлах, ролях, поваренных книгах,
окружениях
Пример:
ssh-cookbook использует 22 порт как основной, но в окружении
“production” мы переопределяем его на 2022
22. Configuration Management
Можно использовать для создания/настройки:
●
Простых внутренних приложений
●
Сложных многоуровневых и распределенных приложений
●
Рабочих станций
●
Hadoop кластеров
●
Iaas, Paas инфраструктур
●
Систем хранения данных
●
Систем обработки данных
●
и многое другое ...
26. Application Deployment
Что нужно сделать, чтобы развернуть простое приложение?
1.
скопировать (scp|ftp|...) ваше приложение на удаленный сервер(-ы)
2.
перезапустить сервер(-ы) если надо
3.
Профит!
4.
Новый релиз? GOTO 1
5.
Серверов много больше 1 ?
27. Application Deployment
А если подробнее?
мы закачивали все архивом, надо распаковать
… заменить текущую директорию или изменить настройки сервера
… а еще у нас базы надо обновить, накатить миграции
… ничего не забыл? … ах, да… оповестить всех надо же…
… когда что-то пошло не так - хватаемся за голову …
downtime растет, нервы портятся, количество седых волос увеличивается
28. Application Deployment
А если подробнее?
мы закачивали все архивом, надо распаковать
… заменить текущую директорию или изменить настройки сервера
… а еще у нас базы надо обновить, накатить миграции
… ничего не забыл? … ах, да… оповестить всех надо же…
… когда что-то пошло не так - хватаемся за голову …
downtime растет, нервы портятся, количество седых волос увеличивается
30. Application Deployment
Что такое Capistrano?
●
open source инструмент для запуска команд на одном/нескольких
серверах
●
преимущественно для деплоя web приложений
●
написан на Ruby и распространяется как ruby gem
●
обычно используется сомвестно с Rails, но не ограничивается ими.
31. Application Deployment
Что нам дает Capistrano?
●
●
●
●
●
●
●
возможность писать скрипты вида
“через ssh на нужной машине сделай это и это”
у вас не будет магических скриптов, которые живут на той машине
возможность хранить вместе с проектом в системе контроля версий
автоматизировать крупные и сложные задачи
одновременно работать с несколькими серверами
… разделять их по ролям
тестировать перед деплоем
опять же повторяемость (вы новичок в команде, коллега заболел…)
32. Application Deployment
Подготовка окружения/приложения:
●
●
●
Актуализируете ваше приложение в системе контроля версий
Уберите из публичного доступа пароли, ключи и остальные важные
данные
Инициализируйте Capistrano для вашего приложения
$ cd my-project
$ cap install
●
Задайте адреса серверов для определенных ролей в настройках
35. Application Deployment
Подготовка окружения/приложения:
●
●
●
Актуализируете ваше приложение в системе контроля версий
Уберите из публичного доступа пароли, ключи и остальные важные
данные
Инициализируйте Capistrano для вашего приложения
$ cd my-project
$ cap install
●
●
Задайте адреса серверов для определенных ролей в настройках
Общая информация должна храниться в deploy.rb