Migrations

Zero-downtime деплой и миграции БД: expand-contract на практике

Zero-downtime деплой и миграции БД: expand-contract на практике

Деплой без простоя ломается не на коде, а на схеме: переименовал колонку — и старые поды падают. Expand-contract (сначала расширить схему, выкатить код, потом сузить), почему миграция и код едут в разном порядке, backward/forward-совместимость между версиями во время rollout, блокирующие DDL и как их избегать, безопасный rollback и роль feature flags. Как менять схему под работающим трафиком

Версионирование workflow: patching, worker versioning, безопасные изменения

Версионирование workflow: patching, worker versioning, безопасные изменения

Самая недооценённая дисциплина Temporal: нельзя просто поменять код workflow, у которого есть запущенные экземпляры — при replay новой логики на старой истории рантайм упрётся в non-determinism error. Разбираем, почему так, где именно проходит граница ломающего изменения (она не там, где кажется), как чинит patching/GetVersion и почему преждевременное снятие патча ломает всё заново. Плюс worker versioning с build IDs и то, как встроить версионирование в деплой до первого инцидента, а не после

Мигратор схемы: на чём он стоит и что ломается вне ванильного PostgreSQL

Мигратор схемы: на чём он стоит и что ломается вне ванильного PostgreSQL

Мигратор — не «скрипты по порядку», а программа со своими требованиями к СУБД: журнал версий, транзакционный DDL, интроспекция каталогов. Живая матрица пяти инструментов (goose, Flyway, Liquibase, Atlas, Alembic) против PostgreSQL, CockroachDB и Picodata: на Picodata ни один не дошёл до первой миграции, на CockroachDB два споткнулись о собственную служебную часть. Плюс декларативный против императивного, привязка к формату и что на самом деле стоит денег в бесплатных редакциях

Порядок вывода легаси: почему VOG переносит игры по одной

Порядок вывода легаси: почему VOG переносит игры по одной

Почему перезапуск VOG не стал «переписать всё с нуля»: откуда в проекте привычка к осторожности, что пришлось сделать в 2021 году, чтобы старый C++-сервер вообще можно было собрать и запустить, и как в 2026-м выбрали порядок — сначала общее хранилище для всех игр, потом по одной игре, на каждом шаге меняется что-то одно

Go modules: go.mod, версионирование и управление зависимостями

Go modules: go.mod, версионирование и управление зависимостями

go.mod, go.sum, семантический импорт версий, minimal version selection, replace/exclude, vendoring и workspaces (go.work). Как Go решает, какие версии зависимостей брать, почему MVS отличается от других менеджеров пакетов, и как этим управлять на практике