Обновить

Бэкенд

Сначала показывать
Порог рейтинга
Уровень сложности

Интеграция .NET-приложения с внешним API по ГОСТ TLS через CryptoPro

Уровень сложностиСредний
Время на прочтение19 мин
Количество просмотров2.9K

Всем привет. Представлюсь — меня зовут Евгений Думчев и я Team Lead.NET разработки в DDPlanet.

В какой‑то момент в моей практике появилась задача по интеграции с внешним API. Для взаимодействия требовалось применять предоставленный публичный доверенный сертификат сервера.cer и клиентский.pfx сертификат. Особенность в том, что.pfx сертификат был выпущен через CryptoPro CSP — а это вносит свои тонкости в процесс интеграции…

Читать далее

std::mdspan в C++23: многомерные данные без самодельных view

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров2.5K

Привет, Хабр!

В C++ долго не было нормального стандартизованного способа адресовать многомерные данные без самодельных обвязок на указателях, индексации по формуле и пачек typedef с макросами. В C++20 появился std::span для одномерных непрерывных диапазонов. Следующий логичный шаг — многомерный view с настраиваемым отображением индексов в адреса памяти. Этим шагом в C++23 стал std::mdspan в заголовке <mdspan>. Это не контейнер и не владеет памятью, это слой адресации поверх уже существующего буфера. Формально идею закрепили в P0009, а в стандарт попали mdspan, extents и политики layout; отдельная функция submdspan пошла в следующую версию стандарта C++26.

Читать далее

В поисках мертвых горутин

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров2.7K

Я пишу всякое на Go в Ви.Tech (IT-дочка ВсеИнструменты.ру) и люблю периодически изучать предлагаемые нововведения. Недавно мы собирались внутренним комьюнити, обсуждали интересные пропозалы из гитхаба Go. Среди прочего — изящный и крайне перспективный Proposal #74609 Deadlock detection by using the garbage collector Собственно, о нём сегодня и пойдёт речь.

Мотивация

Горутины могут блокироваться — например, при попытке захватить уже занятую блокировку или отправить сообщение в канал, по которому ещё никто не читает. Если все горутины заблокированы, рантайм Go завершает выполнение с фатальной ошибкой о глобальной взаимной блокировке (deadlock).

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

На текущий момент Go не предоставляет встроенного механизма для обнаружения или устранения частичных дедлоков. Поскольку стандартный сборщик мусора не распознаёт такие ситуации, он не может освободить ни память, занятую “мёртвыми” горутинами, ни ресурсы, достижимые только через их стеки.

Наиболее продвинутыми динамическими средствами обнаружения частичных дедлоков являются Goleak и LeakProf:

Читать далее

Волшебство ООП или как упростить многопоточное программирование C++

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров5.9K

Если Вы сталкивались с многопоточными методами в классах и так же, как и мы, ужасались получившемуся раздутому коду ... вы по адресу. Пару ночей, жонглирование type_traits и мы готовы представить Вашему вниманию обёртку для подобных ситуаций!

Читать далее

Паттерн Saga через MassTransit. Оркестрация vs Хореография

Уровень сложностиСредний
Время на прочтение23 мин
Количество просмотров5K

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

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

В этой статье мы разберём Saga с нуля, простыми словами и на понятных примерах. Материал подойдёт как для первого знакомства с темой, так и в качестве пошагового гайда по её реализации в C#. Мы рассмотрим два основных подхода — хореографию и оркестрацию, разберём, чем они отличаются, и в каких случаях что выбрать.

Читать далее

С чем едят GitOps

Время на прочтение8 мин
Количество просмотров3.2K

В современном ИТ ландшафте множество методологий имеют в своем названии упоминание Ops: DevOps, ChatOps, MLOps и другие. По сути, все они так или иначе являются порождением философии DevOps и сегодня мы поговорим о GitOps — подходе к управлению инфраструктурой и развёртыванием приложений, который использует репозиторий Git в качестве центрального механизма.

GitOps позволяет командам декларативно определять конфигурацию инфраструктуры и приложений, а затем автоматически развёртывать их. Основная идея GitOps заключается в использовании Git как единого источника данных для декларативной инфраструктуры и приложений.

В этой статье мы рассмотрим, те преимущества, которые дает использование GitOps, а также развеем некоторые мифы вокруг GitOps..

Читать далее

Go vs Crystal: выбираем между двумя современными языками программирования

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров11K

Когда речь заходит о современных языках системного программирования, разработчики часто сталкиваются с непростым выбором. Два языка, которые привлекают всё больше внимания в последние годы — это Go (разработанный Google) и Crystal (вдохновлённый синтаксисом Ruby, но со статической типизацией). Оба обещают высокую производительность, продуктивность разработки и современные возможности языка, но идут к этим целям совершенно разными путями.

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

Жмисюда

Компьютерная томография и секреты процессора 386

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров9.5K

Intel выпустила процессор 386 в 1985 году, он стал первым 32-битным чипом линейки x86. Этот чип упаковывался в керамический квадрат с торчащими снизу 132 позолоченными ножками, которые вставляются в разъём на материнской плате. Хоть эта конструкция может показаться скучной, внутри неё происходит гораздо больше, чем можно было бы ожидать. По моей просьбе компания Lumafield выполнила компьютерную 3D-томографию чипа, обнажившую шесть слоёв сложных соединений, сокрытых внутри керамического корпуса. Более того, оказалось, что в чипе есть почти невидимые металлические проводники, соединённые с боковыми сторонами корпуса (см. показанные выше полосы). Снимок также показал, что у 386 есть две отдельных сети питания и заземления: один для ввода-вывода, второй — для логики процессора.

Читать далее

Functools, Itertools, Collections и с чем это всё едят

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров3.5K

В этой статье я коротко показываю, как три стандартные библиотеки Python — itertools, collections и functools — упрощают повседневные задачи.

В itertools разбираю полезные итераторы и паттерны работы с последовательностями: от count/cycle/repeat до groupby, permutations/product и zip_longest — всё с минимальными примерами.

В collections показываю готовые контейнеры для практики: Counter, deque, defaultdict, OrderedDict и namedtuple — где они уместны и чем удобнее обычных структур.

В functools делюсь инструментами “функционального” стиля и декорирования: lru_cache, cmp_to_key, total_ordering, partial, reduce, update_wrapper и wraps — зачем они нужны и как их быстро применить.

Пишу простым языком, примеры учебные и наглядные — ориентир на начинающих питонистов, чтобы быстрее прокачать базовые приёмы.

Читать далее

Как мы затащили jOOQ в высоконагруженный проект с Postgres

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров3.8K

Привет, Хабр. Меня зовут Михаил Тимошкин. Я тимлид в команде Тематических каналов в Дзене.

Одна из классических головных болей при создании сервиса — синхронизация кода приложения со схемой БД. Есть много инструментов для управления изменениями схемы базы данных, таких как Liquibase или Flyway, для которых существуют плагины с кодогенерацией. Но что, если на проекте ничего подобного нет? Хорошая новость в том, что даже в такой ситуации можно найти эффективное решение! В этом мы убедились на собственном опыте при переходе с Hibernate на jOOQ.

В этой статье я расскажу, с какой проблемой мы столкнулись, какие решения рассматривали и что получили в итоге.

Читать далее

Wasm-плагины на Go

Уровень сложностиПростой
Время на прочтение10 мин
Количество просмотров3K

Привет, Хабр!

Когда обсуждают расширяемость бэкендов, первым делом вспоминают нативные плагины на C или C++. Дальше обычно всплывают вопросы ABI, совместимости компиляторов, загрузчиков и фразы «а у нас Alpine с musl». В Go исторически был пакет plugin, но его применимость ограничена окружениями и сборкой. В 2025 году картина проще: берем WebAssembly как изолированный байткод, исполняем его прямо из Go и получаем плагинную архитектуру без плясок с динамическими библиотеками.

Далее в статье рассмотрим, как создать практичную систему Wasm-плагинов на Go: с изоляцией, таймаутами, контрактом данных и обновлениями на лету. Для рантайма возьмем wazero, потому что он написан на Go и не требует cgo.

Читать далее

Магия binapi для VPP или новые возможности по использованию SR Policy

Уровень сложностиСложный
Время на прочтение15 мин
Количество просмотров920

Привет! Меня зовут Борис Хасанов, я сетевой архитектор в MWS Cloud Platform. В этой статье рассмотрим структуру сущности, называемой binapi, возможности программирования VPP с её помощью. Покажем, как можно использовать binapi для конкретных случаев, таких как реализация программного оверлея в ЦОД и расширенного Traffic Engineering при помощи VPP. Также поделимся результатами наших тестов по программированию SR Policy через VPP.

Читать далее

Надоело воевать с Git? Попробуй Jujutsu (jj), и вот почему он круче, чем кажется

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров16K

Статья для разработчиков, которые устали от сложностей Git и хотят навести порядок в своих проектах. Я расскажу про Jujutsu (jj) — современную альтернативу, которая меняет подход к контролю версий. Без веток, без stash, без мучительных rebase -i — только чистая история и удобный workflow, который позволит вам фокусироваться на написании кода, а не на борьбе с системой. Готовые примеры и наглядная демонстрация возможностей внутри.

Читать далее

Ближайшие события

yask или не yask

Время на прочтение3 мин
Количество просмотров610

Я решил попробовать себя на новом амплуа писателя и писать о том, что мне интересно и чем я занимаюсь. Я постараюсь делать меньше воды и не слишком длинные посты, так как длинные посты читаются тяжело. И первый пост будет о yask

Читать далее

Теряем невинность с Таненбаумом: Amsterdam Compiler Kit

Уровень сложностиСложный
Время на прочтение9 мин
Количество просмотров3.3K

Пока вы рождались, ходили в школу, заканчивали учебу и выходили на свою первую работу, на свете существовал совершенно особенный набор компиляторов, о котором крайне мало известно на просторах РФ.

Именно о нем пойдет сегодняшний рассказ.

Читать далее

Spring Boot + Python: от эксперимента до open-source

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров2.7K

Как исполнять Python внутри Spring Boot?

Я прошёл путь от сырых AOP-костылей до production-ready библиотеки с REST, gRPC и безопасным исполнением скриптов. В статье: опыт, архитектура и базовые примеры использования.

Читать далее

Как YDB изолирует OLTP и OLAP

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров5.7K

Привет, Хабр! Меня зовут Олег Доронин, и мы с командой делаем СУБД Яндекса, которая называется YDB. Каждый транзакционный запрос к базе данных обычно работает с небольшим набором строк и быстро отрабатывает за единицы или десятки миллисекунд, но таких запросов каждую секунду поступает огромное количество. А вот аналитические запросы обычно выполняются не так часто, но каждый из них может требовать обработки вплоть до всех строк в одной или нескольких таблицах. Такие запросы могут выполняться секунды, минуты, или даже часы в зависимости от объёмов данных и сложности запрошенных вычислений.

Чтобы эти два принципиально разных паттерна нагрузки не мешали друг другу, гибридным базам данных важно изолировать транзакционную нагрузку от аналитической. Под катом я расскажу, как мы сделали в YDB компоненты для управления смешанной нагрузкой, которые изолируют миллионы RPS от аналитики, и как менеджер смешанной нагрузки устроен внутри.

Читать далее

Чек-лист для тимлида. Как не утонуть в хаосе старта проекта

Время на прочтение16 мин
Количество просмотров5.1K

Всем привет! Меня зовут Антон Баранов, я тимлид разработки в компании "Синимекс", недавно я завершил работу над двумя микросервисными проектами в сфере финтех, а до этого был техлидом и разработчиком на проектах, связанных с БЭК-офисами и витринами данных. Сейчас я актуализирую свой чек-лист и хочу поделиться с вами размышлениями о том, почему старт проекта — это одновременно и самое захватывающее, и самое рискованное время для тимлида.

Чем старт проекта так интересен и сложен? Первые дни тимлида на новом месте битвы напоминают сборку пазла в полумраке: куча деталей, неясные границы, и каждая ошибка может стоить недель или месяцев переделок. Чтобы заложить основу успешной работы, чтобы ничего не пришлось делать в последний момент с горящими... глазами, лично мне проще всего действовать по заранее выверенным пунктам. Спасительным фонарём, который позволяет осветить и собрать все элементы, скомпоновать в голове и зафиксировать для команды, может послужить чек-лист.

Читать далее

Всё, что я знаю о хорошем системном дизайне

Уровень сложностиПростой
Время на прочтение13 мин
Количество просмотров5.1K

Что такое системный дизайн? На мой взгляд, если дизайн программного обеспечения — это про то, как собирать строки кода, то системный дизайн — это про то, как собирать сервисы. Базовые строительные блоки софта — переменные, функции, классы и так далее. Базовые строительные блоки системного дизайна — это серверы приложений, базы данных, кэши, очереди, шины событий, прокси и прочее.

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

Читать далее

Книга «Основы Go: Community edition» 2-е издание

Время на прочтение4 мин
Количество просмотров5.7K

Всем привет!

Завершил обновление предыдущей версии книги и выкладываю в открытый доступ второе издание «Основы Go: Community edition». О том, что изменилось, когда будет печатная версия книги и многом другом - в самой статье ;-)

Читать далее