Проходило всё в бизнес-школе Сколково, довольно забавное место.
День 1
1. NoSQL — Неспроста ли это «ЖЖЖ»? (Даниил Подольский, inCaller.org)
Доклад о самых базовых принципах NoSQL, разновидностях и минусах использования.
Общий вывод — не стоит использовать NoSQL только потому что это модно. В 99% случаях классический SQL-подход впишется гораздо лучше.
Из интересного:
- Докладчик заявил, что MySQL можно настроить на 100 тысяч апдейтов в секунду. Надо поисследовать вопрос.
- Используют Anemometer — тулзу с веб-интерфейсом для анализа slow-логов MySQL. Позволяет аггрегировать данные, в том числе с нескольких источников. Пока не понятно, можно ли её использовать на production сервере, но в целом выглядт довольно удобной штукой.
2. Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh (Миша Кириллов, CINEMOOD)
Докладчик рассказал о своей разработке: c2h5oh позволяет связать nginx c PostgreSQL, отправляя HTTP-запросы прямо в модуль хранимых процедур PostgresSQL. Это стало возможным благодаря появлению поддержки JSON в этой СУБД. Например:
на запроса /api/1.0/user/add будет вызвана функция user_add(requestBody, headers, cookies). Если её нет — вернется 404 как положено. Функция должна вернуть JSON — ответ.
Производительность: на ноутбуке докладчика удалось обработать 14 тысяч запросов в секунду. Сравнения и более подробные исследования докладичк пообещал сделать позже.
Из интересного:
- Докладчик показал способ загрузки файлов на сервер без всяких дополнительных обработчиков, чисто nginx: достаточно включить опцию client_body_in_file и настроить папку для сохранения файлов. Можно поисследовать этот вопрос на предмет использования в наших проектах.
3. Распределенные системы в Одноклассниках (Олег Анастасьев)
Название секции «Higload++ Junior» говорит само за себя — доклады были в основном об очень базовых вещах. Этот был хорош тем, что показал конкретную реализацию и даже немного примеров кода. Докладчик рассказал о том, как они управляю тысячами серверов и как они пришли к написанию собственных инструментов для мониторинга. А ещё о своей реализации взаимодействия между Java-серверами: one-nio (есть на github).
Из интересного:
- Доклад заставил задуматься на другим подходом к проектированию веб-приложений: Не надо надеятся, что отказ скорее всего не произойдет, надо исходить из того, что отказ произойдет обязательно (как при проектировании серверов, так и при написании кода самих приложений).
- Насчет идемпотентности запросов — мы сейчас отдаем ошибку 409, если запрос был обработан. Лучше использовать стратегию «все идет хорошо» и отдавать статус 200.
4. Жизнь проекта на production: советы по эксплуатации (Николай Сивко, okmeter.io)
Ещё один доклад о самых базовых организации поддержки failover/highload. Доклад очень понравился, но ничего нового почерпнуть не смог. Докладчик разобрал все основные кейсы на примерах и способы решения. Такой доклад отлично подходит начинающим компаниям, которые только собираются запускать проект (в том числе не highload)
5. Лучшие практики Continuous Delivery c Docker (Дмитрий Столяров, Флант)
Каждый год на конференциях бывают доклады про Docker. Этот расчитан больше на тех, кто уже его использует. Докладчик рассказал о том, как у них организован процесс выкладывания релиза на сотни серверов.
Из интересного:
- Ничего нового, но выписал: надо относиться к инфраструктуре как к коду и все настройки докер-контейнера надо класть в репозиторий вместе с проектом.
- Немного необычный, но удобный способ присваивания версий: <номер_релиза>.<номер_багофикса>.<номер_итерации_QA> (то есть 6.1.3 — шестой релиз, с одним багофиксом, причем последний баг переоткрывали 2 раза). Такой способ нумерации позволяет легко найти самую стабильную версию с последнего релиза и откатится на неё.
- Kubernetes — инструмент для управления докер-контейнерами. От Google. Очень быстро набирает популярность, и похоже скоро станет стандартом для решения этой задачи.
6. Как отвечать за продакшн (Андрей Сумин, Mail.ru)
Рассказал о том, как в Mail.ru организован мониторинг и дежурства после релиза очередной версии. Дежурства такие же как у нас — с СМСками разработчикам, ответственным за фичу. Для каждой фичи надо написать app-тест в общую систему мониторинга.
Из интересного:
- Снова автоматические unit/functional тесты — c этого начался доклад в стиле «Eсть кто-нибудь, кто не использует юнит-тестирование в 2016 году?». Чего-то не стал руку поднимать.
- Мониторинговая система отслеживает не только технические характеристики (кол-во ошибок, нагрузку на сервер), но и продуктовые: влияние фичи на конверсию, поведение пользователей и т.д.
- Форма фидбэка — отличный способ получить отзывы и информацию о проблемах напрямую от пользователей. Странно, что у нас её нигде нет.
- Новые фичи выкатываются в 4 этапа:
- для бета-тестеров, которые подтвердили своё желание попробовать данную фичу
- для всех бета-тестеров
- для пользователей, которые согласились первыми получать обновления
- для всех пользователей
7. React: новая эра фронтентд разработки (Роберт Харитонов, Liberty Global)
Докладчик — активный продвигатель React.js. Однако выступление было через Skype, без обратной связи, так что вышло не очень. Рассказал об основах использования React, архитектуре. В целом, ничего нового.
Из интересного:
- Babel js — компилятор JS и JSX, как раз часто используется совместно с React.
8. Сравнение форматов и библиотек сериализации (Антон Рыжиков, Qrator Labs)
Кроме JSON есть много похожих способов сериализации (основанные на json). Докладчик сравнил их по скорости сериализации/десереализации и занимаему размеру, а также показал критичные случаи, где тот или иной формат себя показывает плохо. Сравнение было сделано только под Python. Рассмотрены:
- BSON — в целом не подходит для обычных текстовых данных, очень сильно разрастается объем и скорость мала
- JSON
- Protobuf — от Google, в некоторых тестах очень хорош.
- Apache Thrift — от Facebook. Хорошая скорость, но добавляет приличный оверхед по размеру данных.
- Avro — фактически просто схема для указания типов в JSON, не требует компиляции
- Msgpack — стабильно обходит JSON по размеру данных, и почти всегда — по скорости.
День 2
1. Релиз инжиниринг Mail.ru (Максим Глеков, Mail.ru)
Докладчик рассказал, как развивалась система выкладывания, рассмотрел альтернативы. Docker не используют, из-за политики безопасности. Разработали свою схему.
Из интересного:
- Fabric, Capistrano — инструменты для релиз инжиниринга. Надо исследовать.
- Прогрев кэша и компиляция шаблонов происходит до непосредственного релиза. Можем делать также.
- Для готовой сборки используется MD5, чтобы проверить, что на всех серверах оказалась одинаковая сборка.
- Tar/gzip — отличный способ для подготовки билда к отправке на сервера. Используется в Mail ru на небольших проектах
- RPM/Deb пакеты — хороший способ релизов, но mail.ru всё таки перешли к следующему:
- Существуют архивирующие виртуальные файловые системы, например SquashFS. Туда быстро можно монтировать файл с билдом проекта. Используется на крупных проектах mail.ru
- Для релиза на несколько серверов есть специальный сервер, который управляет релизами (туда загружается очередной билд, а демоны на каждом сервере забирают этот билд себе).
2. Конструктор (Денис Паясь, Яндекс)
Фактически Денис рассказал о том, как в команде разработки SERP (страница с результами поиска) разработали свой UI-kit, наладив взаимодействие с дизайнерами. Заняло около года, сейчас дорабатывают.
Из интересного:
- У UI-kit компонентов на Dashboard есть переключалка версий. Можем сделать такую же. Позволяет избeжать ситуации, когда надо изменить общий компонент, а дизайнер ещё не знает о том, что кто-то уже сделал похожее изменение в другой ветке.
- Дизайнеры разрабатывают только прототипы на html/css, никаких pixel-perfect
- Дизайнеры используют Git.
3. Оптимизации уровня CPU (Андрей Акиньшин, JetBrains)
Подробно разобрал кейс с оптимизацией одной функции, которая определяет, является ли фотография больше темной, или больше светлой.
Годный доклад, из нового подхватил
- Branch prediction — процессор пытается угадать, куда отправится ветка IF на основе предыдущих выполнений (например в цикле). Если в цикле часто меняется направление (то в then, то в else), то лучше заменить if на оператор, если это возможно. (например на побитовый сдвиг)
- Довольно очевидно, но всё же: при обходе матриц надо обходить по строкам, а не по столбцам, так как процессор кэширует строки и доступ получается последовательным.
4. 55+1 прием для улучшения Javascript-кода (Татьяна Бабич, Simbirsoft)
Доклад в стиле «Используйте CodeReview, CodeConvention, Организовывайте структуру проекта, именуйте файлы правильно» (20%) и «если делать так, то Angular js будет работать оптимально» (80%).
В связи с малой степенью владения Angular js, доклад показался неактуальным. Больше похоже на style guide по использованию Angular, которых полно в интернете.
5. Работе из дома здесь не место (Михаил Трутнев, Ultimate Guitar)
Очень экспрессивный докладчик, директор компании. Всего 50 человек в компании. Основной продукт — сайт, 20 млн. уникальных посетителей в месяц. Рассказывал об организации рабочего процесса.
- Трудовой день — с 9:00 до 15:00. Около 80% сотрудников уходят в три часа. Шесть дней в неделю (всего получается 36 часов).
- Как только приходят в 9 — никто не пьёт чай и не лазают по интернету — все 6 часов народ «въ*бывает» (цитата с доклада).
- Все сидят в одном опенспейсе: «Посадим так, чтобы мешали друг другу»
- Повсюду самоорганизующийся скрам — должностей нет, есть только сферы ответственности, например один человек за архитектуру, один за железо.
- Основная идея — все должны предлагать идеи. Чем больше идей получится попробовать — тем больше прибыли получит компания.
- Зарплата фиксированная, никакого KPI
- «Бывает либо качественно, либо быстро» — миф. Крутые чуваки могут делать качественно и быстро, только таких надо брать в компанию.
- У компании должна быть странность. У Ultimate Guitar точно есть:
- Слоган — «Play it fucking loud» — отпугивает часть клиентов и возможных работников, но привлекает других, которые гораздо лучше вписываются в компанию и целевую аудиторию.
- Каждый митинг и выступление внутри компании начинается с того, что говорящий с микрофоном говорит то самое слово из трех букв. Просто потому что сложилась такая традиция.
- Рекомендуемые книжки:
- Бизнес в стиле funk
- Мотивация в стиле ЭКШН. Восторг заразителен
- Война за таланты
- Не работайте с м*даками
- Работа мечты
- Годно расписано на https://www.ultimate-guitar.com/about/jobs.htm
6. Как мы разрабатываем новый фронтенд Tinkoff.ru (Филипп Нехаев, Tinkoff.ru)
Рассказал историю эволюции сайта — сменилось несколько версий от JAVA-приложения до изоморфного на Node.js+React
Используют UI-kit.
Из интересного:
- UI-dashboard генерируется автоматически, на основе списка компонентов. И это логично.