Если кто не в курсе, 22 и 23 сентября в Москве проходила конференция для разработчиков высоконагруженных систем. Не знаю могу ли я себя полноценно отнести к этой категории людей, но тем не менее данной мероприятие я сегодня посетил, пост будет опубликован скорее всего несколько позже, но начинаю писать прямо с ходу в первый же день конференции. Здесь будут лишь мои личные впечатления вперемешку с кратким пересказом происходившего. Что ж, приступим.

Предистория

Попал я на данное мероприятие достаточно тривиально: благодаря акции для студентов, предоставляющей бесплатное участие по результатам online-тестирования (не знаю заплатил ли бы я недельную зарплату за участие, если бы ее не было, хотя впринципе со скидками тоже не так уж и много получилось бы), а также стратежно добавленной в RSS-агрегатор нужной ленте новостей.

Само же тестирование меня несколько позабавило. Не знаю кто его составлял, но суть его была примерно в следующем: за полтора часа предлагплось ответить на 10 вопросов, семь из которых формулировалось примерно как "какой результат будет получен после выполнения программы <код на перле>". Основной прикол был в том, что этот код написан на Perl там сказано не было, если честно с первого вопроса я его даже не признал, приняв за какой-то псевдо-код. На втором вопросе до меня дошла-таки истина, благодаря не столь отдаленному во времени посещению YAPC::Russia 2008 "May Perl" и, в частности, проходившему там мастер-классу Ивана Сережкина. Дальнейшее тестированме проходило с открытым vim'ом и /bin/perl под рукой, лишь один или два вопроса пришлось неторопливо погуглить...

За пару дней до конференции на почту пришло-таки поздравление с успешным прохождением тестирования и приглашением. В планы на эти два дня входило как минимум посещение ВУЗа и работы, но особого труда их освободить не составило. Так я и оказался сегодня утром в "Инфопространстве".

День первый

Добравшись-таки до точки назначения на 20 минут позже запланированного открытия регистрация я как раз успел к ее началу. В нагрузку к бэйджику девушки выдали пакетик с программкой и кучей макулатуры, а также адский круглый девайс, на проверку оказавшийся шлепанцами.

Оставшееся до открытия время пришлось коротать по большей части изучая программку и здороваясь с тем очень скромным количеством лично знакомых мне людей, которые тоже посетили данное мероприятие. На удивление с ходу увидел много каким-то непонятным образом виртуально-знакомых лиц, с которыми лично определенно никогда не общался. Конференция проходила в два потока, так что в процессе ознакомления с программкой пришлось и определяться с более полезными для себя докладами; на практике дело оказалось непростым, так как даже прилагавшаяся книжечка с тезисами не позволяла заранее оценить качество доклада. В итоге в этом нелегком деле даже пришлось припомнить пару когда-то давно прочитанных статей по эвристике - очень помогло.

После непродолжительно-формального открытия начался первый доклад от Анатолия Орлова из Яндекс. Доклад был, как ни странно, вводно-обзорным, и посвящен он был по большей части взгляду на потенциальную нагрузку на веб-сервера с точки зрения оборудования и операционной системы. Никаких деталей, достаточно тривиально, но напомнить никогда не помешает, да и со своей задачей - задать соответствующий настрой в аудитории он определенно справился.

После непродолжительного перерыва на кофе слово перешло еще одному представителю компании Яндекс - Филиппу Дельгядо. На этот раз речь пошла о веб-проектах средних размеров, которым необходимо справляться с серьезной нагрузкой (наравне с прочими нефункциональными требованиями) но с несколько другой точки зрения, программиста. Выступление также носило обзорный характер и содержало в себе повествования о достаточно большом количестве граблей, на которые могут натыкаться те или иные проекты. На самом деле по затрагиваемым темам мне в свое время довелось прочитать достаточно много материалов, пару раз споткнуться на практике и даже написать пару постов, так что лично я рассматривал этот доклад как закрепление знакомых тем. Разве что затронутый вопрос горизонтального масштабирования хранения данных меня несколько смутил: не знаю, может быть я несколько не в теме или еще что, но суть была примерно такова, что под partitioning'ом рассматривались только псевдо-универсальные решения, входящие в комплект некоторых СУБД, в то время как sharding'ом было предложено понимать все остальные, "самопальные", решения, специфичные для конкретного проекта. Я же почему-то всегда рассматривал такой подход как нечто концептуально-общее, так как конкретика реализации не важна, а важна сама идея данного подхода, и считаю эти два слова достаточно близкими синонимами (ровно как и многочисленные их русские аналоги), хотя может быть я и не прав...

Следующее выступление было, пожалуй, лучшим из увиденных мной в первый день. В программке оно значилось как: "Как писать высокопроизводительные веб-сервера", Антон Самохвалов (Яндекс). Были рассмотрен ряд возможных подходов к написанию веб-серверов: начиная банальными неработоспособными однопоточными вариантами и заканчивая противопоставлению вполне рабочих вариантов: threads, FSM и co-routine. Докладчик оказался убежденным сторонником подхода с использованием co-routine или на худой конец thread'ов, а также использующего схожую идеологию веб-сервера от ASF. Презентация сыграла лишь роль детонатора для последующей бурной дискуссии с участием многих слушателей, а также ведущего этой секции - Игоря Сысоева, по совместительству разработчика известного в "узких" кругах проекта nginx. Ничего удивительного, что обсуждение плавно перетекло в Holy War: Threads vs FSM, но в отличии от знаменитых войн анонимусов на linux.org.ru, шоу выдалось захватывающим и информационно-полезным. Основными аргументами были даже не цифры о производительности, полученные ребятами из Яндекса в полу-синтетических тестах (Антон активно упоминал тот факт, что на примере базового поиска Яндекса использованние thread'ы давало примерно 10% прирост производительности по сравнению с FSM), а скорее споры о maintenability кода и его простоте, а также теоретических пределах использования этих подходов в разных условиях (речь даже дошла до гипотетических ситуаций с использованием более чем четырехядерных процессоров). Довелось выслушать мнения профессионалов по обе стороны "баррикад" и самостоятельно сделать все требуемые выводы, самый банальный и немаловажный из которых заключается просто в том факте, что оба подхода имеют право на жизнь в реальных проектах и какой из них использовать очень во многом зависит от личных предпочтений разработчиков и специфики проекта.

Далее по расписанию был запланировал обеденный перерыв, на котором я решил заглянуть в аудиторию параллельного потока (где весь день рассказывали о различных системах хранения данных). В это время там как раз проходил доклад Павла Уварова из Рамблер о их собственной разработке для хранения и передачи данных под названием HCS (читается почему-то как "хикс"). Самое начало доклада я, к сожалению, пропустил, но почти с первых же увиденных мной слайдов проект меня заинтересовал. Суть данной технологии примерно характеризуется ее названием: Hierarchically Compressed Stream. С одной стороны это формат хранения иерархически структурированных данных, с другой же - данные в нем представляют обычный файл, который легко обернуть в произвольный протокол передачи потоковых данных (т.е. например просто раздавать через любой HTTP-сервер). По представленным в презентации benchmark'ам запись и линейный доступ к данным в этом формате происходит в разы, а то и порядки быстрее по сравнению с РСУБД, а для ускорения случайного доступа, на сколько я понял, имеется возможность построения индекса по верхнему уровню иерархии. Помимо всего прочего, Павел обрадовал аудиторию, что данная технология в ближайшем времени будет опубликована в opensource, обязательно надо будет попробовать ее в деле как только появится возможность.

Вернувшись после обеда в аудиторию первого потока я сверился с программкой и обнаружил, что сейчас будут рассказывать про архитектуру сервиса SpyLog. Выступление Сергея Скворцова было очень общим и не углублялось в какие-либо детали, если априори представлять себе как работают сервисы веб-аналитики в целом, то становилось и вовсе скучно. Единственной конкретикой было разве что упоминание о том, что для сбора первичных данных используется nginx (модифицированный, если я правильно понял)

После этого доклада можно было стать свидетелем повествования работников mail.ru сначала об их собственной разработке под названием Imagine Framework, которая тоже вполне соответствует своему названию: ее можно разве что представить - ни одного примера кода, закрыт для использования только в рамках mail.ru, много слов ни о чем и общий стиль изложения в духе "вот какую клевую штуку мы придумали, но никому не дадим и не покажем". В общем я даже, если честно, не понял для какого он языка программирования предназначен и чем он лучше (или хотябы просто отличается) от opensource аналогов (упоминались собственные системы кэширования, мониторинга и бинарный протокол). В итоге я до конца так и не дослушал и ушел снова в соседний поток слушать про хранение слабосвязанных данных.

Илья Космодемьянцев из SUP Fabrik вел рассказ о том, как могут развиваться события, если тот или иной проект сталкивается с хранением данных, плохо вписывающихся в модель РСУБД. Разработчикам приходят мысли о создании собственного специфического формата хранения данных, о том с какими проблемами могут столкнуться в процессе. Возможные варианты решения проблем также рассматривались, например в виде написания не формата хранения данных, а собственного хранилища для, например, MySQL - это может помочь избежать части проблем. Помимо этого выдвигалось очень спорное предложение о создании некого "UseCase API", которое могло бы позволить инкапсулировать для бэкэнда все особенности хранения данных в случае их нетрадиционности. Хотя на практике подобные методики применяются достаточно давно, особенно в объектно-ориентированных языках программирования в виде data-access objects.

После еще одного кофе-брейка оставалось лишь два заключительных доклада первого дня, из которых я решил посетить нечто под названием "Масштабный Jabber-кластер, IM и не только" от Андрея Федоровского из РБК. Начало доклада было достаточно примитивным - что такое Jabber и с чем его едят, всем это и без того было известно, так что было достаточно скучно. Даже обзор доступных расширений не открыл ничего нового - все те же давно знакомые вещи, разве что некий интерес вызвал процесс отправки бинарных данных (т.е. произвольных файлов): было заявлено что отправка файла временно обрывает поток XML-данных и отправляет вместо него бинарный поток, но не заставил себя ждать очевидный вопрос: а как же тогда происходит общение в этот момент. Вокруг этого образовалась небольшая дискуссия, но к консенсусу прийти так и не удалось. Далее пошел рассказ собственно о том как на сегодняшний день можно построить Jabber-кластер - подробностей повествованию явно не хватало, но суть была примерно такова: единственным более-менее сносным Jabber-сервером является ejabberd, написанный на до сих пор экзотическом языке Erlang (что впоследствии подтвердили сотрудники Яндекс: в своем проекте Я.Онлайн они используют тоже его). По-умолчанию он использует нативное для Erlang хранилище данных под названием Mnesia, но в том проекте РБК, на основе которого и строился весь доклад (правда я так и не понял как он называется), почему-то побоялись его использовать (видимо из-за нежелания разбираться в том как оно функционирует) и использовали имеющуюся возможность интеграции с более традиционной СУБД - PostgreSQL. В дискуссии после доклада речь шла скорее о самом ejabberd, Erlang'е, острой нехватке программистов на нем и тому подобных вещах, чем о самом докладе.

Подошедший к концу первый день конференции оставил массу положительных впечатлений и тем для размышления. Практическая полезность конференции не вызывает никаких сомнений, чего-то подобное невозможно увидеть и услышать в интернете или где-либо еще. Были конечно же и негативные моменты в виде абсолютно бестолковых докладов, но обычно это удавалось с ходу обнаружить и вовремя ретироваться в соседний поток.

День второй

Вот уже почти как неделю никак не могу найти времени дописать этот пост, в связи с жесткой нехваткой свободного времени, благодаря работе и учебе, так что позволю себе опубликовать пока в недописанном варианте. Как дойдут руки - обязательно допишу, благо во второй день тоже было несколько интересных выступлений, из которых особенно запомнилось выступление Тимура Хайруллина из Яндекс о методиках нагрузочного тестирования.