📓 Записки программера
1.02K subscribers
304 photos
1 video
6 files
599 links
Канал с регулярными постами о разных интересных материалах (статьи, видео, фреймворки и полезные инструменты).

https://dotnet.social/@denisio
加入频道
Orleans - уже третий год всё хочу попробовать на каком-нибудь живом проекте этот прекрасный фреймворк для создания масштабируемых приложений на модели акторов (эта тема достаточно старая кстати, родилась ещё в 70-ые годы).

Вкратце, простым языком и для тех кто не вкурсе, суть идеи фреймворка: вынести логику и экземпляры классов (grain's) в отдельные контейнеры (silo = дословно "бункер"), которые (опционально) живут на других узлах, которые в свою очреедь объединяются в кластер. Клиент взаимодействует с кластером по эффективному бинарному протоколу, получая отказоустойчивость (если сдох один silo - запрошенный grain оживёт в другом), балансировку нагрузки и прочие штуки. Что ещё интересно: в Orleans используется compile-time генерация прокси-DTO для сериализации параметров и результатов и поддерживается версионирование grain'ов - в одном silo могут жить grain'ы для разных версий API.

Из коробки можно сделать много чего - например, задавать срок жизни grain'ов и можно в несколько строк кода или сделать свой strategy placement, который объяснит инфраструктуре как делить grain's между silo по разным критериям (например grain's одного клиента в один silo, grain's всех остальных - в другой). Традиционно для MS DI это всё решается через Configure<T>.

Также есть опциональный persistance для grain'ов, который может быть изкоробочный, а можно написать свою реализацию (там несложно), что в итоге приводит к тому что grain при рестарте silo и запросе его клиентом оживает с уже нужным состоянием.

Например, боты для телеги и других сетей отлично ложаться на механизм акторов - state актора храница в БД, по id юзера поднимается в любой момент, изменяется и пишется обратно в БД, при отсутствии активности юзера grain диспозица (время жизни простаивающего без работы актора задаётся) и как результат - хоть миллион юзеров акторов живёт и работает на одном silo.

За прошедшие три года Microsoft доложил в комплект полтора десятка примеров, написал приличную документацию, также никуда не делись tutorials (и несмотря на то что там 2017й год - они по прежнему актуальны), прикрутил мониторинг, причесал и интегрировал логирование. Сам Microsoft использует Orleans как бакенд для игры Halo. И уже апдейтнул его до .NET 7. Вобщем выглядит всё это очень красиво.

Для начала работы - лучше сначала прочитать доку (по крайней мере первый десяток разделов - они написаны понятным языком и изобилуют примерами). #dotnet
🔥2
В продолжение предыдущей темы - ещё два фреймворка для построения систем на акторах, про которые сильно подробно писать нечего т.к. не использовал ни в живых ни в тестовых проектах, но которые на мой взгляд достаточно интересны для изучения.

Akka.NET - заявляется, что по capability это порт фреймворка Akka с Java/Scala и оно умеет 50 million msg/sec on a single machine. Small memory footprint; ~2.5 million actors per GB of heap, что прямо таки интересно. Несколько статей-tutorial'ов (помимо штатной доки конечно):
Неплохое пошаговое руководство + исходники.
Actor-Model System with Akka.
Working with Akka.NET and Akka.Cluster
First steps, Calling actors from another actor и другие статьи A.Brandão Lustosa

Proto.Actor - более простой фреймворк на мой взгляд (по сравнению с Orleans или Akka), но позволяет без каких либо телодвижений попробовать как это работает. Примера на основной странице хватит, чтобы получить рабочий проект. Примеров там штук 30, на любой вкус. Тоже умеет persistence состояний в разные места и кластеризацию с помощью кубера или Consul.
#dotnet
👍2
nestjs - несложный фреймворк для nodejs для вебприложений. Особенно хорошо подойдет тем, кто знает asp.net и хочет попробовать nodejs - в нём структура проекта и пайплайн чем-то напоминает asp.net (контроллеры, сервисы, DI, миддлвари).

Заодно в него положили websockets, поддержку mongo и немножечко graphql. Документация конечно местами не совсем разъясняет как например в websocket пробросить инфу о текущем юзере - приходится смотреть в примеры.

Есть конечно и сильно отличающиеся штуки (например, контроллеры в nestjs по дефолту singleton, а request/response надо пробрасывать как параметры action'ов). Но это не портит картину, просто как особенность фреймворка (ну и частично nodejs :) И конечно не очень привычно, то что контекст БД выглядит как singleton (в отличие от традиционного scoped в .net), однако вспомнив что цикл обработки nodejs это event loop - всё встаёт на свои места. Даже как-то легче не заморачиваца на многопоточность :)))

Вообщем, как минимум для разного рода пет-проектов или MVP вполне подходит. #js #dotnet
Manage your terraform like a container (en) - достаточно простая статья про #terraform и #aws с примерами и картинками
Как профайлить софт в контейнере с помощью штатных инструментов. Несмотря на то, что в заголовоке упомянуто .net 6 - оно работает и net 5 тоже без изменений. Дампы получаемые из контейнера - открываются не только в Visual Studio, но и в Rider тоже. Что немаловажно, инструменты профайлинга никак не влияют на контейнер, пока их не дёрнешь. То есть как минимум на DEV среду можно деплоить контейнер прямо с ними.

В продолжение темы профайлинга - часть 0, часть 1 и часть 2 статьи этого же автора про OpenTelemetry и Metrics API.
#dotnet #docker #perf
👍1
Тестирование WebAPI endpoints с помощь консольного HttpRepl #dotnet
https://learn.microsoft.com/en-us/aspnet/core/web-api/http-repl/?view=aspnetcore-7.0&tabs=windows
Множество разных битовых приёмов для быстрого вычисления значений (на скриншоте пример)
http://graphics.stanford.edu/~seander/bithacks.html
MeGit - лёгкий удобный опенсурсный клиент для git. Как и любой инструмент - требует изучения (я не сразу нашёл где сделать pull для branch :) #tools
Библиотека распознавателя QR-кодов на JS - умеет ~15 типов QR-кодов, работает в т.ч. и на мобильных браузерах #js

upd: для #blazor https://github.com/densen2014/ZXingBlazor
Подробный разбор архитектур разных известных сервисов. Полезно для понимания и систематизации знаний - как работает это всё и выглядит с архитектурной точки зрения. Заодно потом на собесе сможете поговорить более предметно :)) (на английском) #education

Youtube Design
WhatsApp
Parking Lot
Twitter
50-100 вопросов для собесов по базам данных. Некоторые статьи датируются 201х годом, но по пролистыванию - вопросы там по прежнему актуальные (на английском) #education

Database
SQL Queries
Microsoft SQL Server
MySQL
Postgres
Oracle
👍1
QuestPDF - пакет для генерации PDF-файлов #dotnet
🔥1
Kaitai Struct is a declarative language used to describe various binary data structures, laid out in files or in memory: i.e. binary file formats, network stream packet formats, etc. Прилагается Web IDE #tools
Статья из 6 частей про StringBuilder, где рассматриваются все кишки этого казалось бы простого класса. Особенно интересна последняя часть, где рассматривается ValueStringBuilder - стековая реализация StringBuilder, который по ряду причин остался internal в #dotnet
Просто и понятно (с картинками) про SSH и разные варианты его использования with labs #ssh #tools
https://iximiuz.com/en/posts/ssh-tunnels/
👍1
пакет dotNext - много интересного внутри, начиная от разных штук типа монад Result<T> / Optional<T>. Также есть разные unsafe штуки для байтоёбства - частично это конечно это всё решается Marshal, Unsafe и другими штуками, которые завезли в .net, когда он ещё назывался core. Есть удобные штуки для конструирования Expressions, а также пара вещей относящихся к распределённым системам - реализация Raft Consensus Algorithm (если вдруг кто захочет писать аналог Orleans, Akka и т.д.) и реализация Write Ahead Log, который частенько сопутствует этому. #dotnet
Использование регулярок для генерации Colored HTML #dotnet
пакет на github
песочница
Vuetastic - симпатичный UI-framework для Vue.js 3.0 #js #ui