Когда популярность сервера
Midjourney от Discord резко возросла, он натолкнулся на : ограничение в 1 миллион участников. Это история о том, как небольшая команда инженеров Discord превратила эту проблему в выдающееся достижение.Задача: Представьте себе виртуальное пространство, настолько популярное, что оно трещит по швам. Будучи одним из самых быстрорастущих серверов Discord за всю историю,
Midjourney столкнулся именно с таким сценарием, поскольку количество участников росло геометрически. Discord платформавремени, работающая на
Erlang/Elixir, затрещала по швам под огромным давлением. С каждым новым участником сложность и нагрузка росли в геометрической прогрессии.Решения:
Чтобы свести к минимуму перегрузку, инженеры внедрили "
пассивные" соединения, гарантирующие, что неактивные пользователи не будут создавать лишней нагрузки.Переработка системы реле позволила более эффективно распределять работу за счет более избирательной обработки пользовательских данных.
Параллельная обработка: Используя ETS Erlang, команда разработчиков обеспечила параллельную обработку для таких тяжелых операций, как оповещение всех пользователей что значительно снизило нагрузку на систему.
ETS - инструмент для хранения объектов Elixir и Erlang в памяти. Он способен хранить огромные объемы данных и предоставляет доступ за фиксированное время.
Не все было гладко. Некоторые многообещающие идеи, такие как разгрузка Manifold, дали обратный эффект, увеличив нагрузку на сервера.
↪️ Читать подробнее
@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
Присоединяйтесь к #Csharp #CloudSkillsChallenge, чтобы пройти обучение по курируемому контенту #MicrosoftLearn, получить практический опыт и развить новые навыки.
Практикйтеь в C# и приблизьтесь к получению сертификата.
https://learn.microsoft.com/ru-ru/training/challenges?id=76615901-392c-413e-b7a2-0a015f52f44e&WT.mc_id=cloudskillschallenge_76615901-392c-413e-b7a2-0a015f52f44e
@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 100+ ресурсов для того, чтобы стать хорошим инженером-программистом.
Список полезных книг, гайдов, блогов и не тольео!
Темы - от разработки программного обеспечения, проектирования систем, инженерии данных, лидерства, управления командой и вплоть до гайдов по построению бизнеса.
▪ Github
@csharp_ci
Список полезных книг, гайдов, блогов и не тольео!
Темы - от разработки программного обеспечения, проектирования систем, инженерии данных, лидерства, управления командой и вплоть до гайдов по построению бизнеса.
▪ Github
@csharp_ci
Mind map LINQ ⬇
Отличная инфографика.
Идеально подходит для новичков, пытающихся разобраться во всех удивительных возможностях, которые LINQ предлагает в .NET.
Сохраните ее в закладках на будущее.
@csharp_ci
Отличная инфографика.
Идеально подходит для новичков, пытающихся разобраться во всех удивительных возможностях, которые LINQ предлагает в .NET.
Сохраните ее в закладках на будущее.
@csharp_ci
В приведенном на картинке примере мы считаем, сколько людей имеют одинаковые имена. Ключом является объект, а значением - число.
@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
Пример LINQ SkipLast() ⬇
Два простых примера на картинке.
А вы часто ее используете?
#dotnet
@csharp_ci
Skip(), это функция, которая зачастую, используется чаще разработчиками, но, существует не менее полезная функция SkipLast(), которая используется для пропуска определенного количества элементов из конца коллекции. Два простых примера на картинке.
А вы часто ее используете?
#dotnet
@csharp_ci
YeSQL .NET v1.0.0 выпущен 🚀
YeSQL .NET - это библиотека классов для загрузки SQL-запросов из SQL-файлов.
Нет необходимости жестко кодировать SQL-код в исходном коде приложения.
Создайте файл с расширением
#dotnet #csharp #oss #sql
▪Github
▪Docs
@csharp_ci
YeSQL .NET - это библиотека классов для загрузки SQL-запросов из SQL-файлов.
Нет необходимости жестко кодировать SQL-код в исходном коде приложения.
Создайте файл с расширением
.sql и используйте YeSQL .NET для загрузки SQL-файла.Install-Package YeSql.Net#dotnet #csharp #oss #sql
▪Github
▪Docs
@csharp_ci
Это может быть интересно при написании тестов, требующих отдельного процесса, или при выполнении кода с временем жизни, отличным от времени жизни процесса приложения .NET.
Библиотека основана на классе
corefx RemoteExecutorTestBase.▪Github
@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
Архивировать файлы стало проще, чем когда-либо! 🚀
Для сохранения zip-файла даже не нужен жесткий диск. 💣
В .NET 8 архивация и извлечение файлов стали еще эффективнее благодаря потоковым перегрузкам для методов
Метод
Вы делаете это без необходимости сохранять zip-файл на жестком диске. Магия!
@csharp_ci
Для сохранения zip-файла даже не нужен жесткий диск. 💣
В .NET 8 архивация и извлечение файлов стали еще эффективнее благодаря потоковым перегрузкам для методов
ZipFile.CreateFromDirectory иZipFile.ExtractToDirectory.Метод
CreateFromDirectory позволяет вам выбрать каждый файл из папки, сжать их все в один zip-файл и распаковать эту пачку в любое удобное для вас место, и что самое интересное?Вы делаете это без необходимости сохранять zip-файл на жестком диске. Магия!
@csharp_ci
This media is not supported in your browser
VIEW IN TELEGRAM
⚡️ Этот плагин может генерировать текстуры для вашей сцены в Unreal Engine!
Comfy Textures - это плагин для Unreal Engine, который интегрирует редактор с ComfyUI. Он позволяет быстро создавать и улучшать текстуры для вашей сцены, используя генеративные диффузионные модели.
▪Github
@csharp_ci
Comfy Textures - это плагин для Unreal Engine, который интегрирует редактор с ComfyUI. Он позволяет быстро создавать и улучшать текстуры для вашей сцены, используя генеративные диффузионные модели.
▪Github
@csharp_ci
Что выведет на экран этот код?
Anonymous Quiz
35%
Class Executed, Interface Executed
41%
Class Executed, Class Executed
8%
Interface Executed, Interface Executed
16%
Возникнет ошибка компиляции "Cannot resolve method"
⚡️Feature Flags в .NET и их применения для A/B-тестирования
Возможность условно включать или выключать функции в вашем приложении без изменения кода - мощный и полезный инструмент.
Для этого можно использовать Feature Flags.
Feature Flags- это техника разработки программного обеспечения, которая позволяет обернуть функции приложения в условный оператор.
Затем вы можете включить или выключить функцию во время выполнения, чтобы контролировать, применение этих функции
▪Читать дальше
@csharp_ci
Возможность условно включать или выключать функции в вашем приложении без изменения кода - мощный и полезный инструмент.
Для этого можно использовать Feature Flags.
Feature Flags- это техника разработки программного обеспечения, которая позволяет обернуть функции приложения в условный оператор.
Затем вы можете включить или выключить функцию во время выполнения, чтобы контролировать, применение этих функции
Install-Package Microsoft.FeatureManagement▪Читать дальше
@csharp_ci
⚡️ASP .NET Core предоставляет вам несколько способов глобальной обработки исключений.
Так какой же подход выбрать?
Стандартный способ реализации обработки исключений в ASP.NET Core — использование middleware.
Middleware позволяет добавлять логику до или после выполнения запросов. Для реализации обработки исключений достаточно добавить оператор
ASP.NET Core 8 добавляет новую абстракцию
Если исключение можно обработать, метод должен возвращать
Это позволяет реализовывать кастомную логику обработки исключений для различных сценариев.
🔗Для добавления реализации
1. Зарегистрировать сервис
2. Зарегистрировать
Вы можете добавить несколько реализаций
В ASP .NET Core 8 появилась новая абстракция IExceptionHandler для управления исключениями.
▪Подробнее
@csharp_ci
Так какой же подход выбрать?
Стандартный способ реализации обработки исключений в ASP.NET Core — использование middleware.
Middleware позволяет добавлять логику до или после выполнения запросов. Для реализации обработки исключений достаточно добавить оператор
try-catch в middleware и возвращать ошибку HTTP-ответа. ASP.NET Core 8 добавляет новую абстракцию
IExceptionHandler для управления исключениями. Этот интерфейс имеет только один метод TryHandleAsync, который пытается обработать указанное исключение в рамках ASP.NET Core pipeline. Если исключение можно обработать, метод должен возвращать
true, если нет — false. Это позволяет реализовывать кастомную логику обработки исключений для различных сценариев.
🔗Для добавления реализации
IExceptionHandler в пайплайн запросов ASP.NET Core необходимо сделать две вещи:1. Зарегистрировать сервис
IExceptionHandler с помощью DI.2. Зарегистрировать
ExceptionHandlerMiddleware в пайплайне запросов.builder.Services.AddExceptionHandler<GlobalExceptionHandler>();
builder.Services.AddProblemDetails();app.UseExceptionHandler();Вы можете добавить несколько реализаций
IExceptionHandler, и они будут вызываться в порядке регистрации. Это может быть полезно, например, при использовании исключений для управления потоком.В ASP .NET Core 8 появилась новая абстракция IExceptionHandler для управления исключениями.
▪Подробнее
@csharp_ci
Что произойдет если запустить это код?
Anonymous Quiz
53%
Ошибка компиляции, интерфейсы не могу иметь абстрактные методы
10%
Возникнет ошибка времени выполнения
36%
Hello world
🔥 Дайджест полезных материалов из мира C# за неделю
Почитать:
— Огромная шпаргалка с готовыми запросами SQL (SQLite)
— Где изучать C# в 2024. Бесплатные курсы и полезные ресурсы
— Об одном способе веб-скрапинга сайтов, защищенных Cloudflare
— Road Run, или как я свою первую игру делал. Часть 7
— Разобраться раз и навсегда: Task.WhenAll или Parallel.ForEachAsync в C#
— Обзор Инструментов Покрытия Кода для C#. Начало
— 20 инструментов командной строки для мониторинга производительности Linux
— Наш опыт мультиаутентификации в приложениях ASP.NET Core
— Кроссплатформенные ресурсы в сборках .NET — пишем условия MSBuild
— Валидация входных данных в фильтрах Minimal API .NET, просто и без затей
— Async/Await в C#. Часть 5. Функция-перечисление и цикл через рекурсию, асинхронный вызов без Async/Await
— Еще раз про асинхронную машину состояний и где именно там аллокации
— Outlook как сервер микросервисов
— Exploring the Dynamic Language Runtime (DLR) in C#
— Getting the Current User in Clean Architecture
— Difference Between Raw SQL and Dapper
— How to read zip files with SharpZip library in C#
— Action and Func Delegates in C#
— Game Dev Digest — Issue #221 - Rendering Techniques and more
— Intro to JS Interop in Blazor
— What is Memento Pattern in C#?
— Using auto-values in Aerospike LINQPad driver
— Custom Middleware In ASP.NET Core – How To Harness The Power
— Common Implementation Mistakes of Work Pattern in C#
Посмотреть:
🌐 Курс C# 2024 с нуля
🌐 Александр Кузнецов — Введение в Microsoft SignalR (⏱ 56:53)
🌐 Microsoft Is Abandoning C# for Rust! Now What? (⏱ 08:01)
🌐 Why .NET's Most Ambitious Feature Might Fail (⏱ 11:14)
🌐 "Don't Use Loops, They Are Slow! Do This Instead" | Code Cop #011 (⏱ 09:51)
🌐 The Easiest Scheduling for Your .NET Applications (⏱ 11:25)
🌐 Microsoft Is Abandoning C# for Rust! Now What? (⏱ 8:00)
Хорошего дня!
@csharp_ci
Почитать:
— Огромная шпаргалка с готовыми запросами SQL (SQLite)
— Где изучать C# в 2024. Бесплатные курсы и полезные ресурсы
— Об одном способе веб-скрапинга сайтов, защищенных Cloudflare
— Road Run, или как я свою первую игру делал. Часть 7
— Разобраться раз и навсегда: Task.WhenAll или Parallel.ForEachAsync в C#
— Обзор Инструментов Покрытия Кода для C#. Начало
— 20 инструментов командной строки для мониторинга производительности Linux
— Наш опыт мультиаутентификации в приложениях ASP.NET Core
— Кроссплатформенные ресурсы в сборках .NET — пишем условия MSBuild
— Валидация входных данных в фильтрах Minimal API .NET, просто и без затей
— Async/Await в C#. Часть 5. Функция-перечисление и цикл через рекурсию, асинхронный вызов без Async/Await
— Еще раз про асинхронную машину состояний и где именно там аллокации
— Outlook как сервер микросервисов
— Exploring the Dynamic Language Runtime (DLR) in C#
— Getting the Current User in Clean Architecture
— Difference Between Raw SQL and Dapper
— How to read zip files with SharpZip library in C#
— Action and Func Delegates in C#
— Game Dev Digest — Issue #221 - Rendering Techniques and more
— Intro to JS Interop in Blazor
— What is Memento Pattern in C#?
— Using auto-values in Aerospike LINQPad driver
— Custom Middleware In ASP.NET Core – How To Harness The Power
— Common Implementation Mistakes of Work Pattern in C#
Посмотреть:
🌐 Курс C# 2024 с нуля
🌐 Александр Кузнецов — Введение в Microsoft SignalR (⏱ 56:53)
🌐 Microsoft Is Abandoning C# for Rust! Now What? (⏱ 08:01)
🌐 Why .NET's Most Ambitious Feature Might Fail (⏱ 11:14)
🌐 "Don't Use Loops, They Are Slow! Do This Instead" | Code Cop #011 (⏱ 09:51)
🌐 The Easiest Scheduling for Your .NET Applications (⏱ 11:25)
🌐 Microsoft Is Abandoning C# for Rust! Now What? (⏱ 8:00)
Хорошего дня!
@csharp_ci