Удалённый доступ к архиву¶
media.dvr.remote
Sapsan объединяет записи одного стрима, лежащие на разных серверах кластера, в общий доступный зрителю архив. Стример, обслуживающий запрос, находит нужный фрагмент у соседей и получает его по сети. Плееру не требуется знать, какой сервер записал выбранный момент и на каком диске он хранится.
Это позволяет переносить камеру между стримерами, сохраняя доступ к её истории. Старые записи продолжают храниться на прежнем сервере, новые появляются на новом. Предварительное копирование архива для объединения истории не требуется.
Камера перенесена, прежний сервер вернулся¶
Предположим, камера cam1 записывалась на стримере A. После его отказа захват и запись продолжились на стримере B. Позже A отремонтировали и вернули в кластер с сохранившимися дисками.
| Этап | Где лежат записи | Как доступен архив |
|---|---|---|
| Камера записывается на A | На A | Запросы читают архив A. |
| A недоступен, камера записывается на B | Прошлая история на A, новая на B | Доступны записи B и другие имеющиеся доступные копии. |
| A вернулся и включён в раздачу остатков | Прошлая история остаётся на A, новая — на B | Просмотр получает нужные фрагменты с обоих серверов как историю одного стрима. |
После возврата A не нужно ждать, пока вся его история скопируется на B. Кластер использует сохранившиеся записи на месте: при запросе старого момента читает фрагменты A, при запросе нового — фрагменты B. На A для этого не требуется заново подключать камеру или продолжать запись.
Так же работает плановый перенос: прежний стример может сразу остаться в кластере как источник старого архива. Если камера последовательно записывалась на нескольких серверах, история может состоять из записей каждого из них.
Как кластер находит прежние записи¶
Central учитывает, на каких стримерах есть архив стрима. После переноса сохранившийся на прежней машине архив обслуживается назначением раздачи остатков архива — dvr_parts.
Это назначение оставляет стрим на сервере для чтения уже записанного. Оно не захватывает источник и не создаёт новую запись, но позволяет другим стримерам запрашивать его фрагменты. Хранение продолжает подчиняться глубине архива стрима.
Central формирует связи с архивными серверами и обеспечивает авторизацию запросов между стримерами. Для переноса камеры не требуется вручную составлять для зрителя новый список адресов её прошлых серверов.
Возвращённый стример должен снова участвовать в работе кластера и подходить для раздачи остатков. В частности, учитываются неймспейс и теги стрима, а также доступный внутрикластерный адрес. Если архиву назначена только dvr_cleanup, он очищается по правилам хранения, но не включается в удалённое чтение. Условия назначения описаны в остатках архива, адреса — в управлении стримерами.
Единая адресация фрагментов¶
Фрагмент определяется именем стрима, дорожкой и целочисленной временной меткой с её timescale. Его адрес не зависит от физического диска и сервера записи. Подробнее — в адресации архива.
Поэтому запрос «фрагмент камеры cam1 за выбранное время» сохраняет смысл после переноса камеры. Меняется сервер, с которого поступят байты, а не идентичность самой записи.
При построении ответа Sapsan выполняет несколько действий:
- Объединяет диапазоны — собирает доступные интервалы локального и удалённых архивов. Реальные промежутки без записи сохраняются: объединение не превращает их в записанное видео.
- Собирает списки фрагментов — объединяет результаты серверов, упорядочивает их по времени и убирает повторения одного и того же фрагмента.
- Читает данные — использует доступный локальный источник либо получает нужный фрагмент с удалённого стримера вместе с информацией, необходимой для его воспроизведения.
Для плеера архив остаётся архивом того же стрима. Переход между серверами хранения обрабатывает Sapsan; клиенту не нужно самостоятельно объединять отдельные архивы A и B.
Доступ без предварительного переноса данных¶
Объединение истории не требует задания на перенос всего архива, дополнительного места под полную копию на новом сервере или повторной записи старого видео. Стримеры передают запрошенные данные по мере чтения. Возврат большого архива в доступ не зависит от времени, которое заняло бы его полное копирование.
При этом удалённое чтение может взаимодействовать с двумя другими возможностями:
- Репликация архива — создаёт локальные копии. В текущем тракте стример с настроенной записью DVR и архивными дисками может сохранять прочитанные удалённые фрагменты в собственный архив. Такая ленивая репликация не является предварительным условием доступа к истории.
- Кэш архива — сохраняет прочитанные данные на кэш-дисках для повторных обращений и сокращения сетевой нагрузки.
Поэтому отсутствие обязательной миграции не означает запрет на любые локальные копии при просмотре. Прозрачный доступ позволяет использовать архив там, где он уже находится; репликация и кэширование дополнительно меняют размещение прочитанных данных.
Доступность истории¶
Доступен тот материал, который сохранился в архиве и находится на доступном источнике. Пока единственный сервер со старым участком выключен, этот участок нельзя прочитать с его дисков по сети. После возврата сервера и восстановления его участия в раздаче записи снова включаются в общую историю — в пределах оставшегося срока хранения.
Для доступа к записям и во время отказа сервера нужны доступные копии архива. Удалённое чтение использует такие копии, но само не создаёт отсутствующую запись и не восстанавливает промежуток, в котором камеру никто не записывал.
После переноса и возврата сервера проверьте:
- Сохранено имя того же стрима: архив связан с его идентичностью, а не только с адресом камеры.
- Прежний сервер виден в кластере и получил назначение раздачи остатков для этого стрима.
- Его внутрикластерный адрес доступен другим стримерам, а межсерверная авторизация работает.
- В истории отображаются прежние и новые интервалы, и воспроизводятся моменты по обе стороны переноса.
Настройка записи описана в DVR, выбор времени просмотра — в проигрывании архива.