Pull to refresh
59
0.5
Васьен @Vasjen

.NET Developer, автор https://t.me/budnidev

Send message

Как устроена наша PIM-система, и почему мы не используем ни реакт, ни микросервисы

Level of difficultyMedium
Reading time12 min
Views11K

Пара слов обо мне. У меня никогда не было серьезного плана делать свой продукт, открывать под это дело компанию, погружаться в custdev и вот это вот всё. Днем я работал в сеньёр девелопером, по вечерам - делал pet-проекты типа онлайн версии настольной игры или онлайн-редактора пиксель-арта, и все было хорошо.

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

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

У нас нет кубернетеса, кликхауса, реакта, бессерверных вычислений, рэббит эмкью, кафки, кибаны, графаны, дженкинса, ноды, эластика, и много чего ещё нет. Зато есть дотнет последней версии, энтити фреймворк, нгинкс и шваггер. Я постараюсь рассказать, как и почему мы дошли до такой жизни, и жизнь ли это.

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

Читать далее
Total votes 31: ↑29 and ↓2+33
Comments38

Микроэлектроника в России до и после 24.02.2022

Reading time14 min
Views334K

В свете последних событий (для потомков: гуглим Россия, Украина, 24 февраля 2022), приведших к введению санкций против России в сфере высоких технологий и, в частности, микроэлектроники, я часто слышу вопрос: а что дальше? В каком сейчас состоянии российское микроэлектронное производство? Россия сможет создать полностью локальное производство чипов?

Так сможет или нет?
Total votes 350: ↑344 and ↓6+428
Comments658

Как в C# быстро извлечь подстроку

Level of difficultyEasy
Reading time4 min
Views9.8K

Извлечение подстроки. Казалось бы, что тут может быть сложного? В любом современном языке программирования это можно сделать через функцию substring или через slicing. За время работы C# разработчиком я повидал разный код, в том числе разные способы извлечения подстроки. В этой статье мы рассмотрим самые распространённые из них, сделаем замеры производительности и проанализируем результаты.

Читать далее
Total votes 8: ↑6 and ↓2+6
Comments49

Настраиваем логирование с помощью Loki и Grafana

Level of difficultyEasy
Reading time6 min
Views21K

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

Читать далее
Total votes 14: ↑13 and ↓1+14
Comments10

Блеск и нищета паттерна «Спецификация» в С#. Оцениваем планы запросов

Level of difficultyHard
Reading time23 min
Views14K

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

Читать далее
Total votes 37: ↑36 and ↓1+43
Comments52

Формализуем процесс создания нового API в микросервисах на .NET

Level of difficultyHard
Reading time5 min
Views4.5K

Мы работаем с ИТ-продуктами в сфере логистики и e-commerce. Большинство таких проектов крупные с точки зрения архитектуры – включают в себя множество сервисов, необходимых для исправной работы целостных систем. 

Поговорим о том, как организовать взаимодействие микросервисов в большом продукте-долгожителе синхронно и асинхронно. 

Читать далее
Total votes 9: ↑8 and ↓1+8
Comments12

Как работает сеть в контейнерах: Docker Bridge с нуля

Level of difficultyMedium
Reading time21 min
Views48K

В этой статье мы собираемся разобраться со следующими вопросами:

* Как виртуализировать сетевые ресурсы, чтобы контейнеры думали, что у них есть отдельные сетевые среды?

* Как превратить контейнеры в дружелюбных соседей и научить общаться друг с другом?

* Как выйти во внешний мир (например, в Интернет) изнутри контейнера?

* Как связаться с контейнерами, работающими на хосте Linux, из внешнего мира?

* Как реализовать публикацию портов, подобную Docker?

Читать далее
Total votes 71: ↑71 and ↓0+71
Comments14

Логи из docker compose / docker swarm в Grafana / Loki быстро и просто

Level of difficultyMedium
Reading time19 min
Views28K

Хочу показать как развернуть готовый и полностью работающий стек мониторинга Grafana + Loki + Prometheus + Pushgateway + Promtail за пару минут (в прямом смысле этого слова), без необходимости устанавливать на машину дополнительное ПО (плагины docker и плагины логирования) и собирать логи со всех контейнеров машины (или сразу со всех нод, в случае с swarm).

Читать далее
Total votes 23: ↑23 and ↓0+23
Comments21

Fan Control — лучший софт для управления вентиляторами в компьютере

Level of difficultyEasy
Reading time8 min
Views169K


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

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

Казалось бы, скачай софт от материнской платы, настрой всё и будь доволен? Все те, кто реально пользовался софтом от материнских плат, прекрасно понимают, насколько ошибочно это предложение, а также насколько софт от вендоров громоздкий, кривой и негибкий.

В этой статье я опишу очень небольшую утилиту для управления вентиляторами в ПК, которая поразила меня своей гибкостью, и вот уже многие годы является второй в списке на установку в свежую систему. Почему второй? Потому что первым делом в систему ставится браузер, желательно огнелис.
Читать дальше →
Total votes 45: ↑41 and ↓4+53
Comments78

Вопросы по SQL, которые часто задают на собеседовании. Часть 1

Reading time14 min
Views77K

SQL (Structured Query Language) – это язык программирования, используемый для управления реляционными базами данных. В этой статье я собрал вопросы по SQL, с которыми вы можете столкнуться на собеседовании. Их часто задают для проверки общих знаний и навыков.

Читать далее
Total votes 29: ↑25 and ↓4+22
Comments24

Еще раз про асинхронную машину состояний и где именно там аллокации

Level of difficultyMedium
Reading time8 min
Views22K

Несмотря на то, что про async/await уже было сказано много слов и записано множество докладов, тем не менее, в своей практике преподавания и наставничества, я часто сталкиваюсь с недопониманием устройства async/await даже у разработчиков уровня Middle+. В данной статье мы подробно рассмотрим машину состояний, сгенерированную компилятором из асинхронного метода для понимания принципа работы асинхронности в C#, разберемся где именно там аллокации и порешаем задачи для самопроверки. Если вы уже раз сто видели как выглядит асинхронная машина состояний, но все равно недопонимаете ее, тогда эта статья для вас.

Читать далее
Total votes 23: ↑21 and ↓2+24
Comments9

Обработка ошибок с помощью IExceptionHandler в ASP.NET Core 8.0

Level of difficultyMedium
Reading time5 min
Views13K

Давайте рассмотрим, как вы можете реализовать обработку ошибок, используя IExceptionHandler в .NET Core 8.0. Этот подход следует похожим паттернам предыдущих методов обработки ошибок в ASP.NET Core, но добавляет дополнительную возможность внедрения вашей собственной логики обработки исключений в exception handling middleware.

Читать далее
Total votes 8: ↑6 and ↓2+4
Comments28

Современная безопасность контейнерных приложений

Reading time11 min
Views8K

Чем раньше команда задумается о проблеме безопасности, тем лучше. В этой статье обсудим, какие проблемы ИБ есть в стандартном контейнерном приложении, поговорим о безопасности использования Docker, Kubernetes и Terraform и разберём, как можно встроить проверки в стандартный пайплайн деплоя.

Материал написан и дополнен по мотивам выступления Любови Гринкевич и Алексея Миртова из Yandex Cloud на DevOpsConf. Он будет интересен DevOps-инженерам, специалистам по безопасности, владельцам продуктов и всем, кто хочет:

Читать далее
Total votes 12: ↑11 and ↓1+10
Comments0

Сам себе мобильный интернет. Запускаем базовую станцию стандарта 4G LTE

Level of difficultyHard
Reading time13 min
Views92K
Приветствую всех!

Я уже не раз рассказывал про то, как в домашних условиях поднять сотовые сети разных стандартов. Но всё же все они были уже весьма древними. Самое время замахнуться на кое-что поинтереснее — LTE.



Итак, в сегодняшней статье поговорим о том, что детально в нашем сообществе не описывал практически никто — о том, как запустить базовую станцию самого нового из поддерживаемых большинством телефонов этой страны стандартов. Поговорим об особенностях её работы и о трудностях, с которыми, возможно, придётся столкнуться при запуске. Традиционно будет много интересного.
Читать дальше →
Total votes 313: ↑312 and ↓1+368
Comments159

Как на самом деле Async/Await работают в C#. Часть 1. Проблемы модели асинхронного программирования (APM)

Level of difficultyHard
Reading time13 min
Views18K

Это перевод первой главы из поста How Async/Await Really Works in C#

Этот пост .Net блога является продолжением исходного поста, глубоко погружающим в историю, приведшую к созданию конструкций async/await и стоящие за этим дизайнерские решения и детали реализации async/await в C# и .NET.

Исходный пост What is .NET, and why should you choose it? предоставляет обзор платформы на высоком-уровне, перечисляя различные компоненты и решения на уровне дизайна, и предваряя последующие посты в глубину обозначенных тем.

Ссылки в развитие темы:

1. Часть 2 Артефакты от EAP шаблона, SynchronizationContext

2. Уроки по асинхронному программированию из первой половины работы

3. Параллельные вычисления — Все дело в контексте-синхронизации (SynchronizationContext)

4. Async/Await из C#. Головоломка для разработчиков компилятора и для нас

Читать далее
Total votes 10: ↑7 and ↓3+4
Comments12

Запускаем PostgreSQL в Docker: от простого к сложному

Level of difficultyEasy
Reading time12 min
Views547K

О простых и продвинутых способах запуска PostgreSQL в Docker: добавляем healthcheck, ставим на мониторинг, настраиваем параметры.

Читать далее
Total votes 34: ↑32 and ↓2+35
Comments39

Уязвимость XXE в .NET 6 SDK: с чем боролись…

Level of difficultyMedium
Reading time10 min
Views6.6K


Современный .NET даёт разработчикам защиту от XXE из коробки: парсишь себе XML и не забиваешь голову всякими DTD, сущностями и связанной с ними безопасностью. Разве не прекрасно? Однако жизнь — штука с иронией...


Под катом — разбор по кусочкам XXE из .NET 6 SDK: код, причины дефекта безопасности, фикс.

Читать дальше →
Total votes 20: ↑20 and ↓0+20
Comments10

Обзор нововведений в C# 12

Level of difficultyMedium
Reading time8 min
Views28K

Уже середина осени, а это значит, что новая версия C# на пороге. Самое время узнать, какие изменения настигнут язык совсем скоро. Хоть количество нововведений в этот раз уступает предыдущим релизам, интересных среди них немало.

Читать далее
Total votes 46: ↑46 and ↓0+46
Comments63

Интересные сюрпризы ConcurrentDictionary (+разбор задачи с DotNext 2017 Moscow)

Reading time5 min
Views29K

Привет всем, кто пишет код для .NET, особенно многопоточный. Редко встретишь потокобезопасный код без потокобезопасных коллекций, а значит, нужно уметь ими пользоваться. Я расскажу о самой популярной из них — ConcurrentDictionary. В ней спрятано на удивление много интересных сюрпризов: как приятных, так и не очень.


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


Читать дальше →
Total votes 31: ↑30 and ↓1+29
Comments3

Information

Rating
1,967-th
Registered
Activity

Specialization

Backend Developer, Application Developer
Middle
Git
C#
PostgreSQL
OOP
Database
.NET
Docker