-
Notifications
You must be signed in to change notification settings - Fork 11
VUFS Use Cases (Release 1.0)
Michael Latushko edited this page Aug 30, 2017
·
1 revision
Snapshot - это множество всех файлов существующих на в данный момент времени на VUFS, представленное ввиде ациклического древовидного графа. При этом версионирование файлов не поддерживается, т.е. виртуальные файлы не поддерживают версионирование своих chunk'ов.
Технологические сценарии:
- Создание файла на VUFS
- Удаление файла на VUFS
- Модификация файла на VUFS
- Создание директории на VUFS
- Удаление директории на VUFS
- Модификация директории на VUFS
- Создание Snapshot VUFS
- Создание diff между Snapshot VUFS на локальном хранилище и текущем Snapshot VUFS на облаке
- Мониторинг изменений файловой структуры на облаке
- Мониторинг ресурсов облачных хранилищ (потребленное место под VUFS, общее доступное пространство).
- Мониторинг доступности облачных хранилищ (пинг от клиента до облака, статистика о скорости загрузки и скачивания)
Бизнес сценарии:
- Запуск клиента с пустой VUFS и пустым локальным хранилищем
- Запуск клиента с пустой VUFS и локальным хранилищем содержащим файловую структуру
- Запуск клиента с VUFS содержащей файловыю структуру и пустым локальным хранилищем
- Запуск клиента с VUFS содержащей файловыю структуру и локальным хранилищем содержащим файловую структуру
- Настройка стратегии резервирования для директории
- Предоставление доступа другим пользователям к директории используя magic-ссылку
- Предоставление доступа другим пользователям к директории используя профили пользователей в сервисе ariADDna
- Настройка прав чтения\записи на директории для конкретного пользователя (не owner'a)
- Ребалансировка VUFS при отказе в обслуживании части облачных хранилищ
- на клиенте сервис local-storage детектировал создание файла
- на клиенте передать команду создание данного файла на сервер
- сервер помечает файл как создаваемый и передает метаинформацию для этого VUFS пути (стратегия резирвирования и размер chunk'а)
- клиент извлекает метаинформацию
- клиент делит файл на части указанного размера (остаток добивается нулями)
- передать с клиента на облачные хранилища команды создания chunk'ов
- на клиенте собрать статистику по операциям с облачными хранилищами (время выполнения команды, число ошибок, число операций)
- отправить с клиента на сервер подтверждение о создании файла и статистику по операциям.
- на клиенте сервис local-storage детектировал удаление файла
- на клиенте передать команду удаления данного файла на сервер
- сервер помечает файл как удаляемый и передает метаинформацию по нему клиенту
- клиент извлекает из метаинформации адреса всех chunk'ов
- передать с клиента на облачные хранилища команды удаления chunk'ов
- на клиенте собрать статистику по операциям с облачными хранилищами (время выполнения команды, число ошибок, число операций)
- отправить с клиента на сервер подтверждение о удаление файла и статистику по операциям.
- на клиенте сервис local-storage детектировал изменение файла
- на клиенте передать команду изменения данного файла на сервер
- сервер помечает файл как изменяемый и передает метаинформацию для этого VUFS пути (стратегия резирвирования и размер chunk'а)
- клиент извлекает из метаинформации адреса всех старых chunk'ов
- клиент вычисляет хеш для изменненного файла в локальном хранлище и сравнивает его с хешем в метаинформации. Если они не совпадают продолжаем.
- клиент делит файл на части указанного размера (остаток добивается нулями)
- передать с клиента на облачные хранилища команды создания новых chunk'ов
- передать с клиента на облачные хранилища команды удаления старых chunk'ов
- на клиенте собрать статистику по операциям с облачными хранилищами (время выполнения команды, число ошибок, число операций)
- отправить с клиента на сервер подтверждение о изменении файла и статистику по операциям.
- на клиенте сервис local-storage детектировал создание директории
- клиент передает на сервер команду создания пустой директории в VUFS
- сервер помечает директорию как создаваемую и передает метаинформацию для этого VUFS пути (стратегия резирвирования и размер chunk'а для файлов принадлежащих этой директории)
- клиент извлекает метаинформацию
- клиент читает список новых файлов в директории на локальном хранилище и последовательно создает каждый из них (см. Создание файла на VUFS)
- после создания каждого файла клиент регистрирует его в на сервере как принадлежащий создаваемой директории
- на клиенте сервис local-storage детектировал удаление директории
- клиент передает на сервер команду удаления директории в VUFS
- сервер помечает директорию как удаляемую и передает метаинформацию для этого VUFS пути (список фалов в директории, стратегия резирвирования и размер chunk'а для файлов принадлежащих этой директории)
- клиент извлекает метаинформацию
- клиент читает список файлов в директории (из мета информации) и последовательно удаляет каждый из них (см. Удаление файла на VUFS)
- после удаления каждого файла клиент регистрирует его удаление на сервере из удаляемой директории
- на клиенте сервис local-storage детектировал изменение директории
- клиент читает текущий список файлов в директории
- клиент передает на сервер команду изменения директории в VUFS
- сервер помечает директорию как изменяемую и передает метаинформацию для этого VUFS пути (список фалов в директории, стратегия резирвирования и размер chunk'а для файлов принадлежащих этой директории)
- клиент извлекает метаинформацию и сравнивает список файлов на локальном хранилище и VUFS
- если файла нет в локальном хранилище, но он есть в VUFS, то клиент последовательно удаляет эти файлы (см. Удаление файла на VUFS)
- если файл есть на локальном хранилище, но его нет в VUFS, то клиент последовательно добавляет эти файлы (см. Создание файла на VUFS)
- если файл есть на локальном хранилище, но он есть в VUFS, то клиент последовательно изменяет эти файлы (см. Модификация файла на VUFS)
- клиент запрашивает полный Snapshot VUFS.
- сервер отправляет объект представляющий ациклический древовидный граф всей VUFS (сериализуется в JSON)
- см. Создание Snapshot VUFS
- создание локального Snapshot VUFS (аналогичная процедура как на сервере)
- сравнение двух ациклических графов
- получение diff (набор ациклических древовидных графов с корнями в узлах последних в пути VUFS существующих директориях)
(если облачное хранилище не может уведомлять об изменении структуры, то запуск происходит по планировщику)
- клиент запрашивает с сервера Snapshot VUFS
- клиент проходиться по древовидному графу и для каждого его листа (файла) проверяет наличие ео chunk'ов на облачных хранилищах
- клиент передает результаты проверки на сервер
10) Мониторинг ресурсов облачных хранилищ (потребленное место под VUFS, общее доступное пространство).
- сервер агрегирует статистику от клиентов (храниться в БД) и строит для каждого клиента стат данные о доступных ресурсах на облачных хранилищах и потребленной емкости
11) Мониторинг доступности облачных хранилищ (пинг от клиента до облака, статистика о скорости загрузки и скачивания)
- сервер агрегирует статистику от клиентов (храниться в БД) и строит для каждого клиента стат данные о доступности облачных хранилищ и скорости операций с ними
- клиент запрашивает с сервера Snapshot VUFS
- сервер отвечает что VUFS пуста
- клиент переходит к старту остальных сервисов и ожиданию либо команды с сервера либо изменений в локальном файловом хранилище
- клиент запрашивает с сервера Snapshot VUFS
- сервер отвечает что VUFS пуста
- клиент получает список директории в локальном хранилище
- клиент начинает последовательно создавать директории на VUFS (см. Создание директории на VUFS)
- клиент переходит к старту остальных сервисов и ожиданию либо команды с сервера либо изменений в локальном файловом хранилище
- клиент запрашивает с сервера Snapshot VUFS
- клиент проходиться по древовидному графу и для каждого его листа (файла) выполняет загрузку в локальное хранилище если в метаинформации стоит признак синхронизации
- клиент переходит к старту остальных сервисов и ожиданию либо команды с сервера либо изменений в локальном файловом хранилище
4) Запуск клиента с VUFS содержащей файловыю структуру и локальным хранилищем содержащим файловую структуру
- клиент запрашивает с сервера Snapshot VUFS
- сервер передает Snapshot VUFS
- клиент получает diff структуру и создает новые файлы и директории, удаляет старые и изменяет существующие (см Создание diff между Snapshot VUFS на локальном хранилище и текущем Snapshot VUFS на облаке)
- клиент переходит к старту остальных сервисов и ожиданию либо команды с сервера либо изменений в локальном файловом хранилище
- пользователь выбрал директорию (в корне VUFS) и установил/сменил для нее стратегии резервирования
- клиент отправляет на сервер смену стратегии резервирования для пути VUFS
- сервер отмечает что меняется стратегия и возвращает клиенту текущую старую метаинформацию
- из метаинформации клиент узнает текущую стратегию и принимает решение что нужно сделать:
- union->mirror - добавить еще одну копию для каждого chunk на другом облачном хранилище
- mirror->high - добавить еще одну копию для каждого chunk на другом облачном хранилище
- high->mirror - удалить одну копию для каждого chunk на другом облачном хранилище
- mirror->union - удалить одну копию для каждого chunk на другом облачном хранилище
- union->high - добавить две копии для каждого chunk на другом облачном хранилище
- high->union - удалить две копии для каждого chunk на другом облачном хранилище удаление происходит со стасистически самого медленного облачного хранилища для пользователя добавление происходит на стасистически самое быстрое облачное хранилище для пользователя
- клиент отвечает серверу что смена стратегии прошла успешно и отдает статистику
- пользователь выбрал директорию (необязательно в корне VUFS) и нажал "открыть доступ по ссылке"
- клиент передает на сервер что этот путь в VUFS может быть доступен другим пользователям перешедшим по ссылке
- сервер отмечает это в своей БД, сгенерирует псевдослучайный хеш и передаст клиенту
- клиент покажет хеш как часть url например htpps://ariaddna.stnetix.com/share?id=<хеш на базе ID владельца ресурса>&h=<хеш доступа> При заходе на этот Url должен открыться web ui для загрузки файлов из указанной директории. В клиенте ariADDna тоже можно внести функционал добавления доступных по ссылке директорий. В VUFS пользователя которому открыли доступ появляется путь /shared/<email владельца>/<имя директории>
7) Предоставление доступа другим пользователям к директории используя профили пользователей в сервисе ariADDna
- пользователь выбрал директорию (необязательно в корне VUFS) и нажал "открыть доступ пользователю"
- клиент предлагает пользователю строку поиска для ввода email пользователя зарегистрированного в сервере ariADDna
- пользователь выбирает из выподающего списка email пользователя зарегистрированного в сервере ariADDna (можно добавить более одного)
- для каждого пользователя владелец выставляет права: чтение, запись.
- клиент передает на сервер что этот путь в VUFS может быть доступен указанному пользователю
- сервер отмечает это в своей БД, передает оповещение пользователю которому открыли доступ (также извещает его на email) В VUFS пользователя которому открыли доступ появляется путь /shared/<email владельца>/<имя директории>
- Мониторинг изменений файловой структуры на облаке на сервере информирует об изменении структуры или нотификацию генерирует сам сервер
- клиент запрвшивает полный Snapshot VUFS
- клиент проходиться по древовидному графу и для каждого его листа (файла) выполняет проверку наличия его chunk'ов на всех указанных в метаинформации облаках
- в случае отсутствия chunk'a на облачном хранилище клиент создает его
- для каждого файла клиент после его проверки на облаке клиент отдает результат и статистику на сервер
- Мониторинг доступности облачных хранилищ на сервере информирует об "падении облака"
- сервер изменяет метаинформацию в стратегии хранения подставляя вместо "упавшего облака" наиболее статистически доступное
- сервер извещает клента о изменений файловой структуры на облаке
© 2018, ariADDna project