Конференция «Российские Интернет Технологии — 2016»

Nikita Vaniasin | Jun 4, 2016 min read

Проходило всё в бизнес-школе Сколково, довольно забавное место.

День 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 генерируется автоматически, на основе списка компонентов. И это логично.