Все потоки
Поиск
Написать публикацию
Обновить

Бэкенд

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

Практический CQRS и Event Sourcing на Go

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

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

Читать далее

Обработка исключений в 1С

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

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

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

Читать далее

Если не хватает памяти для процессинга модели SSAS: варианты решения проблемы

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

Всем привет! Меня зовут Николай, я DBA-разработчик SimbirSoft. Если вам приходилось иметь дело с табличной моделью данных SQL Server Analysis Services (SSAS), то вы наверняка знаете, что на сервере она работает только в режиме In-Memory и использует под свои процессы выделенную часть оперативной памяти. А когда памяти недостаточно для нормальной работы, то возникает системное сообщение о ее нехватке.

В этой статье я кратко рассмотрел причины и общие стратегии по решению данной проблемы, а также рассказал о своем опыте на примере табличной модели объемом около 100 ГБ на MS SQL Server 2019 Ent.  

Погрузиться в чертоги

Универсальная С++ фабрика объектов: для Qt и не только

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

Привет, Хабр! Меня зовут Михаил Полукаров, я занимаюсь разработкой Desktop-версии корпоративного супераппа для совместной работы VK Teams.

Если вы тоже работали с большими проектами, где активно применяются объектно-ориентированные паттерны проектирования, то наверняка сталкивались с паттернами проектирования Factory Method или AbstractFactory. В процессе разработки я неоднократно ловил себя на мысли, что часто пишу однотипный код таких фабрик, и задумался о том, как можно было бы избежать таких самоповторений. 

В этой статье я покажу, как сделать универсальную фабрику объектов, покрывающую большую часть потребностей, следующую принципам DRY (Don’t Repeat Yourself), а также как можно использовать некоторые «фишки» новых стандартов С++. 

Читать далее

Когда State уже не спасает: путь к Statechart

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

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

Погрузимся в мир управления состояниями — от простого к сложному!

Читать далее

Быстро — не всегда хорошо: рейтлимиты в мультикластерном окружении

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

Всем привет! Кажется, настало время поговорить о том, как внедрялись ограничители частоты запросов на бэкенд в Wildberries. В статье — о том, с какими трудностями мы столкнулись на этом благородном пути и как прошли через четыре схемы реализации — от простейшей in-memory до собственных gRPC-сервисов. Не обойдём вниманием и парочку лайфхаков ;) Например, с помощью рейтлимитов мы неожиданно решили проблему плавного отключения старых версий API.

Меня зовут Дмитрий Виноградов, и я лид команды публичного API Wildberries. До этого почти 18 лет занимался промышленной автоматизацией в Schneider Electric — от программирования контроллеров и embedded-устройств до собственных SCADA-систем. Хочешь не хочешь, а научишься делать красивые интерфейсы :)

Читать далее

MDC в реактивном стеке: как не потерять контекст в Spring WebFlux и Kotlin Coroutines

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

Всё больше Java-разработчиков переходят от приложений, использующих синхронный стек, к реактивным решениям на базе Spring WebFlux и Kotlin Coroutines. Такой переход позволяет строить более масштабируемые и устойчивые к высокой нагрузке системы, эффективно используя пул потоков и асинхронное выполнение задач. Однако вместе с преимуществами реактивного подхода появляется и новая неочевидная проблема — потеря MDC-контекста (Mapped Diagnostic Context), который традиционно используется для сквозной трассировки запросов в логах.

Читать далее

Построение долговечного хранилища данных с помощью HDFS

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

Привет! Меня зовут Роман Чечёткин, я разработчик в команде «Платформа коммуникаций» в Ozon Tech. Наша платформа предоставляет возможность другим командам отправлять различные сообщения в личные кабинеты пользователей.

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

Читать далее

Уже завтра! OpenIDE — профессиональные инструменты без ограничений

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

Уже завтра, 31 июля состоится публичный запуск OpenIDE — новой мультиязычной среды разработки, построенной на базе IntelliJ IDEA Platform.

Мероприятие пройдет онлайн на YouTubeVK и RUTUBE каналах Spring АйО. Участие абсолютно бесплатное.

Главное — зарегистрироваться, чтобы получить на почту ссылки на трансляцию и файл .ics для добавления события в календарь.

Читать далее

Зачем мы сделали тесты по ИТ-навыкам (и кому они помогут)

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

Меня зовут Никита Сбитнев, я — продакт hh.ru. И сегодня я расскажу, зачем и для кого мы запустили тесты по ИТ-навыкам, кто их разрабатывал, как устроены задания и какие результаты уже получили.

Читать далее

Гайд по timeout, watch и at: управление временем выполнения команд в Linux

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

Как часто вы запускали какую-нибудь штуку в терминале — и она зависала навсегда? Или наоборот: вам нужно было увидеть, как что-то меняется каждую секунду, а вы упорно жали стрелку вверх и Enter? А может вы хотели запланировать задачу через 5 минут, но cron — это уже overkill?

Для всех этих сценариев в Linux есть три проверенных утилиты: timeout, watch, at. И, да, можно было бы обойтись скриптами и велосипедами, но... мы же не зря используем Unix-подход, где всё уже давно придумано.

Сегодня мы рассмотрим: как управлять временем выполнения команд в Linux с помощью timeout, watch и at.

Читать далее

Тестируем Kafka с Testcontainers

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

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

Сегодня мы рассмотрим, как протестировать Kafka с помощью Testcontainers.

Testcontainers — это библиотека, которая из JUnit-теста запускает Docker-контейнеры как обычные Java-объекты. Вы пишете пару строк — а на фоне поднимается полноценная инфраструктура: база, брокер, Redis, что угодно. После теста контейнер гарантированно останавливается, поэтому окружение всегда чистое, а CI не засоряется процессами.

Kafka в Testcontainers запускается теми же двумя строками. Получаем реальный брокер, который ничем не отличается от продакшен-копии, но живёт ровно столько, сколько идёт тест.

Читать далее

Трудовая дисциплина

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

Что делать с нехорошими людьми на работе, если они к вам каким‑то образом пробрались. Специально для нынешних и будущих тимлидов — когда команду разработки вам уже доверяют, но собственная «тактическая борода» еще пока не выросла.

Читать далее

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

Data Vault: моделирование хабов, линков, сателлитов в IDE asapBI

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

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

Всем хорош Data Vault, однако схватиться с ним «врукопашную», используя только SQL, захочет не каждый. Останавливает большой объем ручных операций, а также большой объем деталей реализации. Большое количество join, за которые критикуют Data Vault, не является определяющим моментом, так как уже сейчас базы данных способны их эффективно обрабатывать, а с течением времени мощность серверов только возрастает.

Но творческая мысль не дремлет, постепенно появляются инструменты для автоматизации построения Data Vault. Например, это пакет AutomateDV для dbt, графическая надстройка над ним Datapulse, построение модели DV в BI.Qube.

Data Vault меня заинтересовал — уж много плюшек он сулит, и для его изучения я занимаюсь проектом asapBI — low‑code IDE для моделирования DWH. Требования к создаваемой системе я описал на сайте asapbi.ru. Их достаточно много, поэтому не буду их тут перечислять.

Сегодня я хотел поделиться графическим интерфейсом для создания хабов, линков и стеллитов.

Читать далее

JEP 519: Компактные заголовки объектов — теперь официально

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

Команда Spring АйО представляет одну немаловажную фичу Java 25: компактные заголовки объектов (Compact Object Headers). Это позволит JVM экономить память и ускоряться без вмешательства в код.

Читать далее

Введение в Jimmer ORM

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

Совсем недавно статью про ORM-фреймворк Jimmer Михаила Поливахи, эксперта сообщества Spring АйО, опубликовал Baeldung.

Перед вами переработанная и дополненная версия, подготовленная специально для сообщества Spring АйО. В ней Михаил раскрывает ключевые особенности Jimmer: отсутствие JPA-наследия,  декларативные DTO и гибкий DSL и потенциальную интеграцию со Spring.

Читать далее

Оценка подхода lock-free списков

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

Привет, Хабр. Меня зовут Роман Ескин, я один из C разработчиков проекта Greengage DB. В этой статье я расскажу, как мы реализовали и протестировали lock-free подход в рамках масштабной работы по внедрению функции удаления брошенных файлов. Приглашаю вас заглянуть во внутреннюю кухню работы нашей команды при оценке этой функциональности.

Введение

Позвольте начать с краткой исторической справки: Greengage DB был запущен в 2024 году как open-source форк Greenplum — Massively Parallel Processing (MPP) аналитической системы управления базами данных, основанной на PostgreSQL. Мы начали этот проект, чтобы поддержать open-source сообщество Greenplum, который неожиданно стал проприетарным продуктом в мае 2024 года. Мы гарантируем дальнейшее развитие Greengage DB, следуя принципам открытости и прозрачности.

Так как Greengage DB основан на PostgreSQL, он унаследовал некоторые его известные особенности и проблемы. Одна из таких проблем, особенно актуальная в распределенных средах — это проблема "брошенных файлов" (orphaned files).

Эта проблема возникает, когда таблица создается и данные загружаются в рамках активной транзакции. Если происходит критический сбой до того, как транзакция будет закоммичена или отменена (например, внезапное отключение питания или неожиданное завершение работы узла базы данных), система проходит процесс восстановления после падения (crash recovery). При этом логическая таблица откатится, но физические файлы данных, связанные с этой незакоммиченной таблицей, могут остаться в файловой системе. Со временем такие брошенные файлы могут накапливаться, занимая место и приводя к ненужному расходу ресурсов. В настоящее время их удаление происходит вручную.

Недавно мы представили новый функционал, который позволяет автоматически удалять такие брошенные файлы. Полная информация об этой возможности доступна в статье Удаление брошенных файлов в Greengage DB.

Читать далее

Как мы внедряли Service Mesh и не утонули в сложностях: реальный кейс Orion soft

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

Артём Еремин, системный инженер Nova Container Platform в Orion soft.

Всем привет! Недавно я выступал на мероприятии СНОВА О КУБЕРЕ и рассказывал о Service Mesh. Тема достойна и поста на Хабре, потому что Service Mesh стал распространенной фишкой, но при этом не самой простой. 

Мы в Orion soft решили внедрить ее в нашу платформу оркестрации Nova Container Platform, и по пути столкнулись с целым рядом «подводных камней»: от выбора самого решения до нюансов настройки MTLS и организации точек входа трафика в наш кластер. В этой статье я расскажу, как мы выбирали реализацию для Service Mesh, почему остановились на Istio, какие вопросы решали и что из этого получилось.

Читать далее

Expression: всё что нужно для старта

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

Если поискать по Хабру статьи, связанные с Expression, то можно найти несколько десятков страниц статей. Однако, я решил написать еще одну. Цель с которой я решил это сделать‑ разобрать деревья выражений для разработчиков которые еще не имели с ними дела. Для тех кому это кажется магией. И самое главное, показать для чего они могут пригодиться.

Что же далее...

Гайд по использованию Spring GraphQL. Часть 1

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

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

Меня зовут Дмитрий, и я бэкенд-разработчик в SENSE с 10-летним опытом. За это время я успел поработать с финтех-проектами, автоматизировал обработку заказов для интернет-магазинов, но GraphQL долгое время оставался для меня загадочной технологией — я просто не сталкивался с ним в работе. А когда он мне понадобился, то обнаружил, что толковых материалов по Spring-реализации GraphQL очень мало. Поэтому, я решил не только разобраться самостоятельно в теме, но и написать гайд для тех, кто, как и я, только начинает погружаться в эту тему. 

Разбираться будем постепенно: в первой статье покажу, как создать проект с GraphQL с нуля. Поехали!

Читать далее