Назначение системы Поддержка удаленного доступа к файлам на компьютерах в сети.
Система «виртуально» поддерживает все основные файловые операции (создание, удаление, чтение, запись и т.д.) путем обмена транзакциями (сообщениями) по протоколу TCP.
Области использования
Функционал системы эффективен в следующих случаях:- в нативных приложениях для мобильных и встраиваемых устройств (смартфонов, бортовых систем управления и т.п.
), требующих быстрого доступа к файлам на удаленных серверах в условиях возможных временных перебоев связи (с выходом в оффлайн);
- в загруженных СУБД, если обработка запросов осуществляется на одних серверах, а хранение данных – на других;
- в распределенных корпоративных сетях сбора и обработки информации, требующих высокой скорости обмена данными, резервирования и надежности;
- в сложных системах с микросервисной архитектурой, где задержки при обмене информацией между модулями критичны.
Состав
Система Cage (есть реализация — бета-версия на Python 3.7 под Windows) включает в себя две основные части:- Кейджсервер — программа файлового сервера (пакет функций), работающая на компьютерах сети, к файлам которых требуется удаленный доступ;
- Сорт Клетка с библиотекой методов клиентского ПО, упрощающей кодирование взаимодействия с серверами.
Использование системы на стороне клиента
Методы класса Cage заменяют обычные, «рутинные» операции с файловой системой: создание, открытие, закрытие, удаление файлы, а также чтение/запись данных в двоичном формате (с указанием положения и размера данных).Концептуально эти методы близки файловым функциям языка Си, где открытие/закрытие файлов осуществляется «по каналам» ввода/вывода.
Другими словами, программист не работает с методами «файловых» объектов (класса _io в Python), но с методами класса Cage. При создании экземпляра объекта Cage он устанавливает первоначальное соединение с сервером (или несколькими серверами), авторизуется по идентификатору клиента и получает подтверждение с выделенным номером порта для всех файловых операций.
Когда объект Cage удаляется, он дает серверу указание прекратить связь и закрыть файлы.
Прекращение связи также может быть инициировано самими серверами.
Система повышает производительность чтения/записи за счет буферизации часто используемых фрагментов файлов клиентских программ в кэше (буфере) оперативной памяти.
Клиентское ПО может использовать любое количество объектов Cage с разными настройками (размер буферной памяти, размер блока при обмене с сервером и т.д.).
Один объект Cage может взаимодействовать с несколькими файлами на нескольких серверах.
Параметры связи (IP-адрес или DNS-сервер, основной порт для авторизации, путь и имя файла) указываются при создании объекта.
Поскольку каждый объект Cage может работать с несколькими файлами одновременно, для буферизации используется общее пространство памяти.
Размер кэша — количество страниц и их размер, задается динамически при создании объекта Cage. Например, кэш объемом 1 ГБ — это 1000 страниц по 1 МБ, или 10 тысяч страниц по 100 КБ, или 1 миллион страниц по 1 КБ.
Выбор размера и количества страниц — индивидуальная задача для каждого случая применения.
Вы можете использовать несколько объектов Cage одновременно, чтобы определить различные настройки буферной памяти в зависимости от того, как осуществляется доступ к информации в разных файлах.
В качестве базового используется простейший алгоритм буферизации: после исчерпания заданного объема памяти новые страницы вытесняют старые по принципу выбытия с минимальным количеством обращений.
Буферизация особенно эффективна в случае неравномерного (в статистическом смысле) совместного доступа, во-первых, к разным файлам, а, во-вторых, к фрагментам каждого файла.
Класс Cage поддерживает ввод-вывод не только по адресам данных (указывающим положение и длину массива, «заменяющим» операции файловой системы), но и на более низком, «физическом» уровне — по номерам страниц в буферной памяти.
Исходная функция поддерживается для объектов Cage. "спячка" («сон») — их можно «свернуть» (например, в случае потери связи с серверами, или при остановке приложения и т.п.
) в локальный файл дампа на стороне клиента и быстро восстановить из этот файл (после возобновления связи, при перезапуске приложения).
Это дает возможность существенно снизить трафик при активации клиентской программы после временного перехода в «оффлайн», поскольку часто используемые фрагменты файлов уже будут находиться в кэше.
Cage — это около 3600 строк кода.
Принципы построения сервера
Файловые серверы Cageserver могут запускаться с произвольным количеством портов, один из которых («основной») используется только для авторизации всех клиентов, остальные используются для обмена данными.Для программы сервера Cage требуется только Python. Параллельно компьютер с файловым сервером может выполнять любую другую работу.
Сервер изначально запускается как совокупность двух основных процессов:
- «Соединения» – процесс выполнения операций установления связи с клиентами и прекращения ее по инициативе сервера;
- «Операции» – процесс выполнения задач (операций) клиентов по работе с файлами, а также закрытия сеансов связи по командам клиента.
Процесс подключения выделяет порт для каждого клиента для приема и передачи данных.
Количество портов задается при запуске сервера.
Сопоставление между портами и клиентами хранится в общей памяти прокси-сервера между процессами.
Процесс операций поддерживает совместное использование файловых ресурсов, чтобы несколько разных клиентов могли совместно использовать ( квазипараллельный , поскольку доступ контролируется блокировками) читать данные из одного файла, если это было разрешено при его первоначальном открытии «первым» клиентом.
Обработка команд создания/удаления/открытия/закрытия файлов на сервере осуществляется в самом процессе «Операции» строго последовательно с использованием файловой подсистемы серверной ОС.
Чтобы в целом ускорить чтение/запись, эти операции выполняются в потоках, порожденных процессом «Операции».
Количество потоков обычно равно количеству открытых файлов.
Задачи чтения/записи от клиентов передаются в общую очередь, и первый свободный поток забирает задачу из ее головы.
Специальная логика позволяет исключить операции перезаписи данных в оперативной памяти сервера.
Процесс Operations отслеживает активность клиентов и прекращает их обслуживание либо по их командам, либо при превышении времени ожидания бездействия.
Для обеспечения надежности Cageserver ведет журналы всех транзакций.
В одном общем журнале хранятся копии сообщений от клиентов с задачами по созданию/открытию/переименованию/удалению файлов.
Для каждого рабочего файла создается отдельный журнал, в который записываются копии сообщений с заданиями на чтение и запись данных в этот рабочий файл, а также массивы записанных (новых) данных и массивы данных, уничтоженных при перезаписи (записи).
новые данные «поверх» старых).
).
Эти журналы предоставляют возможность как восстанавливать новые изменения в резервных копиях, так и «откатывать» от текущего содержимого к желаемому моменту в прошлом.
Cageserver — это около 3100 строк кода.
Запуск программы файлового сервера Cageserver
При запуске в диалоге необходимо определить: — основной порт авторизации; — количество портов для обмена транзакциями с авторизованными клиентами (от 1 и более, пул номеров начинается со следующего за основным номером порта).
Использование класса Cage
сорт клетка.Клетка ( Cage_name="",pagesize=0, numpages=0, maxstrlen=0, server_ip={}, wait=0, пробуждение=False,cache_file="" ) Из этого класса создаются объекты, которые взаимодействуют с файловыми серверами и содержат буферную память.
Параметры
- имя_клетки ( ул.
) - условное имя объекта, которое используется для идентификации клиентов на стороне сервера
- размер страницы ( интервал ) — размер одной страницы буферной памяти (в байтах)
- число страниц ( интервал ) — количество страниц буферной памяти
- Максстрлен ( интервал ) — максимальная длина строки байтов при операциях записи и чтения.
- server_ip ( диктовать ) — словарь с адресами используемых серверов, где ключом является условное имя сервера (id сервера внутри приложения), а значением — строка с адресом: «ip адрес:порт» или «DNS: порт» (сравнение имен и реальных адресов временное, его можно изменить)
- ждать ( интервал ) — время ожидания ответа от сервера при получении портов (в секундах)
- бодрствующий ( логическое значение ) — флаг того, как создан объект ( ЛОЖЬ - если создается новый объект, Истинный - если объект создается из ранее «свернувшегося» - с использованием операции «гибернации», по умолчанию False)
- кэш_файл ( ул.
) - имя файла для гибернации
file_create ( сервер, путь ) – создать новый файл Клетка.
file_rename ( сервер, путь, новое_имя ) – переименовать файл Клетка.
file_remove ( сервер, путь ) - удалить файл Клетка.
открыть ( сервер, путь, мод ) - открыть файл Возврат fканал номер канала.
Параметр мод - это режим открытия файла: "wm" - эксклюзивный (чтение/запись), "rs" - только для чтения и общий доступ только для чтения другими клиентами, "ws" - чтение/запись и общий доступ только для чтения другие клиенты.
Клетка.
закрывать ( fchannel ) – закрыть файл Клетка.
писать ( fchannel, начало, данные ) – записать строку байтов в файл Клетка.
читать ( fchannel, начало, len_data ) – прочитать строку байтов из файла Клетка.
put_pages ( fchannel ) — «проталкивает» из буфера на сервер все страницы указанного канала, которые были изменены.
Он используется в тех точках алгоритма, когда нужно быть уверенным, что все операции на канале физически сохраняются в файле на сервере.
Клетка.
push_all () — «проталкивает» из буфера на сервер все страницы всех каналов экземпляра класса Cage, которые были модифицированы.
Используется, когда нужно быть уверенным, что все операции по всем каналам сохраняются на сервере.
Теги: #python #it-инфраструктура #Хранение данных #Параллельное программирование #удаленное управление #файловый сервер #файловая система #совместное использование файлов #API файловой системы
-
Mozilla Намного Медленнее Ie6
19 Oct, 24 -
Как Мы Строили Авиасимулятор: Бесценный Опыт
19 Oct, 24 -
1000 Страниц По 10 Постов!
19 Oct, 24