Публикация и откат
Публикацией владеет продукт. Framework задаёт для неё правила, которые не дают показать посетителю половину результата.
Снимок результата. Продукт полностью собирает страницу и сохраняет вместе готовые Document, HTML и перечень зависимостей. Этот неизменяемый комплект называется снимком результата. Отдельная короткая запись указывает, какой снимок сейчас активен.
| Что | Содержит |
|---|---|
| снимок входов | настройки и содержимое, с которыми начинается сборка |
| снимок результата | готовые Document, HTML и зависимости |
| активная запись | ссылку на один готовый результат для показа |
Правила публикации:
- Переключение. Перед переключением продукт сверяет, что активная запись не изменилась с момента начала сборки. Если другой процесс уже опубликовал более новую версию, переключение останавливается и ничего не перезаписывает. Старое задание, завершившееся последним, не может затереть новую версию.
- Откат — это новое переключение, а не возврат номера назад: продукт активирует прежний целый снимок под новым номером версии. Поэтому устаревший запрос не вернёт страницу к ещё более старому состоянию.
- Ошибка сборки не создаёт активный снимок: посетитель продолжает видеть прежнюю страницу, если права на её показ действуют. При отзыве доступа прежний снимок не показывается.
- Единица целостности — одна страница. Очередь может обновлять страницы сайта постепенно; атомарность всего сайта стандарт не требует.
Пример: переключение и откат
Опубликована статья с краткой шапкой. Активная запись имеет ревизию 7 и
указывает на снимок краткой шапки:
{
"schema": "product.composition_recipe_activation.v1",
"activation_revision": 7,
"snapshot_digest": "sha256:compact…"
}
Это запись продукта, а не формат Framework: имя schema выбирает продукт.
- Продукт собирает вариант с расширенной шапкой в новый снимок.
- Перед переключением он проверяет, что активная ревизия всё ещё
7. Если другой процесс уже опубликовал ревизию8, переключение останавливается и ничего не перезаписывает. - После успешного переключения активная ревизия —
8. - Откат выбирает прежний проверенный снимок, но ставит ревизию
9. Старый запрос с ревизией7или8не вернёт страницу к устаревшему состоянию.
Кеш читают по отпечатку активного снимка. Изменение зависимости вызывает новую сборку, а не правку сохранённого результата.
Как это выполняют
Два типичных способа это выполнить:
- приложение с базой данных хранит несколько готовых снимков и отдельную запись об активном и перед чтением, переключением и откатом заново проверяет права;
- статический сайт роль активного снимка отдаёт всей сборке: сайт собирается во временном каталоге и заменяет прежний целиком только после полной проверки.