Перформанс во всех смыслах: как прошёл DotNext 2017 Moscow

7vzukrlay3v2komlqh0nee84pq0.jpeg

В прошлом году конференция DotNext проходила в Москве один день, а в этом стала двухдневной. Теперь, когда очередной московский DotNext позади, а зрители прислали свой фидбэк, время оглянуться: как всё прошло, и что вошло в увеличившийся хронометраж? Подробности под катом, а для затравки скажем, что слово «performance» оказалось актуально в обоих значениях: и «производительность», и «художественное выступление».

Первым спикером первого дня стал Андрей DreamWalker Акиньшин (JetBrains), представлять которого зрителям DotNext уже не требуется: его доклады каждый раз получают отличные оценки. Но если на предыдущем московском DotNext он рассказывал о такой «общей» теме, как арифметические операции, то теперь о «близкой к продакшну»: тестировании производительности. Недостаточно просто проверить производительность однократно — что делать, чтобы при каждом новом релизе быть уверенным, что она внезапно не просядет? Многие выбирают вариант «ничего», но таких в выступлении мимоходом пожурили.

kz8xh_fom684qnazcsbcqzwqkaa.jpeg

Понятно, что для самого Андрея эта тема актуальна в связи с его работой над Rider, и, рассказывая о возможных проблемах, он ссылался на опыт проекта: «при переходе с Mono 4.9 на Mono 5.2 ряд наших тестов стал внезапно вылетать по таймауту. Что делать? Говорите, увеличить таймаут? Остаться на старой версии Mono? Нет, это всё нехорошие варианты». И способы справляться с проблемами тоже брал из собственной практики: «у нас есть merge robots, которые при каждом merge автоматически прогоняют тесты, и если они не пройдут, то ничего не смерджится».

dl7dk25jasjqerk6jngerh77ccy.jpeg

Слово «перформанс» в первый день можно было услышать и от других спикеров — скажем, у Карела Зикмунда (Microsoft) оно содержалось прямо в названии доклада ».NET Core Networking stack and Performance». Но внимание к производительности не означает, что больше было не о чем послушать. Например, одним из любимцев публики оказался Дмитрий Сошников (Microsoft): ранее он уже рассказывал на DotNext про AI-решения от Microsoft, но тогда они были ориентированы в первую очередь на Python, а теперь появились более подходящие для .NET-разработчиков, так что его новый доклад об искусственном интеллекте был встречен очень тепло.

Анатолий Кулаков, как и Андрей Акиньшин, порицал подход, когда просто пишут работающий код и не интересуются его дальнейшей судьбой — по его мнению, разработчикам надо понимать, что потом происходит в продакшне, и доклад был посвящён сбору и представлению различных метрик. Из него можно было, в частности, узнать интересные подробности о time series databases, хранящих всё с привязкой ко времени. Поскольку о таких БД слышно реже, чем о реляционных или графовых, на них легко не обращать внимания, считая трендом графовые — вот они, мол, активно растут. Но Анатолий обратил внимание аудитории на то, что вообще-то по темпам роста как раз time series далеко впереди. Конечно, это ничего не говорит об абсолютных цифрах (легко быстро расти, когда ты маленький), но это даёт повод присмотреться внимательнее.

gph6thenixlk9of_1use8vot96c.jpeg

Когда начинаешь собирать и хранить множество данных, встаёт вопрос объёма — и среди прочего Анатолий показывал, как впечатляюще в time series database ужимают информацию вида «timestamp / tags / fields». Для временных меток можно не сохранять каждый раз полное время, а указывать дельту с предыдущим замером — это уже экономит место. А если снимаешь показания через определённые промежутки времени, эта разница оказывается одной и той же, и тогда полезнее дельта второго порядка: она становится вообще нулевой. Благодаря этому всему в Facebook обнаружили, что 96% их временных меток ужимаются до одного бита. С тегами тоже есть куда потесниться: когда количество возможных сочетаний не астрономическое, можно закодировать каждое из них и указывать только код. Хорошо, а что с самими фиксируемыми значениями, которые гораздо непредсказуемее? Практика показала, что даже тут куда экономичнее хранить вместо полного значения его XOR с предыдущим.

Вагиф Абилов рассказывал про потоки Akka Streams — например, о том, как «обратное давление» (backpressure) помогает потокам данных идти с нужной скоростью, используя и pull-, и push-подход. Самым удивительным моментом для многих оказалась концовка доклада, когда Вагиф «для закрепления пройденного» исполнил композицию собственного сочинения «Akka Stream Rap» (там тоже не обошлось без «применения backpressure, чтобы справиться с нарастающим темпом песни»). Зрители реагировали на это в духе «теперь я видел всё, осталось разве что зачитать исходники .NET Core под «Кровосток».

tzymnk7ow7xrlsyikmwi4xya9jw.jpeg

Но на самом деле в тот момент зрители видели далеко не всё: это выступление было лишь разминкой. После того, как все доклады первого дня закончились, дело дошло до вечеринки, и началось более масштабное шоу. Кроме Вагифа, на DotNext присутствовал ещё один музыкальный спикер — англичанин Дилан Битти, который любит переделывать рок-хиты в песни о разработке. Представление о его творчестве можно получить по этой пародии на Pink Floyd «Another Brick in the Wall (Part 2)»:

Дилан возит с собой на конференции компактную гитару, а Вагиф играет на клавишных, поэтому они решили объединить усилия и устроили совместный performance, исполнив и целый ряд пародий Дилана, и тот же «Akka Stream Rap» Вагифа. Присутствовавшие получили много удовольствия: тот же Карел Зикмунд по ходу действия написал целый ряд твитов, становившихся всё более и более восхищёнными, а позже на YouTube под «Enterprise Waterfall» появился комментарий «мы с тимлидом решили повесить в офисе постеры с цитатами из этой песни».

kqtof6zh-exa82tgffhiebd-wfk.jpeg

Когда пародии кончились, перешли просто к кавер-версиям, но даже тут Дилан удивил многих, специально к DotNext разучив русскоязычный припев «Песни для радио» Noize MC. В общем, вечеринка удалась.


Второй день тоже начался с одним из самых любимых спикеров DotNext-аудитории: Саша Гольдштейн говорил об отладке и профилировании .NET Core-приложений под Linux. И об уровне его погружения в тему хорошо говорит фраза из начала доклада: «кое-что из того, что покажу, сейчас держится на написанных мной скриптах, но я надеюсь, что в будущем появится официальная поддержка». Когда спикер недоволен тем, что предоставляет вендор («Microsoft предлагает под Linux создать файл mytrace.zip, а затем скопировать его на Windows-машину и открывать там с помощью PerfView —, но ведь у нас под рукой может даже не быть Windows»), и сам доделывает ещё не реализованное, это дорогого стоит.

qhtiem04h7ibgyvnqxi8n4lzmki.jpeg

Из-за того, что ситуация с Linux-инструментами в .NET-мире пока что оставляет желать лучшего, ранее в связи с Linux Саша обратил внимание на Java и даже выступил на нашей конференции JPoint. Забавно, что на DotNext в одном временном слоте с ним оказался спикер с противоположной ситуацией: Егора Бугаенко давно знают джависты, а тут он впервые пробовал себя перед дотнетчиками.

ayswkwykjppmkd6drkznwuxnq-e.jpeg

Егор известен тем, что при его появлении всё начинает бурлить: одни бурно возражают его радикальным идеям, другие соглашаются, а третьи говорят «я не согласен, но тут есть повод задуматься». На DotNext он говорил о TDD (эта тема как раз не привязана жёстко к конкретному стеку) — и здесь произошло то же самое. Позиция «зачем писать тесты, когда баги ещё не дали о себе знать» прожгла не один зрительский стул. Вот показательная деталь: когда после конференции зрители присылали отзывы на доклады, в случае с Егором один из отзывов оказался не стандартной короткой репликой, а возражением на три тысячи знаков. Неудивительно, что в дискуссионной зоне, куда каждый спикер отправлялся после своего доклада, Егор тоже услышал немало контраргументов от зрителей. Кстати, эти зоны вообще полюбились спикерам DotNext:

One of my favourite things @DotNextConf is the «discussion area» — after each talk, there«s a dedicated area for speaker Q&A with a flip chart and markers. It«s great having a chance to chat to the audience after your talk, and having time to properly answer questions in detail.

— Dylan Beattie (@dylanbeattie) November 13, 2017


Несмотря на «холиварность» Егора, рекордсменом по проведённому в дискуссионной зоне времени стал Федерико Луиc. И хотя в своём докладе он возвращал всех к теме производительности («Patterns for high-performance C#»), серьёзность темы не помешала ему покорить наши сердца маленьким эффектным жестом. Как известно посетителям наших конференций, всем докладам мы проставляем значки, говорящие об уровне их сложности («введение в технологию», «для практикующих инженеров» и «хардкор»), скажем, у самого Федерико стоял «хардкор». А он взял и использовал эти же значки в самом докладе, продемонстрировав там три других «уровня сложности»:

ohqbhtwqp1xzlwadxgizk0tiggw.jpeg

После обеда на сцену первого зала вышел Дилан Битти — и показал, что в качестве спикера выступает не хуже, чем в качестве музыканта. Он не стал сразу нырять в техническую конкретику, а начал с общих рассуждений о том, как технологический продукт может облегчать разработчику его освоение (давать «поиграться» и пояснять, что произошло не так, вместо простого «не запускается, идите штудировать документацию»). Это стимулирует регулярные выбросы допамина —, а благодаря ним разработчик не только получает больше удовольствия, но и лучше всё запоминает.

При этом, по мнению Битти, мы зачастую считаем понятие UX «чем-то для фронтендеров», хотя вообще-то любой написанный нами код потом будет использоваться другими людьми. А значит, у него будет user experience (в частности, та же кривая обучения), и об этом стоит думать. Затем Дилан перешёл к примерам того, что именно можно делать, и в итоге его доклад настолько понравился зрителям, что оценки уступили только выступлению Саше Гольдштейна. Особое внимание привлёк слайд «как на самом деле стоило бы назвать уровни логирования»:

no-g1kgqo44-55wbs0ecariucna.jpeg

Затем снова появился Гольдштейн, но уже в другой роли: он вёл круглый стол о профилировании и оптимизации с участием других спикеров DotNext — от того же Акиньшина до Сергея Быкова (Microsoft). Отзывы показывают, что такой формат застал многих зрителей врасплох, и возможность задать свой вопрос целой коллегии экспертов была использована не на полную катушку. Но потенциал у неё явно есть, и учтём это при проведении следующих DotNext.

idgutf-gis0jb-swunfkkz5szbc.jpeg

Наконец, завершал конференцию кейноут ещё одного спикера с громким именем, Дино Эспозито. В первый день Дино выступил с более серьёзным докладом «I have a microservices architecture and I didn’t know», а тут, когда что-то сложное зрители уже вряд ли смогли бы хорошо воспринимать, позволил себе пофантазировать. Он представил себе «DotNext 2048», проходящий в блокчейновом будущем — в котором, например, спикер Алекс Тиссен вместо своей нынешней темы «serverless computing» рассказывает уже про «developerless computing». Учитывая артистизм Дино, тут тоже получился своего рода перформанс, и без отсылок к известным песням тоже не обошлось (даже название кейноута, «Unchain my heart», взято у Джо Кокера) — так что второй день, как и первый, закрывался очень ярко.

h4lagni2twcgnal_mqhiro3bx-q.jpeg

В итоге на конференции было и чем загрузиться по уши, и над чем посмеяться после этого. Два значения слова «performance» хорошо дополнили друг друга, а два дня дали достаточно времени, чтобы влезли и обе этих вещи, и много докладов на совершенно другие темы (от безопасности до Apache Kafka). Но вот в этот текст подробное описание остальных докладов уже не влезет — иначе и читать его вам пришлось бы тоже два дня.

xqs-updsobrnlpv2wh6jjkrh0_g.jpeg

© Habrahabr.ru