Стабильность — это принцип продукта, а не запоздалая мысль. AiHummer следует
SemVer, применяет безопасные вперёд миграции БД автоматически и умеет
самообновляться из CDN — так что обновления становятся рутиной, а не риском.
Версионирование (SemVer)
Релизы следуют семантическому версионированию. Версию сообщают /healthz и
aihummer version, поэтому всегда можно подтвердить, что именно работает, до и
после обновления.
Миграции безопасны вперёд и автоматичны
При старте gateway применяет ожидающие миграции БД автоматически. Безопасность
обеспечивают два свойства:
Безопасность вперёд. Миграции написаны так, что более новый бинарь работает
со схемой, в которую он мигрирует, — именно это делает автоприменение и
скользящие обновления безопасными.
Единственный применяющий через advisory-lock. Миграции выполняются под
advisory-lock PostgreSQL, поэтому при одновременном старте нескольких
gateway применяет их только один, а остальные ждут — никаких двойных миграций.
[!NOTE]
Миграции всегда выполняются на owner-пуле базы. Ограниченная RLS-роль
(AIHUMMER_DB_APP_URL) предназначена для обслуживания трафика, а не для
изменений схемы.
Самообновление из CDN
Gateway может обновляться сам из релизного CDN. Поведение управляется тремя
переменными окружения:
Переменная
Назначение
AIHUMMER_AUTO_UPDATE
off | check | apply — выключено, только уведомление или автоприменение
AIHUMMER_UPDATE_CHANNEL
Отслеживаемый канал релизов (например, stable / alfa / beta / dev)
AIHUMMER_DOWNLOAD_BASE_URL
Базовый URL, откуда тянется обновление
Обновления обнаруживаются через latest.json канала на CDN. Также обновлениями
можно управлять вручную через CLI:
aihummer update --check # сообщить, доступна ли новая версияaihummer update # скачать и применить обновление
# gateway.env — только уведомления на канале stableAIHUMMER_AUTO_UPDATE=checkAIHUMMER_UPDATE_CHANNEL=stable
[!TIP]
Начните с AIHUMMER_AUTO_UPDATE=check, чтобы получать уведомления о новых
релизах, и перейдите на apply, когда будете доверять каналу для
автоматических выкаток.
Выкатки без простоя
AiHummer создан для обновления без простоя:
Запускайте 2+ gateway за прокси. Обновляйте их по очереди; проба готовности
(/readyz) держит перезапускающийся узел вне ротации, пока он не начнёт
обслуживать.
Планировщик — единственный лидер. Фоновое планирование выбирает одного
лидера через advisory-lock PostgreSQL, поэтому несколько gateway не дублируют
запланированную работу.
Доставка идемпотентна. Outbox с гарантированной доставкой плюс ключи
идемпотентности означают, что ответ не отправится дважды при перезапуске —
именно это делает скользящую выкатку флота безопасной.
Стабильность — это принцип продукта, а не запоздалая мысль. AiHummer следует
**SemVer**, применяет **безопасные вперёд миграции БД автоматически** и умеет
**самообновляться** из CDN — так что обновления становятся рутиной, а не риском.
## Версионирование (SemVer)
Релизы следуют семантическому версионированию. Версию сообщают `/healthz` и
`aihummer version`, поэтому всегда можно подтвердить, что именно работает, до и
после обновления.
## Миграции безопасны вперёд и автоматичны
При старте gateway применяет ожидающие миграции БД автоматически. Безопасность
обеспечивают два свойства:
- **Безопасность вперёд.** Миграции написаны так, что более новый бинарь работает
со схемой, в которую он мигрирует, — именно это делает автоприменение и
скользящие обновления безопасными.
- **Единственный применяющий через advisory-lock.** Миграции выполняются под
**advisory-lock PostgreSQL**, поэтому при одновременном старте нескольких
gateway применяет их только один, а остальные ждут — никаких двойных миграций.
> [!NOTE]
> Миграции всегда выполняются на owner-пуле базы. Ограниченная RLS-роль
> (`AIHUMMER_DB_APP_URL`) предназначена для обслуживания трафика, а не для
> изменений схемы.
## Самообновление из CDN
Gateway может обновляться сам из релизного CDN. Поведение управляется тремя
переменными окружения:
| Переменная | Назначение |
|---|---|
| `AIHUMMER_AUTO_UPDATE` | `off` \| `check` \| `apply` — выключено, только уведомление или автоприменение |
| `AIHUMMER_UPDATE_CHANNEL` | Отслеживаемый канал релизов (например, stable / alfa / beta / dev) |
| `AIHUMMER_DOWNLOAD_BASE_URL` | Базовый URL, откуда тянется обновление |
Обновления обнаруживаются через `latest.json` канала на CDN. Также обновлениями
можно управлять вручную через CLI:
```bash
aihummer update --check # сообщить, доступна ли новая версия
aihummer update # скачать и применить обновление
```
```ini
# gateway.env — только уведомления на канале stable
AIHUMMER_AUTO_UPDATE=check
AIHUMMER_UPDATE_CHANNEL=stable
```
> [!TIP]
> Начните с `AIHUMMER_AUTO_UPDATE=check`, чтобы получать уведомления о новых
> релизах, и перейдите на `apply`, когда будете доверять каналу для
> автоматических выкаток.
## Выкатки без простоя
AiHummer создан для обновления без простоя:
- **Запускайте 2+ gateway за прокси.** Обновляйте их по очереди; проба готовности
(`/readyz`) держит перезапускающийся узел вне ротации, пока он не начнёт
обслуживать.
- **Планировщик — единственный лидер.** Фоновое планирование выбирает одного
лидера через advisory-lock PostgreSQL, поэтому несколько gateway не дублируют
запланированную работу.
- **Доставка идемпотентна.** Outbox с гарантированной доставкой плюс ключи
идемпотентности означают, что ответ не отправится дважды при перезапуске —
именно это делает скользящую выкатку флота безопасной.
## Куда дальше
- Пробы, управляющие скользящим перезапуском:
[systemd и health-проверки](/v1.0/operations/systemd-health).
- Сделайте бэкап перед мажорным обновлением:
[Бэкапы и аварийное восстановление](/v1.0/operations/backups-dr).
- Следите за выкаткой:
[Наблюдаемость](/v1.0/operations/observability).