Система Удаленного Доступа К Файлам Cage



Назначение системы Поддержка удаленного доступа к файлам на компьютерах в сети.

Система «виртуально» поддерживает все основные файловые операции (создание, удаление, чтение, запись и т.д.) путем обмена транзакциями (сообщениями) по протоколу TCP.



Области использования

Функционал системы эффективен в следующих случаях:
  • в нативных приложениях для мобильных и встраиваемых устройств (смартфонов, бортовых систем управления и т.п.

    ), требующих быстрого доступа к файлам на удаленных серверах в условиях возможных временных перебоев связи (с выходом в оффлайн);

  • в загруженных СУБД, если обработка запросов осуществляется на одних серверах, а хранение данных – на других;
  • в распределенных корпоративных сетях сбора и обработки информации, требующих высокой скорости обмена данными, резервирования и надежности;
  • в сложных системах с микросервисной архитектурой, где задержки при обмене информацией между модулями критичны.



Состав

Система Cage (есть реализация — бета-версия на Python 3.7 под Windows) включает в себя две основные части:
  1. Кейджсервер — программа файлового сервера (пакет функций), работающая на компьютерах сети, к файлам которых требуется удаленный доступ;
  2. Сорт Клетка с библиотекой методов клиентского ПО, упрощающей кодирование взаимодействия с серверами.



Использование системы на стороне клиента

Методы класса 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. Параллельно компьютер с файловым сервером может выполнять любую другую работу.

Сервер изначально запускается как совокупность двух основных процессов:

  1. «Соединения» – процесс выполнения операций установления связи с клиентами и прекращения ее по инициативе сервера;
  2. «Операции» – процесс выполнения задач (операций) клиентов по работе с файлами, а также закрытия сеансов связи по командам клиента.

Оба процесса не синхронизированы и организованы как бесконечные циклы приема и отправки сообщений на основе многопроцессных очередей, прокси-объектов, блокировок и сокетов.

Процесс подключения выделяет порт для каждого клиента для приема и передачи данных.

Количество портов задается при запуске сервера.

Сопоставление между портами и клиентами хранится в общей памяти прокси-сервера между процессами.

Процесс операций поддерживает совместное использование файловых ресурсов, чтобы несколько разных клиентов могли совместно использовать ( квазипараллельный , поскольку доступ контролируется блокировками) читать данные из одного файла, если это было разрешено при его первоначальном открытии «первым» клиентом.

Обработка команд создания/удаления/открытия/закрытия файлов на сервере осуществляется в самом процессе «Операции» строго последовательно с использованием файловой подсистемы серверной ОС.

Чтобы в целом ускорить чтение/запись, эти операции выполняются в потоках, порожденных процессом «Операции».

Количество потоков обычно равно количеству открытых файлов.

Задачи чтения/записи от клиентов передаются в общую очередь, и первый свободный поток забирает задачу из ее головы.

Специальная логика позволяет исключить операции перезаписи данных в оперативной памяти сервера.

Процесс Operations отслеживает активность клиентов и прекращает их обслуживание либо по их командам, либо при превышении времени ожидания бездействия.

Для обеспечения надежности Cageserver ведет журналы всех транзакций.

В одном общем журнале хранятся копии сообщений от клиентов с задачами по созданию/открытию/переименованию/удалению файлов.

Для каждого рабочего файла создается отдельный журнал, в который записываются копии сообщений с заданиями на чтение и запись данных в этот рабочий файл, а также массивы записанных (новых) данных и массивы данных, уничтоженных при перезаписи (записи).

новые данные «поверх» старых).

).

Эти журналы предоставляют возможность как восстанавливать новые изменения в резервных копиях, так и «откатывать» от текущего содержимого к желаемому моменту в прошлом.

Cageserver — это около 3100 строк кода.



Система удаленного доступа к файлам Cage



Запуск программы файлового сервера 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 файловой системы

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.