RU

WPS: асинхронные бизнес-процессы для SuiteCRM

Мы выложили в open source под лицензией MIT  Workflow Processing Service (WPS)  — отдельный сервис для бизнес-процессов над записями CRM.…

SuiteCRMWorkflow Processing Serviceбизнес-процессы CRMworkflow-движокасинхронная обработка событий CRMRedis StreamsPostgreSQLSwoolePHP
Habr
RU

Как NAS умер вовремя: ZFS-хранилище из б/у железа и бэкапы, которые проверяют себя сами

Привет, Хабр. Месяц назад я рассказывал, как в одиночку построил AI-платформу на железе под столом. Та статья вышла с опозданием на день, «потому чт…

ZFSNASрезервное копированиеresticPostgreSQLпроверка восстановлениядомашний серверprometheusgiteaбу железо
Habr
RU

HTTP-запрос закончился, а LLM ещё работает: как проектировать AI-задачи на Go

Обычный Go backend привык отменять работу вместе с HTTP-запросом. Но если пользователь закрыл вкладку посреди анализа документа, это ещё не означает…

GoGolangLLMcontext.ContextPostgreSQLbackground jobsidempotencydistributed systemsAI SaaSbackend architecture.
Habr
RU

Неожиданный антивайб разработки через ИИ-агентов

Менеджеры считают, что ИИ-агенты ускорят разработку в десять раз. Математика говорит, что ускорится только написание. Проверять смысл по-прежнему бу…

еорема РайсавайбкодингИИ-агентыcode reviewлегасиDatalogтьюринг-полнотаPostgreSQLформальная верификациядекларативное программирование.
Habr
RU

Платёж списывается дважды. Найдите причину в коде, который прошёл ревью

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

идемпотентностьдвойное списаниеплатёжный сервисраспределённые системыSpring BootJavaPostgreSQLретраиконкурентные запросымикросервисная архитектура
Habr
RU

От RTSP-камеры до истории событий: настраиваем видеоаналитику через JavaScript Viewer

Привет, Хабр! В  первой статье  я разбирал внутреннее устройство real-time-конвейера на C++20: почему медленный YOLO не должен останавлива…

JavaScriptRTSPHLSOpenCVYOLOONNX RuntimetrackingвидеоаналитикаREST APIPostgreSQL
Habr
RU

Один разработчик, пять сервисов, три базы: что я понял об архитектуре, когда пришлось самому всё деплоить и чинить

Через год после закрытия проекта я открыл его код и устроил себе code review. Это был автомобильный маркетплейс объявлений, который я в од…

архитектураcode-reviewNestJSSocket.IOKubernetesPostgreSQLlost-updateидемпотентностьoutboxCronJob
Habr
RU

От Architecture Baseline к рабочему Full Stack MVP: как не усложнить архитектуру раньше времени

Architecture Baseline определяет границы системы и ключевые архитектурные решения. Но настоящая проверка начинается тогда, когда эта архитектура пре…

Enterprise GenAI PlatformархитектураASP.NET Core.NET 10ReactPostgreSQLEF CoreModular MonolithTanStack Query
Habr
RU

Kafka гарантирует порядок? Разбираем 3 инцидента с Outbox

Один ключ на все события заказа — и кажется, что порядок гарантирован. А потом клиенту приходит «Ваш заказ собран» раньше, чем «Оплата получена», ви…

Kafkatransactional-outboxPostgreSQLDebeziumCDCevent-orderingсистемный-анализнефункциональные-требованияidempotency
Habr
RU

Klark + Klara: корпоративный мессенджер и таск‑менеджер, которые живут на нашем сервере

Свой корпоративный мессенджер на FastAPI и React: зачем он нам понадобился, что в нём есть и что ломалось по дороге. Читать…

корпоративный мессенджерself-hostedFastAPIPostgreSQLReactCapacitorElectronLiveKitинформационная безопасностьтаск-менеджер
Habr
RU

МойСклад после переезда с InSales: где ломается связка сайта с учётом

Разбираем интеграцию интернет-магазина с МойСкладом на собственном движке, Next.js и PostgreSQL, после переезда с InSales. Если ваш магазин живёт в…

МойСкладинтеграция с учётной системойInSalesпереезд интернет-магазинаAPIидемпотентностьобработка ошибокrate limitNext.jsPostgreSQL
Habr
RU

Собрал платный API для ИИ‑агентов на x402. Рынка не нашёл — зато нашёл четыре бага

Собрал платный API для проверки кода на протоколе x402 — агент получает HTTP 402, платит в USDC, получает подписанный сертификат…

x402HTTP 402AI-агентыFastAPIDockerPostgreSQLed25519Claude CodeDevSecOps
Habr
RU

Миграции от ИИ агента: почему я бы не пускал их в прод без отдельного firewall

ИИ агент отлично справляется с тем, что раньше раздражало своей механичностью: протянуть поле через модель и сериализатор, обновить тесты, поправить…

AI-агентыPostgreSQLDjangoмиграцииdatabase migrationsbackendcode review
Habr
RU

Кнопка нажата, а ответа нет: как не потерять действие пользователя и не наделать дублей

Пользователь нажал кнопку, сеть пропала, а браузер не знает, дошёл ли запрос до сервера. Повторите запрос — можно получить дубль. Не повторяйте — по…

офлайн-очередьService WorkerидемпотентностьIndexedDBBackground Syncповторные запросыFastAPIPostgreSQLhtmxPlaywright
Habr
RU

Почему юридический AI‑сервис нельзя строить как обычный чат: проектируем case‑first SaaS на Go

Несколько месяцев назад мне понадобилось заключить договор с Леноблводоканалом. Казалось бы, обычная бюрократическая задача: отправил документы, пол…

GoGolangLLMAISaaSRAGPostgreSQLархитектураюридический AIобработка документов
Habr
RU

Бэкенд без лишних граблей: 13 статей о PostgreSQL, микросервисах и коде

Что общего у раздувшегося индекса, неудачно нарезанных микросервисов и лишнего std::move ? Все они выглядят безобидно, пока не доходят до продакшена…

бэкенд-разработкапроектирование системPostgreSQLбазы данныхмикросервисная архитектураC++Javaоптимизация производительности
Habr
RU

HikariCP в проде: три раза, когда пул соединений уронил сервис, и почему maximumPoolSize тут был ни при чём

В прошлой статье про PostgreSQL я разбирал три инцидента на стороне базы — блокировки, bloat и ночные пересчёты. В комментариях несколько человек на…

hikaricpпул соединенийSpring BootPostgreSQLconnection poolJDBCтранзакциипроизводительностьconnection leakвысоконагруженные системы
Habr
RU

TLS PSK для Mamonsu: как мы добавили защищённую передачу PostgreSQL-метрик в Zabbix

Мониторинг редко начинается с разработки собственного кода. Обычно всё гораздо прозаичнее: устанавливаешь готовый агент, подключаешь его к существую…

PostgreSQLZabbixMamonsuTLS PSKPythonOpenSSLмониторингсистемное администрированиеAstra Linuxинформационная безопасность
Habr
RU

Как защитить платежный API от двойных списаний с помощью идемпотентности

Пользователь нажал кнопку оплаты один раз, но деньги списались дважды — такой сценарий возникает не из‑за редкой ошибки, а из‑за…

идемпотентностьраспределённые системымикросервисыAPIbackendплатежные системыотказоустойчивостьPostgreSQLконкурентный доступархитектура ПО
Habr
RU

Одна таблица результатов на 14 движков: как мы перестали дорисовывать то, чего движок не умеет

Сразу оговорюсь: я из команды LibreDB Studio, и статья — про наши собственные грабли. LibreDB Studio — это self-hosted IDE для СУБД, работающая в бр…

базы данныхSQLNoSQLIDEself-hostedopen sourcePostgreSQLCassandraTrinoLibreDB
Habr
RU

PostgreSQL в проде: блокировки, bloat и ночные пересчёты. Три инцидента и как их чинили

В прошлой статье я рассказывал, как мы перевозили терабайт банковской базы с Oracle на PostgreSQL без даунтайма. Там был раздел про производительнос…

PostgreSQLбазы данныхСУБДблокировкиdeadlockMVCCbloatтранзакциииндексыпроизводительность
Habr
RU

Найти ПДн, замаскировать, развернуть копию: большой разбор открытого pg_anon

pg_anon — полностью открытый инструмент для PostgreSQL, который ищет персональные данные по заданным правилам и выгружает копию базы уже замаскирова…

pg_anonPostgreSQLанонимизация данныхмаскирование данныхперсональные данныеПДнпоиск персональных данныхтестовые данныетестовый стендtantor postgres
Habr
RU

Один контракт данных, разные адаптеры: как перестать писать миграцию магазина заново

Первый файл, который я получил при переезде своего магазина с InSales, парсер прочитал как одну длинную строку мусора. Выгрузка заказ…

миграция данныхETLадаптерыидемпотентностьимпорт данныхInSalesPostgreSQLNext.jsинтернет-магазинblue-green
Habr
RU

Как проверить, что бэкап действительно можно восстановить

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

резервное копированиебэкапbackup restorePostgreSQLMySQLmysqldumpbinlogBorgBackupLinuxruvds_статьи
Habr
RU

Как я случайно напечатал инфляцию в Discord‑боте и переделал ставки в тотализатор

Всё, что ниже — из живого пет-проекта: бот начисляет участникам голосовых каналов баллы лояльности (LP), а на эти баллы люди устраивают пари в стиле…

JavaSpring BootJDADiscord-ботPostgreSQLконкурентностьидемпотентностьтотализаторигровая экономикатранзакции
Habr
RU

HTTP API для разработчика: практический гайд по проверке конфликтов при изменении одной сущности

Когда несколько клиентов работают с одной записью, проблема часто скрывается не в самом запросе, а в моменте между чтением…

APIHTTP APIREST APIконкурентные запросыгонки данныхблокировкитестирование ПОETagPostgreSQLавтоматизация тестирования
Habr