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
Вкратце, простым языком и для тех кто не вкурсе, суть идеи фреймворка: вынести логику и экземпляры классов (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 диспозица (время жизни простаивающего без работы актора задаётся) и как результат - хоть миллион
За прошедшие три года Microsoft доложил в комплект полтора десятка примеров, написал приличную документацию, также никуда не делись tutorials (и несмотря на то что там 2017й год - они по прежнему актуальны), прикрутил мониторинг, причесал и интегрировал логирование. Сам Microsoft использует Orleans как бакенд для игры Halo. И уже апдейтнул его до .NET 7. Вобщем выглядит всё это очень красиво.
Для начала работы - лучше сначала прочитать доку (по крайней мере первый десяток разделов - они написаны понятным языком и изобилуют примерами). #dotnet
Docs
Orleans overview - .NET
An introduction to .NET Orleans.
🔥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
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
Заодно в него положили websockets, поддержку mongo и немножечко graphql. Документация конечно местами не совсем разъясняет как например в websocket пробросить инфу о текущем юзере - приходится смотреть в примеры.
Есть конечно и сильно отличающиеся штуки (например, контроллеры в nestjs по дефолту singleton, а request/response надо пробрасывать как параметры action'ов). Но это не портит картину, просто как особенность фреймворка (ну и частично nodejs :) И конечно не очень привычно, то что контекст БД выглядит как singleton (в отличие от традиционного scoped в .net), однако вспомнив что цикл обработки nodejs это event loop - всё встаёт на свои места. Даже как-то легче не заморачиваца на многопоточность :)))
Вообщем, как минимум для разного рода пет-проектов или MVP вполне подходит. #js #dotnet
NestJS - A progressive Node.js framework
NestJS is a framework for building efficient, scalable Node.js web applications. It uses modern JavaScript, is built with TypeScript and combines elements of OOP (Object Oriented Programming), FP (Functional Programming), and FRP (Functional Reactive Programming).
🚨 В соседних чятах по вакансиям начала появляться вакансия на Senior .NET developer от некоей Goldor AG (про которую гугл не знает НИЧЕГО).
Будьте осторожны, НЕ ВЪЕБИТЕСЬ!
Это реинкарнация Cetrapay
Будьте осторожны, НЕ ВЪЕБИТЕСЬ!
Это реинкарнация Cetrapay
Хабр
Трое в лодке, нищета и собаки из Cetrapay
Действующие лица: Андрей Версилов, Александр Свищевский, Валентин Енко Мы – команда (не первая и не последняя) стартапа CetraPay. ПМ Весной 2022 года закрылся мой проект, и я была вынуждена искать...
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
В продолжение темы профайлинга - часть 0, часть 1 и часть 2 статьи этого же автора про OpenTelemetry и Metrics API.
#dotnet #docker #perf
my tech ramblings
Profiling a .NET6 app running in a linux container with dotnet-trace, dotnet-dump, dotnet-counters, dotnet-gcdump and Visual Studio
This post contains a few practical examples showing you how to profile a .NET6 application running in a linux container using the .NET CLI diagnostic tools (dotnet-trace, dotnet-dump, dotnet-counters and dotnet-gcdump) and Visual Studio.
👍1
Тестирование WebAPI endpoints с помощь консольного HttpRepl #dotnet
https://learn.microsoft.com/en-us/aspnet/core/web-api/http-repl/?view=aspnetcore-7.0&tabs=windows
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
http://graphics.stanford.edu/~seander/bithacks.html
Библиотека распознавателя QR-кодов на JS - умеет ~15 типов QR-кодов, работает в т.ч. и на мобильных браузерах #js
upd: для #blazor https://github.com/densen2014/ZXingBlazor
upd: для #blazor https://github.com/densen2014/ZXingBlazor
Подробный разбор архитектур разных известных сервисов. Полезно для понимания и систематизации знаний - как работает это всё и выглядит с архитектурной точки зрения. Заодно потом на собесе сможете поговорить более предметно :)) (на английском) #education
Youtube Design
WhatsApp
Parking Lot
Twitter
Youtube Design
Parking Lot
50-100 вопросов для собесов по базам данных. Некоторые статьи датируются 201х годом, но по пролистыванию - вопросы там по прежнему актуальные (на английском) #education
Database
SQL Queries
Microsoft SQL Server
MySQL
Postgres
Oracle
Database
SQL Queries
Microsoft SQL Server
MySQL
Postgres
Oracle
👍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/
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