×Закрыть

.NET дайджест #26: примеры использования ASP.NET Core, новые фичи C# 8.0

В выпуске: производительность в ASP.NET Core, Apache Kafka — не для Event Sourcing, впечатления от Amazon Hiring Event.

.NET

Practical samples for ASP.NET Core
Очень классный репозиторий, в котором собрано множество примеров использования ASP.NET Core для разных задач. Большинство из них в документации найти не получится. Очень рекомендую посмотреть.

Building C# 8.0, Take C# 8.0 for a spin, Do more with patterns in C# 8.0
Обзор новых фич C# 8.0. Особенно интересно с pattern matching и using declarations.

Performance Tuning for .NET Core

Pattern matching in action using C# 6
Какая-то жесть с использованием исключений, но любопытно, как народ изгаляется.

ASP.NET Core: Saturating 10GbE at 7+ million request/s
Классная статья о текущем положении дел с производительностью в ASP.NET Core.

Architecture

Apache Kafka is not for Event Sourcing
Часто слышу, как люди заблуждаются на этот счет. Отличная статья с объяснениями, почему это не так.

Tools

.NET Diagnostics Tools

Enable repeatable package restores using a lock file
Интересный подход, думаю как-то попробовать.

Разное

Freelancing in America 2018
Ежегодный отчет от Upwork

GitHub Free users now get unlimited private repositories

10 Personal Finance Lessons for Technology Professionals
Очень занимательное чтиво. Полностью пока не осилил, но периодически к нему возвращаюсь.

You’re Wasting Your Time

Tips & Tricks

Несколько выпусков назад я рассказывал, что мы перевели проект на .NET Standard. И вот наконец-то мигрировали первый достаточно большой API на ASP.NET Core. Получилось очень круто и практически безболезненно. Я создал новый проект, вынес логику контроллеров в отдельные сервисы 1:1 (у нас тонкие контроллеры в основном), скопировал контроллеры в новый проект, немного поправил атрибуты и остальные вещи которые отличаются от WebAPI. Кроме этого, конечно, нужно было реализовать несколько интерфейсов сервисов, которые напрямую использовали System.Web, на используя API .NET Core. При этом старый проект остался в .sln и при необходимости его можно задеплоить из Octopus в случае проблем .NET Core. Такой-себе backup plan. Через несколько недель удалим его полностью.

Еще один момент, который мне очень нравится в dotnet cli, это возможность запуска проектов из консоли, например dotnet run Project.Directory.Name -- args. Это позволяет удобно создавать разные утилитки и запускать их без явной компиляции как в dev окружении, так и на CI. Например, у нас есть утилита, которая генерит триггеры для TeamCity и инструкции COPY для Dockerfile на основании зависимостей проекта. Повторюсь, очень удобно.

XP Days 2018

В прошлом выпуске я писал, что буду выступать на XP Days 2018. Конференция была отличная, много интересных докладов и общения. Своим выступлением Event-Driven Systems With MongoDB я доволен, хотя на видео и заметно, что я сильно нервничал. Это был мое первое выступление, и лечится это только практикой. На lightning talk на DDD EU было уже проще. Если будете смотреть, конструктивная критика очень приветствуется! Это поможет мне в будущем выступать лучше.

Amazon Hiring Event Jan 21-25

Как многие уже знают, в Киеве недавно прошел Amazon Hiring Event. Vitaliy Bondarenko организовал группу в Slack для подготовки к ивенту, проводил вебинары и mock-interview, за что ему огромное спасибо! Весь процесс подготовки был очень увлекательными и продуктивным.

Мы собирались с ребятами офлайн, решали задачи у доски и обсуждали разные вопросы с этим связанные, решали алгоритмические задачки и задачи на System Design, созваниваясь в Skype. С нетерпением ждали результатов каждого участника на каждом этапе — было очень весело. На митапе перед серией интервью мы познакомились с командами/интервьюерами из Амазона, пообщались, здорово провели время.

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

Вот некоторые ссылки, которые мне помогли в подготовке:

Interviewing at Amazon — Leadership Principles

The System Design Primer

Grokking the System Design Interview

InterviewBit Programming

Cracking the Coding Interview

С удовольствием отвечу на вопросы.


← Предыдущий выпуск: .NET Дайджест #25

LinkedIn

4 комментария

Подписаться на комментарииОтписаться от комментариев Комментарии могут оставлять только пользователи с подтвержденными аккаунтами.
Apache Kafka is not for Event Sourcing
Часто слышу, как люди заблуждаются на этот счет. Отличная статья с объяснениями на этот счет.

Не очень нравиться то как ребята предлагают использовать возможности технологии дл ивент сорсинга. В kafka очень много зависит от того как ее используешь, в целом там очень много инструментариев не только для стриминга, но и для ивент сорсинга, который можно на ней готовить. Статья от конфлюент на этот счет
www.confluent.io/...​h-kafka-streams-and-ksql

Pattern matching in action using C# 6
Какая-то жесть с использованием исключений, но любопытно, как народ изгаляется.

в C# 7 есть из коробки type parttern match casы, нет смысла так извращаться, другой момент — что даже такой использования как его сделали в C# для type матч , в том числе и описанный в статье, являеться скорее антипатерном для FP pattern матчинга.


In fact combined, with the merging of these two Pull Requests (PRs) aspnet/AspNetCore#4601 and dotnet/coreclr#21159 the steady state allocations for Plaintext on at the platform level has been entirely eliminated and is now zero allocation.

What does Zero allocations look like?

Running a 6 minute, 64 connection test on localhost:

6 minute, 64 connection test on localhost

Results in 122,946,688 HTTP requests and responses; and the allocations?

Allocations for over 100 Million Requests

Less than 1MB allocated in total for processing more than 122 Million requests and generating their responses!

700 кб на 122 миллиона http запросов в managed платформе. %)

Event-Driven Systems With MongoDB я доволен

обязательно к просмотру, спасибо за дайджест :)

На счет Kafka и ES, в классическом ES идея в том, что состояние одного аггрегата можно легко восстановить из его событий. Т.е. запросить все события по его ID. Kafka дизайнилась не для этого сценария. Можно, конечно, попробовать извернуться с ksql, но я таким не занимался и не знаю на сколько это будет эффективно. А в остальном Kafka — очень крута, конечно, и отлично подходит для проекций, подписок на ивенты и т.п., если производительности того или иного Event Store уже не хватает.

На счет pattern matching, это статья 2015 года, просто попалась мне недавно. Конечно, не нужно так делать 🙂.

На счет выступления, спасибо, надеюсь будет интересно и полезно 🙂.

На счет Kafka и ES, в классическом ES идея в том, что состояние одного аггрегата можно легко восстановить из его событий. Т.е. запросить все события по его ID. Kafka дизайнилась не для этого сценария.

kafka.apache.org/...​reams/kstream/KTable.html
;)

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

Подписаться на комментарии