пятница, 7 октября 2011 г.

Highload++ 2011 (заметки с конференции)

Сайт конференции.

Лично для меня новой информации немного. Но послушать было интересно и временами забавно. Поэтому описываю здесь личные субъективные впечатления.
День первый. "Жесткий PR" Erlang.
Я очень хорошо отношусь к этому языку и платформе OTP в целом (когда-то давно имел возможность на ней поработать), но все же подбор докладов оказался несколько специфическим. Рассказывались success story из разных областей, от нагруженных сайтов до интернет-видео, но ни слова не было сказано о границах применимости этой платформы. А потому опасаюсь, что у "впечатлившихся" могут возникнуть "истории обломов". Поскольку после такого народ начнет нагибать Erlang под те задачи, для которых он не оптимален.
День для меня начался с доклада Alvaro Videla про архитектуру сервиса на основе RabbitMQ и, соответственно, Erlang. Архитектура в целом разумная, хотя не представляющая ничего нового (разрезка подсистем, использование асихронности, неблокирующие вызовы). Но вот для какой цели они страницы рендерили на Erlang, для меня так и осталось загадкой (разве что "для единообразия").
Дальше - сообщение от русскоязычного подразделения google на тему управления проектами. В целом, на мой взгляд, "ни о чем". Высказывались тривиальные тезисы, разве что с большим пафосом. Но был упомянут интересный момент: они делают ревью кода случайным программистом команды (кубик кидают?) перед каждым коммитом задачи. При этом в разговорах косвенно выяснился средний размер разработческой задачи: 1 - 1,5 дня. Заметил, как еще один аргумент "не мельчить задачи", что в некоторых конторах порою встречается (и даже считается особым писком управления).
Следующим Макс Лапшин опять хвалил Erlang. Одновременно таки упомянув о некоторых ограничениях и проблемах записи в сокеты большого количества видео-потоков. Ну так ожидаемо.
Дальше последовали пара-тройка докладов, не оставивших никаких иных воспоминаний, кроме большого количества "воды". Хотя среди них, правда, был и один содержательный - от Josh Berkus, о системах сбора данных (то, что в России зовут "телеметрией"). Хорошо рассказано, но "для чайников". Для тех, кто сталкивался с этой областью задач, ничего нового в нем нет. Мне он оказался полезен в контексте конференции, а точнее - того "мелко нарезанного салата", на который была похожа ее программа. Может быть, именно благодаря такой смеси в голове сложились аналогии между телеметрическими задачами и другими обсуждавшимися темами. Например: в баннерных системах есть задача исчерпания оплаченного лимита показов (или кликов). Она аналогична задаче выхода измеряемого параметра за "уставку" (скажем, температуры в помещении, когда уже пора объявлять пожарную тревогу). Но это уже мысли по поводу - в выступлении об аналогиях сказано не было.
Затем шла большая лекция Robert Virding об устройстве виртуальной машины Erlang. Хорошая, подробная, но очень усыпляющим тоном прочитана. Примерно половину автор посвятил сравнению архитектур виртуальных машин Erlang и Java. В частности, механизмам работы с памятью и тому, почему в Erlang-машине не возникает роста памяти под нагрузкой и не требуются паузы на сборку мусора. В общем, очень красиво контрастировал с докладом другого дня, в исполнении Алексея Розгина на тему о сборке мусора в Java.
К вечеру первого дня следовала парочка выступлений, общий смысл которых в следующем: если у вас в сервисе есть сильно нагруженная обработка, то можно взять исходники какого-нибудь легкого http-сервера (например, nginx или подобного) и написать на С в него необходимый прикладной функционал. Получится специализированный прикладной серверок, быстрый и легкий. Да, получится... на мой взгляд, это очевидно. О чем столько говорить?
Еще оказалось неожиданно интересным выступление Сергея Рыжикова (из "1C-Битрикс"). Честно говоря, не знал, стоит ли идти на него, или лучше посетить альтернативную секцию. Все-таки пошел, и не пожалел. Доклад оказался об истории хостинга их сервиса и приключениях с площадкой Amazon. Хорошо, внятно и живо. Кроме того, были помянуты планы вывода SaaS сервиса "Битрикс24". Похоже, к концу года можно ожидать новостей на российском SaaS-рынке.
О втором дне конференции скажу более кратко. Количество содержания в выступлениях сократилось (по сравнению с первым днем), а количество бреда и ощущение балагана усилилось. Так и хотелось спросить докладчиков: "Где вы такую траву берете?" (особенно отличились ребята из "Комсомольской правды"). Ожидал чего-то интересного от доклада по AJAX, команды "ВКонтакте", но... ничего нового, сверх того, что уже было десятки раз пережевано на habrahabr.
Похоже, наши крупные российские конторы электронных изданий и социальных сетей далеко не на переднем крае технологий. Это объяснимо: груз ответственности, старый легаси-код и архитектурные решения заставляют их быть "осторожными на поворотах". Но все равно грустно. Из представленных в этой группе выступлений хорошее впечатление произвели только "Одноклассники". Они, по крайней мере, пытаются прогнозировать свои будущие проблемы и готовить решения заранее. Конкретно в докладе рассказывалось о механизмах хранения того умопомрачительного количества фотографий (зачастую никак не обработанных, большого размера), которые пользователи заливают на их сервис. Решения интересные и эффективные, опирающиеся на нормальное проектирование и разумный минимализм. С учетом написанной на Java системы - редкость. Никакого увлечения готовыми библиотеками, которые "можно сразу прикрутить". Только то, что нужно; ничего лишнего. Короче - молодцы. Это был первый из всего двух докладов второго дня, которые показались мне полезными и интересными.
Другой - рассказ про сборку памяти в различных Java-машинах. Честно говоря, тема сильно вне зоны моих интересов и про содержательную часть доклада пусть лучше напишет кто-нибудь другой. Я же выскажу только свои эмоции: "Подозревал, что дело плохо, но не ожидал, что настолько!" Короче, по мнению докладчика:
- Если у вас объем памяти приложения превысил 4Гб, то остановки приложения для сборки мусора (в самый неподходящий момент) на время от 30 сек до нескольких минут, это не баг - это фича. Типа "так и задумано".
- Если в вашем приложении время жизни объектов отличается от "стандартного спектра", вам придется особенно скверно.
Мой вывод для себя. Виртуальная машина рассчитана на редкие всплески активности (которые надо обработать быстро, наплевав на память), и продолжительный "сон" между ними, примерно как сидеть-сидеть в засаде, вдруг резко схватить добычу, захавать, и заснуть на все остальное время крупному хищному пресмыкающемуся. При постоянной высокой нагрузке и постоянно требуемом малом времени отклика - проблемы гарантированы, организм не заточен под такой образ жизни. И здесь как раз кстати вспоминается рассказ о виртуальной машине Erlang, из первого дня.