Привет, хабровчане!

Мы вернулись с конференции для .NET-разработчиков DotNext и честно делимся впечатлениями про самые запомнившиеся доклады. Надеемся, наш отзыв пригодится тем, кто будет смотреть видеозаписи выступлений.

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



Day 1


Использование Tarantool в .NET-проектах — Анатолий Попов (презентация)


Доклад начинался с обзора эволюции баз данных SQL -> NoSQL -> NewSQL, их плюсов и минусов. Анатолий рассказал, почему, собственно, назрела необходимость в NewSQL — это попытка скрестить производительность NoSQL и язык SQL-запросов, для которого доступен миллиард полезных инструментов.

Про Tarantool была упомянута следующая особенность — записи хранятся в виде tuples произвольной длины. Под капотом Tarantool используются LSM-деревья.

Основную часть доклада Анатолий рассказывал про борьбу за производительность в реализации драйвера Tarantool для .NET. В дело пошли новые абстракции Readonly Span и пул IMemoryOwner. За эталон взяты 200k RPS, которые выдает Golang-драйвер, и пока что удалось достичь 1/3 результата. Спикер заверил, что постепенно будет улучшать показатели, но конкретные дальнейшие планы и перспективы остались в тумане.

Оптимизации внутри .NET Core — Егор Богатов


Егор обложил уместным юмором свой рассказ про кишочки mono и ryuJIT, в отличие от того же Mutel из Unity, которого слушать было довольно сонливо.

Егор осветил тему автовекторизации вычислений в mono, также рассказал про SSE- AVX- инструкции, доступные теперь напрямую из C#.

Заглядывая в будущее, он поведал, что в .Net Core 3 нас ждет tier compilation, т.е. в рантайме появится отдельный тяжелый jit наподобие server в Java. В ryuJIT ожидаются новые оптимизации loop unrolling и escape analysis (последний пилит студент, да поможет ему гитхаб).

Наш комментарий: на сегодня остается внушительный задел для еще большего прироста производительности платформы, поскольку много важных оптимизаций из мира Java и классических статических компиляторов все еще не применены в .Net.

Modern web development with SAFE-Stack — Steffen Forkmann


Штефан — ярый апологет языка F#. В докладе он поделился опытом веб-разработки, полностью выстроенной по функциональным канонам. Здесь вам и Functional MVC Web Framework (Saturn), и Fable для трансляции F# в JS, и Elm-подобный UI, изрядно приправленные фразами really nice и very good. Доклад в целом неплох и подтверждает сверхъестественные способности альтернативных религий.

Creating airplane mode proof Xamarin applications — Gerald Versluis (презентация)


По способу изложения доклад очень напоминает доклад про SAFE-Stack и выглядит как передача “Смак”: сначала кладем в тарелочку с приложением компонент Essentials для обнаружения доступа в интернет, затем пропускаем через Refit интерфейс REST API, охлаждаем данные в кэше Akavache, сверху посыпаем Polly для умной обработки ошибок сетевых запросов. Не обошлось без голландской самоиронии, ведь приложение то и дело рандомно крэшилось в симуляторе.

ASP.NET Core multi-tenant architecture: Challenges and solutions — Halil Ibrahim Kalkan (презентация)


В докладе описаны все основные особенности архитектуры мульти-тенантных приложений.

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

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

Domain-driven design: рецепт для прагматика — Алексей Мерсон (презентация)


Отличный доклад про базовые понятия DDD. Какую книгу читать сначала: “синюю” или “красную”? Как всей команде разговаривать на одном языке? Можно ли в программах на C# использовать кириллические именования? Как наконец-то перестать бояться Separated Interface и сделать так, чтобы доменный код не зависел от остальных частей приложения? Все эти моменты с примерами освещены в этом докладе.

Алексей подчеркивает важность language (единого языка) для реализации одного Bounded Context. Он рассказал, как можно выбрать размер Bounded Context и какие виды Subdomain могут быть. Также в докладе прозвучало, что один Bounded Context равна одному микросервису — это хорошо коррелирует с нашим опытом в реализации проектов.

Было интересно послушать о сути луковичной архитектуры и плюсах по сравнению с трехслойной/четырехслойной архитектуры.

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

Day 2


Pragmatic unit testing — Vladimir Khorikov (презентация)


Один из лучших докладов и докладчиков на наш взгляд.

Владимир по полочкам разобрал, каково истинное назначение тестов для проекта, какие метрики определяют качество тестов, как различные виды тестирования соответствуют этим метрикам. Со всеми мыслями нельзя не согласиться, так что must see.

Хориков записал множество курсов на Pluralsight — ищи его там. А ещё у него хороший блог.

Быстрорастворимое проектирование — Максим Аршинов (презентация)


Продолжая доклад Мерсона про DDD, Максим рассказал про переход от классического разбиения кода по слоям к луковой архитектуре, в течение всего доклада проводя рефакторинг метода обновления мэйла пользователя. В итоге получился pipeline из декораторов (привет, yegor256) в CQRS-стиле c максимально строгой типизацией DTO (привет, FSharpForFunAndProfit).

На выходе мы получили готовое руководство к действию, которое можно применять в проекте, чтобы получить такой же элегантный код, как у Макса.

В целом, доклад крайне насыщен полезным идеями. Опыт Максима в преподавании положительно отразился на его уровне скиллов как докладчика — слушать презентацию было просто приятно.

Behind the burst compiler, converting .NET IL to highly optimized native code by using LLVM — Alexandre Mutel


По всей видимости, Unity оскалил зубы на игры А-класса, а потому игроделам нужна производительность сильно ближе к C++. Mutel рассказал, как они добиваются хороших результатов за счет выделения подмножества языка C# (HPC#), в котором есть готовые структуры для эффективной работой с памятью без GC и нет некоторых привычных конструкций языка.

Идея в том, чтобы применять это подмножество только для самых затратных методов, так что в остальных местах руки будут как всегда развязаны (насколько это позволительно в геймдеве). Для компиляции HPC# разрабатывается новый AOT/JIT-компилятор burst. Burst в сравнении c ryuJIT уже выдает 10х на некоторых синтетических тестах.

На показанных примерах сгенерированного ассемблера видно, насколько мозгастый получился компилятор. А разгадка одна и никого не удивляет — IL код скармливается в LLVM. Также для математики написаны интринсики с использованием сторонней высокоэффективной библиотеки.

Доклад сложный для восприятия, докладчик слишком суров.

Жизнь акторов в кластере: зачем, когда и как — Вагиф Абилов (презентация)


На докладе вскрылось, что половина аудитории сидит на F#. Это, пожалуй, самое приятное из того, что было в этом докладе. Выступление закончилось живым песнопением про split brain в кластере. Оно и славно.

Как выжить под нагрузкой: отказоустойчивый сервер, умный клиент — Игорь Луканин (презентация)


Игорь рассказал про кухню хайлоада в проектах «Контура». Удивил тем, что в компании используют “балансировщик” на клиенте: API присылает информацию о загрузке нод кластера и статусы 429, в зависимости от которых клиент понимает, как распределять запросы. Также он показал метрики утилизации ресурсов и как определять, все хорошо или все плохо. Рассказал, как квотировать запросы по таймауту и по клиенту, а также почему очередь лучше обрабатывать в LIFO порядке.

Микрофоном владел опытный спикер, слушать Игоря было комфортно.

Архитектура производительности Dodo IS — Георгий Полевой (презентация)


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

Если описать доклад кратко, то можно сказать, что он был посвящен возможностям библиотеки Polly, таким паттернам как Retry Policy, Bulkhead Isolation, Fallback, и приправлен отличными примерами из жизни компании Dodo Pizza.

Тенденция последних лет — везде использовать асинхронность. Но у этой тенденции есть неочевидный эффект — это приводит к тому, что ресурсы сервера «забиваются». Раньше всё ограничивалось пулом потоков (thread pool). Веб-сервер располагал фиксированным пулом потоков, которые обрабатывали входящие запросы выполняя синхронные операции. Это ограничивало нагрузку на сервер. Каждый поток освобождался и принимал в обработку очередной запрос, когда вся работа действительно была закончена.

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

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

В общем, даже если вы не разрабатываете высоконагруженные сервисы, все равно ознакомьтесь с этим докладом.

Building responsive and scalable applications — Jeffrey Richter (презентация)


Это довольно старый доклад Джеффри Рихтера. Его можно было найти на просторах интернета вот уже как минимум год, да и тема без претензии на новизну. Но, черт возьми, это ведь Джеффри Рихтер! Мы не могли не послушать автора книги, которая по праву считается библией любого C# разработчика. Старина Джеффри оказался приятным человеком и хорошим докладчиком. Мы просто с удовольствием провели время.

Комментарии (7)


  1. Veikedo
    28.11.2018 16:33

    Какую книгу читать сначала: “синюю” или “красную”?

    Ну так какую?


    1. zagir
      28.11.2018 17:34

      Сначало красную, а потом синюю)


    1. mvcdev
      29.11.2018 09:07
      +1

      На самом деле, речь шла о классической книге «Domain Driven Design Эрика» Эванса (синяя) и более современной книге «Implementing Domain-Driven Design» Вон Вернона (красная). Есть мнение, что подача материала в первой книге не самая оптимальная и это, вроде бы, признает даже сам автор. А вот вторая в этом плане написана более удачно. Поэтому сначала красную, потом синюю :)


      1. Veikedo
        29.11.2018 10:16

        Да я понял о каких книгах речь, спасибо :)


  1. aensidhe
    29.11.2018 11:32

    По поводу первого доклада — ну там всё туманно, потому что официальной реализации пайплайнов поверх сокетов в дотнете нет, надо будет брать неофициальную.


    Если мы берём пайплайны, то надо адаптировать msgpack библиотеки к работе над ReadOnlySequence и к чтению одного MsgPack токена из нескольких буферов.


    Это всё займёт не один день, поэтому я особо и не распространяюсь. Я уже пообещал как-то релиз в июле, а потом куча изменений в жизни заставили отложить этот релиз.


  1. grigor
    29.11.2018 22:29

    А видео докладов будет?


    1. eastbanctech Автор
      30.11.2018 07:00

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