data backup service. Презентация участников
TRANSCRIPT
Data backup service
Студент: Ильдус КучкаровРуководитель: Евгений Баталов
Идея проекта
Приложения-клиенты, работающие на пользовательских устройствах, отправляют данные на сервер для резервного копирования
Приложение-сервер принимает резервные копии от клиентов и сохраняет их
При восстановлении пользовательского устройства, приложение-клиент запрашивает у приложения-сервера данные пользователя, получает их и разворачивает на устройстве
2/18
О проекте
● Учебный проект
● На начало семестра реализованы:○ Библиотека для работы с деревом ФС
○ Библиотека для архивации и деархивации дерева ФС
○ Основы клиента и сервера
■ Отправка архива на сервер
■ Скачивание архива с сервера
■ Получение списка архивов
● Язык программирования: С++ (QT)
3/18
Задачи практики
● Печать дерева ФС из архива
● Консольное приложение для работы с архивами
● Memory mapped files
● Многопоточный сервер
● Авторизация на сервере
4/18
Проблема #0
Работа с бинарными данными Сложно найти ошибку⇒
5/18
Логирование
6/18
(Ручное) тестирование и отладка отдельных модулей
Тут и нужны:
● Печать дерева ФС из архива
● Консольное приложение для работы с архивами
7/18
Проблема #1
Архиватор собирает архив в памяти: не хватает ОЗУ ⇒
8/18
Проблема #1
Архиватор собирает архив в памяти: не хватает ОЗУ ⇒
9/18
Memory mapped files
Отображение файла в память — это способ работы с файлами в некоторых операционных системах, при котором всему файлу или некоторой непрерывной его части ставится в соответствие определённый участок адресов памяти процесса. При этом чтение данных из этих адресов фактически приводит к чтению данных из отображенного файла, а запись данных по этим адресам приводит к записи этих данных в файл.
10/18
Преимущества Memory mapped files
● Нет лишних копий данных в памяти процесса
● ОС управляет выделением физической памяти для содержимого файла
● Максимальный размер файла ограничен величиной адресного пространства процесса
11/18
Проблема #2
● До:
○ QEventLoop
○ Один поток
○ Один пользователь – одна сессия
12/18
Многопоточный сервер
● До:
○ QEventLoop
○ Один поток
○ Один пользователь – одна сессия
● Сейчас:
○ QEventLoop + QThread
○ UserDataHolder
○ QReadWriteMutex
13/18
Пользователи и их авторизация
База данных пользователей хранится на диске в файле и загружается в память при запуске.
Поддержка авторизованного соединения (сессии): QTcpSocket
Один пользователь – несколько сессий
14/18
Архитектура приложений
Серверная логика
Данные пользователей
Сессии пользователя
#2
Клиент #1
Клиент #2
Клиент #3
Сессии пользователя
#1
15/18
Архиватор и деархиватор: дальнейшая работа
● Поддержка инкрементального резервного копирования
● Сжатие
16/18
Сервер: дальнейшая работа
● Безопасность
● Использование БД для хранения метаинформации вместо использования файла (для масштабируемости)
● Дедупликация данных внутри архивов
17/18
Выводы
● Изучены основы работы с mmap files, threads & mutex, основы разработки архитектуры приложения
● https://github.com/eabatalov/spbau-data-backup
18/18