Дүрмүүд docs/architecture/23-ops.md хэсэг 7 болон docs/architecture/07-data.md хэсэг 4.1 дотор байна. Энэ нь процедур юм.
Аюулгүй болгодог баталгаа
Хувилбар R нь схем R болон схем R-ээс нэгийн эсрэг зөв ажиллана. Бүх схемийн өөрчлөлтийг өргөтгөл, шилжилт, хураалт гэж хуваана:
- Өргөтгөл: шинэ багана, хүснэгт эсвэл индекс нэмнэ. Хуучин код үүнийг үл харгалзана.
- Шилжилт, хамгийн багадаа нэг хувилбарын турш: шинэ код хоёр хэлбэрийг бичээд шинээр нь уншина; үргэлжлүүлж болох ажил хуучин мөрүүдийг бөөнөөр чөлөөлнө.
- Хураалт: хуучин хэлбэрийг дараагийн хувилбарт, дангаараа устгана.
Ингэснээр руллинг шинэчлэлтийн ямар ч мөчид хуучин, шинэ процесууд нэг өгөгдлийн санг хуваалцах боломжтой. Доош шилжүүлэлт байдаггүй: цагийн өмнө багана устгасан шилжүүлэлт тэр цагт бичигдсэн мөрүүдийг буцааж өгч чадахгүй.
schema-compat CI ажил нь өмнөх хувилбарын тестүүдийг шинэ схем дээр ажиллуулж, бүх хувилбар дээр баталгааг шалгадаг.
Эхлэхээс өмнө
- Хувилбарын тэмдэглэлүүдийг уншина уу. Ажиллагааны цонх шаардлагатай хувилбар үүнийг тооцоотойгоор хэлнэ; хувилбар бүрт хамгийн ихдээ нэг.
- Сэргээлтийн дасгалыг ажиллуулна уу, эсвэл энэ хувилбарт ногооноор ажилласныг баталгаажуулна уу (backup-restore.md). Амжилтгүй дасгал шинэчлэлтийг хаана.
- Үндсэн нөөцлөлт авна уу:
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Дараалал нь санаатай:
- Эхлээд шилжүүлэлт — хуучин хувилбар хүсэлт үйлчилж байх үед. Өргөтгөх шилжүүлэлтүүд түүнд үл мэдэгдэнэ.
- Дараа нь веб түвшин. SIGTERM авсан бүр веб процесс нь
/readyz-ийгdrainingболгон эргүүлж, 30 секундын дотор биет доторх хүсэлтүүдээ дуусгаж, холбогдох заавартайгаар урсгалуудыг хааж, гарна.stop_grace_periodнь 40 секунд бөгөөд Compose хэзээ ч эрүүл дасгалыг таслахгүй. - Сүүлд нь ажилчид — ингэснээр хамгийн шинэ үйл явдлын хэлбэрийг хамгийн шинэ хэрэглэгч хүлээж авахаасаа өмнө үйлдвэрлэнэ. Ажилчид шууд татахаа зогсоож 120 секунд авна; дуусч чадахгүй ажил өөр газар дахин татагдах бөгөөд энэ нь аюулгүй — учир нь бүх ажил идемпотент. Scheduler дараагийн тэмдэглэгээндээ удирдлагыг шилжүүлнэ.
Нэг хост дээр Compose контейнер бүрийг дараалан солидог тул үйлчилгээ бүрт богино завсарлага гарна. Завсарлагагүй байхын тулд веб түвшинг өөрийн проксигийн ард хоёр контейнераар ажиллуулаарай (хоёр дахь web үйлчилгээ нэмсэн, нийтлэгдсэн портгүй дарж бичих файл), мөн тэдгээрийг нэг нэгээр нь дахин үүсгээд, дараагийнх нь эхлэхээс өмнө бүр эрүүл гэж тайлагдахыг хүлээнэ үү.
Хэд хэдэн хост эсвэл оркестратор
Ижил дарааллыг ашиглана уу: дан ажлаас нэг удаа шилжүүлэлт хийгээд, дараа нь веб түвшинг surge one, unavailable zero-тэй эргүүлэх, дараа нь ажилчид. Бэлэн байдлын шалгалтуудыг /readyz-д, амьд байдлыг /healthz-д чиглүүлнэ.
Тусгай түрээсчийн өгөгдлийн сангуудтай migrate алхам хоёуланг хийдэг: эхлээд хяналтын өгөгдлийн санг шилжүүлээд, дараа нь ops.tenant_database-д жагссан бүх өгөгдлийн санг нэг нэгээр нь, бүр өөрийн түгжээний дор шилжүүлнэ. Нэг түрээсчийн өгөгдлийн сан дахь алдаа бусдыг зогсоохгүй. Бүх өгөгдлийн сан дууссаны дараа шилжүүлэлтийн бичиг тэмдэглэлүүдийг харьцуулаад, бүх өгөгдлийн сан хяналтын өгөгдлийн сан руу яг шилжүүлсэн шилжүүлэлтүүдийг хэрэгжүүлээгүй бол нэгээс ялгаатай утгаар гарна — хоцрогдсон эсвэл түрүүлсэн бүрийг нэрлэнэ. Тэр л команд сургалтын ээлжийн хүснэгтүүдийг бүр өгөгдлийн санд суулгадаг — учир нь ажилч пин хийгдсэн түрээсчийн ажлуудыг бичигдсэн газраас нь уншидаг.
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 гэж бүртгэгдсэн өгөгдлийн санд дараах шаардлагатай:
| Хувьсагч | Юунд ашиглана вэ |
|---|---|
QUIRE_DB_NORTHWIND_URL |
Програмын үүрэг, веб түвшин болон ажилчдад |
QUIRE_DB_NORTHWIND_URL_MIGRATOR |
Шилжүүлэгчийн үүрэг, энэ команд болон шилжүүлэлтүүдэд |
QUIRE_DB_NORTHWIND_URL_SUPERUSER |
Сонголттой: шилжүүлэхээс өмнө эхлүүлэлтийг (үүрэг, схем, туслахууд) дахин хэрэгжүүлнэ |
_MIGRATOR холболтгүй бүртгэгдсэн өгөгдлийн санг алдаа гэж тайлагддаг, хэзээ ч алгасдаггүй. Хяналтын өгөгдлийн сан дууссаны дараа веб түвшин эргүүлж болно. Нэг цагаар хоцрогдсон түрээсчийн өгөгдлийн сан анхааруулга; нэг өдрөөр бол мэдэгдэл өгнө.
pgvector
0264 шилжүүлэлтээс эхлэн суурь баримтын агуулга серверт хамтаргал байвал pgvector HNSW индекс ашиглана; Compose-ийн postgres үйлчилгээ үүнтэй бүтээгдсэн (docker/postgres.Dockerfile). Дүрс солихын дараах анхны migrate нь супер хэрэглэгчийн эхлүүлэлтээр хамтаргалыг үүсгээд, 0264 дараа нь үүсгэгдсэн вектор багана нэмээд индексийг байна. Багана нэмэх нь app.ai_chunk-ийг нэг удаа онцгой түгжээний дор дахин бичдэг тул суурьлах хүсэлтүүд үүнийг хүлээнэ; өөр юу ч тэр хүснэгтэд хүрдэггүй.
pgvector-гүй сервер дээр 0264 мэдэгдэл бичээд юуг ч өөрчлөхгүй бөгөөд татан авалт яг хэвээрээ үлдэнэ. 0.8-аас хуучин pgvector-тай бол багана, индекс байгуулагдаж боловч хамтаргал шинэчлэгдөх хүртэл (alter extension vector update) татан авалт яг хэвээрээ үлдэнэ — учир нь шүүлттэй HNSW скан нь 0.8-ийн дадлагатай скан шаардана. Дараа нь үүнгүй сервер дээр идэвхжүүлэхийн тулд хамтаргалыг суулгаад, эхлүүлэлтийг дахин ажиллуулаарай (эсвэл супер хэрэглэгчээр 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 буцаана. Үүнийг бүр тусгай түрээсчийн өгөгдлийн сан дээр ч мөн ажиллуулна уу.
Буцах
Код-ыг буцаах нь үргэлж боломжтой: QUIRE_RELEASE-ийг өмнөх шошгод тогтооод дахин up -d хийнэ үү. Энэ нь ажиллана — учир нь схем нь хувилбарын дотор хоёр тийшээ нийцтэй.
Схем-ийг буцаах санал болгодоггүй. Юу буцаах боломжгүй вэ, үүнээс хэрхэн сэргээх вэ:
| Буцаах боломжгүй | Сэргээлт |
|---|---|
| Багана устгасан хураалтын шилжүүлэлт | Устгахаас өмнөх байдлаар шинэ өгөгдлийн сан руу цагийн цэгийн сэргээлт хийж, гаргаж авч, нэгтгэх |
| Шуудхан өөрчлөгдсөн өгөгдөл | Ижил зүйл, дараа нь хойшлуулсан бичлэгүүдийг тохируулах |
| Илгээсэн вебхүүк болон үйл явдлууд | Компенсацийн үйл явдлууд, хэзээ ч устгалгүй |
| Илгээсэн имэйл | Хүн дагалдах захиаг бичнэ |
| Аудитын хэш хэлхээ | Хэзээ ч дахин бичигдэхгүй; засварын бичлэг нэмнэ |
Ийм учраас хураалтын шилжүүлэлт дангаараа ирдэг: ингэснээр сэргээлтэд цэвэр хязгаар байна.
Шинэчлэлтийг шалгах
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