Набор тестов, который всегда зелёный, содержит непроверяемое допущение. Он может ловить ошибки, а может не смотреть вообще — по цвету это неразличимо. Обычно это допущение так и живёт непроверенным: тесты проходят, значит, наверное, всё хорошо.
Рубрика «распределенные системы»
Мой тестовый харнесс нашёл баг в моей же реализации Raft. Рассказываю, как именно
2026-08-18 в 9:38, admin, рубрики: raft, TypeScript, детерминированное тестирование, консенсус, линеаризуемость, отказоустойчивость, распределенные системы, тестированиеЯ думал, что 16 воркеров ускорят обработку задач в 16 раз. Но что‑то пошло не так
2026-08-13 в 14:29, admin, рубрики: backend, celery, docker, optimisation, python, worker, асинхронность, многопоточность, распределенные системы, тестированиеНедавно я написал свою систему распределённой обработки задач. Сначала это был учебный проект. Мне хотелось лучше разобраться в очередях задач, координации воркеров, блокировках строк в PostgreSQL, retry‑механизмах и планировании фоновых задач. Когда основная функциональность была готова, я понял, что не знаю, как система ведёт себя под нагрузкой.
Поэтому вместо того, чтобы добавлять очередную фичу, я решил провести простой эксперимент. Взять одинаковый набор задач и постепенно увеличивать количество воркеров. Первые результаты выглядели именно так, как я ожидал, а потом масштабирование внезапно остановилось.Читать полностью »
Idempotency keys: 5 граблей, которые мы поймали на проде
2026-05-27 в 1:32, admin, рубрики: .net, api, C#, idempotency, intent-key, race condition, грабли, идемпотентность, платежи, распределенные системыПятница, 23:47. PagerDuty: “Платёж AmEx, провайдер вернул 5xx три раза подряд, билеты не зарезервированы.” Открываю логи – действительно 3 ответа провайдера с 5xx, ни одной успешной транзакции по нашей базе. Закрываю как временный сбой на стороне провайдера, пишу короткую сводку в дежурный чат и иду досматривать. Через 40 минут второй алерт – уже от ночной поддержки: клиент прислал скрин выписки, 3 списания подряд за одну бронь. У клиента рейс через 6 часов, ему нужна действующая бронь и подтверждение, что он завтра нормально улетит, а не тикет в поддержку.
Прежде чем шардировать: разбираем внутренности одной ноды СУБД
2026-03-19 в 6:15, admin, рубрики: postgresql, распределенные системыРазбираем одну ноду базы данных, чтобы понять распределённые системы
Когда читаешь про покупку Neon за $1 млрд, возникает вопрос: за что платят, если PostgreSQL и MySQL бесплатны? Чтобы это понять, нужно залезть под капот - и начать не с распределённых монстров, а с одной ноды.
Вначале был файл
Хранить данные в файлах кажется простым решением. Открыли Excel, добавили строки, сохранили. Проблемы начинаются, когда требования меняются: добавить поле - переписывай парсеры, конвертируй старые данные, разбирайся с версиями. Если файл одновременно редактируют двое - конфликт.
10 000 RPS и доступность 99,99%: как устроено шардирование PG в процессинге Яндекс Такси
2026-02-12 в 9:00, admin, рубрики: postgresql, userver, Миграции данных, распределенные системы, шардированиеКогда система растёт, нагрузка на базу становится критической, а готовых решений для шардирования PostgreSQL не хватает. Стандартные подходы не устраивали — поэтому команда сделала своё решение для шардирования в ядре процессинга заказов. Оно позволяет решардировать данные без простоев и деградации метрик.
Отказоустойчивый человек: распределённое тело, нейропротезы и пределы непрерывности «я-сейчас»
2026-02-01 в 17:28, admin, рубрики: будущее человека, нейропротезы, отказоустойчивость, распределенные системы, сознание, субъективный опыт, экзокортексTL;DR
Человек — это не тело и не набор данных, а непрерывный субъективный процесс («я-сейчас»).
Копирование сознания не спасает — оно создаёт наследника.
Но если заранее включить в себя нейропротезы и вычислительные контуры, которые уже участвуют в субъективном опыте, то гибель тела перестаёт быть финалом.
Это не бессмертие и не отказ от биологии — это архитектура живучести с жёсткими физическими пределами.
1. Долгая перспектива: у биологии есть дедлайн
Мы живём возле G-звезды (Солнца)Читать полностью »
Связь паттернов микросервисной архитектуры
2025-12-28 в 15:16, admin, рубрики: DDD, event sourcing, saga, архитектура, микросервисы, паттерны проектирования, распределенные системыВ этой статье я хотел бы рассмотреть микросервисные паттерны под другим углом. Когда я начинал изучение микросервисных паттернов, у меня постоянно был вопрос: Так это же было в другом паттерне. Я решил немного структурировать их: объединить по похожим элементам. Кластеризировать микросервисные паттерны достаточно тяжело так как каждый паттерн по‑своему уникален, однако для запоминания на собеседованиях или для себя это сделать можно. Основной контент статьи — картинка, далее идёт описание, чтобы всё было в одном месте.
Eventually-consistent СУБД — всё?
2025-12-24 в 10:53, admin, рубрики: acid, base, Eventual consistency, базы данных, распределенные системы, СУБДВсем привет! Это Алексей Рыбак, основатель R&D-центра Devhands. Мы занимаемся образованием экспертного уровня, внимательно следим за краткосрочными и долгосрочными трендами в индустрии, поэтому предлагаем вашему вниманию очень интересную на наш взгляд ретроспективную статью Константина РатвинаЧитать полностью »
Как Temporal без боли решает привычную проблему распределённой бизнес-логики
2025-12-04 в 7:00, admin, рубрики: Go, temporal, архитектура, распределенные системыМеня зовут Миша, я бэкенд‑разработчик в платформе Яндекс Еды, и сейчас я покажу немного настоящего кода процессинга заказа.
e, err := w.prepareExecutor(ctx, req)
if err != nil {
return nil, err
}
if err := e.CreateAndPay(); err != nil {
return e.HandleResult(err)
}
if err := e.InitializeNativeDelivery(); err != nil {
return e.HandleResult(err)
}
if err := e.WaitForOrderConfirmation(); err != nil {
return e.HandleResult(err)
}
if err := e.WaitDelivery(); err != nil {
return e.HandleResult(err)
}
return e.HandleResult(nil)

