Мазмунга өтүү

Тыныгуусуз жаңылоо

Өзүн-өзү кармоочу Quire'ди тыныгуусуз жаңылоо.

Markdown түрүндө көрүү

Эрежелер docs/architecture/23-ops.md 7-бөлүмүндө жана docs/architecture/07-data.md 4.1-бөлүмүндө. Бул болсо процедура.

Буну коопсуз кылган кепилдик

Релиз R схема R жана схема R минус биринчи туура иштейт. Ар бир схема өзгөрүүсү кеңейтүү, өтүү жана кыскартууга бөлүнөт:

  1. Кеңейтүү: жаңы колонканы, таблицаны же индексти кошуңуз. Эскы код аны эсептебейт.
  2. Өтүү, кеминде бир релиз үчүн: жаңы код эки түрдө тең жазат жана жаңысын окуйт; улантылуучу жумуш эски саптарды толуктайт.
  3. Кыскартуу: эски түрдү кийинки релизде, өзүнчө, таштап салыңыз.

Ошондуктан тыныгуусуз жаңылоонун ар кайсы учурда эски жана жаңы процессстер бир маалымат базасын бөлүшө алат. Төмөндөткөн миграциялар жок: бир саат мурун колонканы таштап салган миграция ошол сааттын ичинде жазылган саптарды кайта бербейт.

schema-compat CI жумушу кепилдикти ар бир релизде мурунку релиздин тесттерин жаңы схемага каршы иштетүү менен текшерет.

Баштоодон мурун

  1. Релиз эскертүүлөрүн окуңуз. Тейлөө терезесин талап кылган рилиз бул жөнүндө болжол менен айтат; релизга кеминде бир.
  2. Калыбына келтирүү машыгуусун өткөрүңүз же бул релиз үчүн жашыл өткөнүн ырастагыла (backup-restore.md). Ийгиликсиз машыгуу жаңылоону тосуп калат.
  3. Негизги камдык көчүрмө алыңыз: docker compose -f docker/compose.yaml --profile backup run --rm backup.

Docker Compose, бир хост

export QUIRE_RELEASE=2026.10.0            # or set it in docker/.env
docker compose -f docker/compose.yaml pull   # or build
docker compose -f docker/compose.yaml run --rm migrate
docker compose -f docker/compose.yaml up -d --no-deps web content collab
docker compose -f docker/compose.yaml up -d --no-deps worker scheduler

Тартиби ойлонулган:

  1. Алгач миграция, эски релиз трафикти тейлөөдө. Кеңейтүү миграциялары анын көзүнө көрүнбөйт.
  2. Андан кийин веб катмары. SIGTERM келгенде ар бир веб процесс /readyz’ди draining кылып которот, ишинде турган суроолорду 30 секундун ичинде бүтүрөт, кайра туташуу кеши менен агымдарды жабат жана чыгат. stop_grace_period 40 секунд, ошондуктан Compose абалы жакшы тазалоону эч качан үзбөйт.
  3. Акыркысы жумушчулар, ошондо эң жаңы окуя түрү эң жаңы керектөөчү күтөөрүнөн мурун өндүрүлөт. Жумушчулар дароо тартууну токтотуп, 120 секунд алат; бүтө албаган жумуш башка жерден кайра алынат, бул коопсуз анткени ар бир жумуш бирдейликке ээ. Кезектеөөчү кийинки тикесинде жетекчиликти өткөрөт.

Бир хостта Compose ар бир контейнерди кезектештирүү менен алмаштырат, ошондуктан кызмат үчүн кыска үзүлүш болот. Эч кандай үзүлүш болбосу үчүн, веб катмарын өзүңүздүн проксиңиздин артында эки контейнер катары иштетиңиз (чыгарылган порту жок экинчи веб кызматын кошот override файлы), жана аларды биринчи кийинкиги, ар бири саламат экенин кабарлаганча күтүп, кайра түзүңүз.

Бир нече хост же оркестратор

Ошол эле тартиптин колдонуңуз: бир гана жумуштан бир жолу миграция кылыңыз, андан кийин веб катмарын surge бир, unavailable нөл менен түшүрүңүз, андан кийин жумушчуларды. Даярдык текшерүүлөрүн /readyz’ге, ал эми тирүүлүк текшерүүсүн /healthz’ге багыттаңыз.

Айырмаланган tenant маалымат базалары менен migrate адымы экинчисин да кылат: ал алгач башкы маалымат базасын миграциялайт, андан кийин ops.tenant_database атындагы ар бир маалымат базасын, биринчи кийинкиги, ар бири өз блогунун астында. Бир tenant базасындагы ийгиликсиздик калгандарын токтотпойт. Ар бир маалымат базасы бүткөндө ал миграция журналдарын салыштырып, ар бир маалымат базасы башкы маалымат базасы колдонгон миграцияларды так колдонбосо нөлдөн тышкары чыгат, арка кечигип же алдыда экенин атап. Ошол эле буйрук ар бир маалымат базасында кезектер таблицасын орнотот, анткени жумушчу тигилген tenantтын жумуштарын жазылган жеринен керектейт.

bun apps/worker/src/migrate.ts   # what the Compose step runs
bun run db:migrate:all                            # the same, from a checkout

Ар бир айырмаланган маалымат базасы анын катталган аты аркылуу туташтырылат. env:QUIRE_DB_NORTHWIND_URL катары катталган маалымат базасына төмөнкүлөр керек:

Variable Used for
QUIRE_DB_NORTHWIND_URL Колдонмо ролу, веб катмары жана жумушчу үчүн
QUIRE_DB_NORTHWIND_URL_MIGRATOR Миграциялоочу ролу, бул буйрук жана жылдыруулар үчүн
QUIRE_DB_NORTHWIND_URL_SUPERUSER Милдеттүү эмес: миграциялоодон мурун bootstrap’ти (рольдер, схемалар, жардамчылар) кайра колдонот

_MIGRATOR туташуусу жок катталган маалымат базасы ийгиликсиздик катары кабарланат, эч качан өткөрүлбөйт. Башкы маалымат базасы бүткөндөн кийин веб катмары бир жолу түшүрүлөшү мүмкүн. Бир саат кечигкен tenant маалымат базасы эскертет; бир күн кечигсе чакырык жөнөтөт.

pgvector

0264 миграциясынан бери негиз берүү корпусу серверде кеңейтүү бар жерде pgvector HNSW индексин колдонот; Compose’дун postgres кызматы аны менен курулган (docker/postgres.Dockerfile). Сүрөттөрдү алмаштырганнан кийинки биринчи migrate кеңейтүүнү superuser bootstrap аркылуу түзөт, андан кийин 0264 жаратылган вектор колонканы кошот жана индекс курат. Колонканы кошуу app.ai_chunk’ты бир жолу атайын блоктун астында кайра жазат, ошондуктан негиз берүү суроолору аны күтөт; башка эч нерсе ошол таблицага тийбейт.

pgvector жок серверде 0264 эскертүү жазып, эч нерсени өзгөртпөйт, жана издөө так бойдон калат. 0.8ден мурунку pgvector менен колонка жана индекс курулат, бирок кеңейтүү жаңырылганга (alter extension vector update) чейин издөө так бойдон калат, анткени чыпкаланган HNSW скандаштары 0.8дин кайталап скандашын талап кылат. Кийин аны жок болгон серверде күйгүзүү үчүн, кеңейтүүнү орнотуп, bootstrap’ти кайра иштетиңуз (же superuser болуп create extension vector), андан кийин quire_migrator катары:

set maintenance_work_mem = '1GB';  -- the HNSW build is much faster in memory
select ops.ai_chunk_enable_vector_index();

Ал бирдейликке ээ жана enabled же unavailable кайтарат. Аны ар бир айырмаланган tenant маалымат базасында да иштетиңиз.

Артка кайтуу

Кодду артка кайтуу ар дайым жеткиликтүү: QUIRE_RELEASE мурунки тегге коюп, кайра up -d кылыңыз. Бул иштейт, анткени схема релиз ийчинде эки багытта туруктуу.

Схеманы артка кайтуу сунушталбайт. Кайтарылбай турган нерсе жана анын кантип калыбына келтирилиши:

Not reversible Recovery
Колонканы таштап салган кыскартуу миграциясы Таштоого чейинки учурга чейинки калыбына келтирүү жаңы маалымат базасына, чыгаруу, кошуу
Ошол жердеги маалымат өзгөртүүсү Ошондой эле, андан кийинки жазууларды теңдөө
Жөнөтүлгөн вебхуктар жана окуялар Толуктоочу окуялар, эч качан өчүрүү
Жөнөтүлгөн почта Адам кийинки катты жазат
Аудит хэш чынжыры Эч качан кайра жазылбайт; түзөтүү жазуусун кошуңуз

Ошондуктан кыскартуу миграциясы өзүнчө чыгат: андан кийин калыбына келтирүүнүн таза чеги болот.

Жаңылоону текшерүү

docker compose -f docker/compose.yaml ps           # every service healthy
curl -fsS http://localhost:8080/readyz             # ready, and what is configured
docker compose -f docker/compose.yaml logs migrate # the migrations applied
Навигация

Издөө үчүн жазыңыз…

↑↓ навигация↵ тандооEsc жабуу