Sunday, March 31, 2013

Codefest 2013




И так, на этих выходных (30-31 марта) прошла ставшая уже ежегодной IT-конференция Codefest. В этой статье я вкратце поделюсь полезной информацией и впечатлениями, которые мне удалось вынести с конференции.





Доклады


Первым делом начнём с докладов. Скажу честно, они были разными: скучные и интересные, полезные и бесполезные, русскоязычные и англоязычные. Трэша от Аксёнова на этот раз не было... а жаль :( Но обо всём по порядку.


Как подружить несколько языков программирования на вашем Backend'e


Рассказ от разработчиков 2GIS. Пожалуй, самый полезный для меня за этот Codefest.

Речь шла об интеграции нескольких систем, используемых в компании, написанных на разных языках. В качестве примера рассматривалась библиотека написанная на C++, используемая в нескольких проектах: Web, Mobile, плюс что-то ещё.

Способов интеграции приводилось несколько:

  • Fork/ Exec: вызов внешней программы из PHP;
    • просто реализовать;
    • большое кол-во накладных расходов;
  • Модули / Extension для PHP;
    • сложно реализовать;
    • сложно интегрировать;
  • Отдельная служба + API для доступа к ней;
    • необходиость разработки протокола и его реализации на всех платформах (плохо);
    • можно взять распространённый протокол (PROFIT!);

Опыт 2GIS привёл их к последнему подходу. В качестве протоколов рассматривались thrift/protobuff/message pack. Выиграл Thrift.

Фичи Thrift:

  • полноценная поддержка rpc (а не только сериализации); 
  • можно определить свой транспортный данных протокол (tcp, http); 
  • можно определить свой передачи данных протокол (binary, json, и т.д.); 
  • поддержка версионирования (через id поля);
При испоьзовании подхода, когда каждая библиотека представляет собой демона/службу, работа с которой идёт по thrift-протоколу, получаем типичную SOA-арихитектуру приложения.

Thrift используется в Facebook и Evernote.

Должен заметить, что в моей компании тоже используется бинарный протокол и SOA архитектура. Однако, клея для служб выступает менее совершенный бинарный протокол Hessain, что приносит нам много боли.


Использование систем виртуализации в Web


Рассказ про как автор работал с ZFS и на какие грабли наступал. Ничего особо интересного, лишь частное мнение и порой не самый удачный опыт.

Порадовало большое количество вопросов от сотрудников Parallels в виду небольшого вброса в сторону OpenVZ, сделанного автором.


Cobbler for Developers


Видимо первый IT-доклад в Сибири на английском языке. Радует, что мировая практика докатилась и до Нск.

Рассказ про сложную судьбу инженера RedHat, которому снова и снова приходилось разворачивать ПО на сотнях и сотнях машин. Всё сводится к связке Cobbler/Chief/Puppet.


ECMAScript 6


Доклад посвящён новой версии JavaScript (ECMA6) и её фичам. По сути сводился к зачитыванию roadmap'а / спецификации с примерами.

В отличие от предыдущего докладчика, для Алекса английский судя по всему не был родным языком. В виду чего понимать его речь была намного чётче и понимать её было намного легче.


Высокопроизводительные визуализации данных в браузере


Рассказ о технологиях, используемых для визуализации большого количества данных в браузерах.

Из доклада стоит выделить следующие вещи:

  • алгоритмы уменьшения количества числа точек при отрисовке траекторий;
  • кластеризация (группировка) объектов для уменьшения их количества;
  • тяжелые расчёты в отдельном Worker'e;
  • asm.js;
  • использование SVG / Canvas;
  • WebGL для 3D-визуализаций;


NoSQL через MySQL + HandlerSocket


Ещё раз о том, что не стоит кешировать всё подряд в memcache-подобных хранилищах. Некоторые вещи (например, простые запросы по ключу) проще выбирать из исходной БД на более низком уровне через HandlerSocket-интерфейс, минуя разбор SQL, построение плана, работу с транзакциями и т.д.

При таком подходе у нас отсутствуют проблемы с необходимостью поддержания консинстентности между СУБД и кешем.
>HandlerSocket подключается плагином к InnoDB / XtraDB. Таким образом мы получаем два интерфейса для доступа к БД: sql-клиент и HandlerSocket клиент.

Должен заметить, что сам протокол работы с HandlerSocket является бинарным и... довольно неудобным. Выборки осуществляются на основе индексов, что вполне логично.

Рецепты успеха:


  • шардинг при размере таблицы > 10M рядов; (не смотря, что сложность поиска по B-tree индексам log(n), опыт докладчика показывает, что при количестве записей > 10М сложность возрастает до квадратичной); 
  • persistence коннекты; 
  • hash-индексы (*);

На первом пункте я бы хотел остановится подробней. Дело в том, что у меня тоже есть один батхёрт в виде таблицы на 30-50М записей с большим числом записей (300К/сутки), относительно небольшим числом чтений (10К/сутки) при полным отсутствием изменений/удалений. Время от времени таблица архивируется, для сокращения числа записей. Изменение скорости выборки данных до и после архивации как раз соотносится с log(n). И да, речь в моём случае о Sybase... но я несколько удивлён, что докладчик обнаружил подобную проблему на MySQL.

И последнее, HandlerSocket (а не MongoDB и Redis) стоит использовать в виду фич MySQL - репликация и т.д. 



Пути миграции перелётных данных



Очень весёлый и забавный доклад. В нескольких словах описать его следующим тезисом: "Построение отчётности это не просто ценный мех, а Data WareHouse, Business Intellegence и Big Data Mining". 


Открытие офиса удалённой разработки


Рассказ про то, как ребята из 2Gis открывали офис в Киеве.

Необходимость в открытии удалённого офиса возникает, когда рынок текущего города исчерпывает свои ресурсы, не позволяет нанимать то количество сотрудников, которое необходимо для роста и развития компании.

Проект, который должен передаваться в удалённый офис, должен быть максимально независим от других проектов компании.

Первым делом выбирался город/страна на основе анализа ИТ-рынка (наличие университетов, компаний, мероприятий). Далее была сформирована команда "десанта" из сотрудника, проработавшего в компании долгое время (хорошо знающего компанию) и человека из целевого города (нанятого по объявлению, знакомого с местными особенностями - например, в/на Украине ЗП и аренда платится в гривнах, а фиксируется в долларах).

Далее ребята занялись рекламой бренда 2Gis, для повышения узнаваемости компании среди разработчиков. После того, как успех был достигнут пришло время для собеседований. Изначально пул кандидатов собеседовался по Skype из Нск, потом лично на месте. Также проводилась работа среди студентов местных ВУЗов.

Первый код в продакшн был получен через 4 месяца.

Примечательно, что в итоге стоимость разработчиков в Киеве оказалась даже немного выше, чем в Нск.

Управление памятью в Java


Довольно интересный технический доклад о работе с памятью в Java.

При оптимизации GC можно минимизировать только два из трёх параметров:
  • throughtput (количество вычислительных ресурсов);
  • предсказуемость (количество времени, которое придётся затратить);
  • footprint (объём используемой памяти);

Типы ссылок в Java:
  • Strong - классическая ссылка на объект;
  • Soft - объекты могут быть удалены при OutOfMemory;
  • Weak - GC может удалить объект в любой момент;
  • Phanton - получение нотификации о смерти объекта (с помощью специальной очереди, для замены финализаторов);

Получить содержимое кучи можно с помощью следующих утилит:
  • jmap (классическая утилита);
  • jhat(подымает web-сервер для отображения данных);


Зачем вам нужна Clojure


Обзорный доклад о языке программирования Clojure.


Как мы сделали Яндекс.Гардероб и не ослепли


Тот случай, когда доклад нужно именно слушать. Автор очень интересно и красочно рассказывал об этапах создания проекта: формирование идеи, анализ рынка, описание и проработка сценариев/требований, разработка/релиз.

Каким не должен быть лидер технологической компании


Крайне странный доклад. Больше похож на самопиар Ostrovok.ru.

Собственно советы: 
  • Постоянно контролируйте работу своих сотрудников;
  • Контролируйте все коммуникации;
  • Рассказывайте как можно меньше информации своей команде;
  • Не обращайте внимания на коммуникационные проблемы;
  • Скрывайте негатив;
  • Больше хвалите себя в глазах других;
  • Количество, но не качество;
  • Мотивируйте сотрудников только деньгами;
  • Вводите как можно больше правил - должно быть меньше свободы;
  • Не имеет смысл инвестировать в сотрудников;
  • Не хвалите сотрудников за их успехи;
  • Присваивайте все достижения себе; 

Ну и да, в Ostrovok.ru всё наоборот :)


Мониторинг API

Суть доклада сводится к тому, что любой сервис стоит мониторить. Это позволяет повысить качество и решить множество проблем. (с) Кэп.

Стандартные решения типа Munin/Zabbix ребятам не подошли, поэтому они написали свою систему мониторинга. Russain way :)


MyBatis & Hibernate, давайте жить дружно!

Докладчик предлагает использовать в одном проекте несколько ORM-движков: Hibernate - где выборки несложны, MyBatis - где нужны сложные запросы.

Категорически с ним не согласен - ORM должен быть один. Только один!

С помощью Hibernate - можно решить любые проблемы. Главное понимать, что он не является серебряной пулей. Сложные запросы можно и нужно писать на HSQL или сыром SQL.

Добавляя второй ORM к Hibernate мы увеличиваем количество соединений к БД, делаем невозможным использование таких фич как кэш Hibernate и т.д.

Кроме того концепция iBatis, при которой SQL хранится в одном месте, а код в другом кажется мне крайне неудобной.

Хочу отметить, что сам докладчик выступил отлично и обидеть его декламированием своей позиции я не хотел. Просто я правда с ним очень не согласен :)



Фотографии














P.S.


В заключении хочу сказать пару слов об организации мероприятия. Прежде всего - всё было классно. За такие приятные мелочи как кофе перед посадкой в утренний автобус и водичку на утро второго дня - отдельно человеческое спасибо :)

Однако, всегда есть то, что можно было бы улучшить. Прошу понять правильно - я не в коем случае не критикую, просто хочу дать feedback :)

В первую очередь - это питание. Радиусе 5км от экспоцентра в выходные дни поесть реально не где. Вообще. Кругом степь... и то без травы или прочей растительности :(
Можно отдать 1К за два самолётных обеда... но видимо 3 года в обнимку с ипотекой сделали меня через чур жадным и мелочным.

Во-вторых, WiFi. Если честно, WiFi не работает толком ни на одной конференции. Ни в Нск, ни в Москве. Видимо проблема в самой технологии и технических ограничениях оборудования. Человек, который решит проблемы организации массового беспроводного доступа в интернет на ограниченной территории в рамках приемлемого бюджета получит от меня пирожок... с клюквой :)

6 comments:

  1. + хороший пиар услуг этого человека и его компании. который таки сделает вайфай доступным на конференциях.

    ReplyDelete
  2. "Опыт 2GIS привёл их к последнему подходу. В качестве протоколов рассматривались thrift/protobuff/message pack. Выиграл Thrift. "

    Божеж ты мой :) это все было сделано 2.5 года назад с моей лехкой руки и при помощи Андрея Лузина и Дениса Телюха и с тех пор работает. И только созрели рассказать про этот баян...

    ReplyDelete
  3. Михаил, спасибо за обзор.

    мои $.02 по офису киевскому 2GIS: стоимость жизни в Киеве чуть дороже нской. потому ничего удивительного, что и зарплата выше.

    ReplyDelete
    Replies
    1. Максим, а уровень оклада IT-специалистов не сравнивал? Просто ради интереса...

      Delete
  4. Миша, в Москве на конференциях есть нормальный WiFi!
    Например, в ИнфоПространство.
    Кстати, там и кормят очень вкусно и всегда засчёт организаторов ;)

    ReplyDelete
    Replies
    1. Дим, ну исходя из теории вероятности - да, вполне возможно, что где-то при каких-то условиях он есть :)

      В том же ИнфоПространстве я был в 2011 году на HL++. С учётом той массы народа, что там собралось, ни стабильным WiFi, ни, собственно, пространством там и не пахло :)

      Ну и кормят нас ни в коем случае ни за счёт организаторов, а неявно включают стоимость еды в стоимость конференции. То есть едим мы за свой счёт, в лучшем случае - за счёт конторы )

      Delete