Привет, Хабр.
Наверняка многие об этом задумывались, возможно, у кого-то есть такая идея в TODO. Он был у меня около года, но мне удалось реализовать его в виде рабочего прототипа.
ТгОблако:
- Виртуальная файловая система с открытым исходным кодом.
- На локальном диске есть только метаданные: имена, размер, структура папок и т.д.
- Данные хранятся в Telegram и загружаются только при работе с файлом.
- Размер и тип файла не ограничены, можно использовать с любой ОС.
Безлимитный сетевой диск.
Бесплатно" alt="Телеграмма.
Безлимитный сетевой диск.
Бесплатно">
Идея
Идея создать VFS на базе Telegram возникла во время работы надИ
- после того, как путь найден обойти ограничение на загрузку файлов в 50 МБ для ботов - Я изучал
Бесплатно"> Исходники телеграма
— обнаружил много интересного.
Например, скорость загрузки ограничена в основном на самом клиенте, а не на сервере.
В результате я увеличил скорость загрузки в облако Telegram до ~240 Мбит/с за сессию (стабильно работаю больше года), что в 15 раз превышает скорость официального клиента.
Логичным шагом было использовать в качестве сетевого диска безлимитное файловое хранилище с высокой скоростью загрузки — многие наверняка так делают, но проблема в том, что клиенты Telegram довольно неудобно использовать для поиска и систематизации файлов.
Кроме того, существует ограничение на размер одного файла в 1,5 ГБ.
ПРЕДОХРАНИТЕЛЬ
Чтобы решить эти проблемы, я сначала решил пропатчить ядро Linux и сделать свою виртуальную файловую систему, которая позволила бы мне удобно группировать файлы, загружаемые в Telegram, используя только метаданные.В процессе изучения вопроса выяснилось, что патчить ядро вовсе не обязательно.
в линуксе есть специальный
, что позволяет разработчикам создавать новые типы файловых систем, которые могут монтироваться непривилегированными пользователями.
Модуль имеет обертки практически для всех популярных языков.
Безлимитный сетевой диск.
Бесплатно" alt="Телеграмма.
Безлимитный сетевой диск.
Бесплатно">
Телемарафон
Для доступа к Telegram я использую библиотекумодифицированная мной версия 0.19.1 с многопоточной загрузкой файлов (TelegramClientX).
ВФС
Чтобы не писать файловую систему с нуля, мы взяли за основув питоне для хранения метаданных используется Fuse и sqlite, который разбивает файлы на блоки, вычисляет хэш sha1 и повторно использует одинаковые блоки — нужно просто заменить методы загрузки данных в хранилище на свои.
ТгКлауд
Собрав все это вместе, мы получили работающий прототип.
, пока без космических скоростей, но всё равно работает, надеюсь привлечь сообщество к разработке.
Скачанные файлы разбиваются на блоки по 10 МБ, вычисляется sha1 и загружается в SavedMessages, хеш сохраняется в локальной базе данных и при чтении блока файл находится в нем.
Блоки склеиваются в правильном порядке и выводится поток байтов — как если бы вы читали их с диска.
Чтобы запустить код
- Вам нужно включить api_hash и api_id.
и вставьте эти данные вместе с номером телефона вашей учетной записи в tg_access.py. - Создайте сеанс, запустив его из папки проекта.
python3.6 download_service.py
- Установить
sudo yum install python-fuse
- Создать папку монтирования
mkdir storage
- Запускаем ВФС:
с отладкой
python dedupfs/dedupfs.py -df --block-size 10240000 storage/
на заднем фонеpython dedupfs/dedupfs.py --block-size 10240000 storage/
- Вы можете, например, указать эту папку в качестве источника для
P.S. Об этической стороне (с.
Комментарии ) Другой вариант — снизить скорость на стороне сервера, ограничить количество потоков загрузки и т. д. — способов ограничить потребление диска, не «прикрывая магазин», достаточно, но даже при уменьшенной скорости — наличие дополнительного уровня абстракция над загружаемыми данными невероятно удобна, когда можно систематизировать файлы не только внутри чатов и каналов, но и потому, что это удобно пользователю — когда наоборот — будет загружено меньше данных за счет повторного использования блоков.
Если в текущей системе мне нужно отредактировать скачанный текстовый документ, я его скачиваю, редактирую и снова скачиваю, при этом 90% данных дублирует уже скачанное, а при использовании VFS - только измененные блоки будет загружен снова.
То есть для обычных пользователей это вообще хорошая вещь, если кто-то решит использовать это для размещения порно - ну пусть с ними как-то борются, это философия Telegram - что "даже если небольшое количество людей этим пользуется" за плохие поступки это не значит, что все это надо запретить и т. д. и т. п.
».
Бесплатно"> Мой Telegram-канал
Бесплатно"> Исходники на GitHub
На
Доступны новейшие конфигурации двухпроцессорных выделенных серверов с масштабируемыми процессорами Intel 2019 года:
- 2x Xeon Silver 4214 — всего 24 ядра
- 2x Xeon Gold 5218 — всего 32 ядра
- 2x Xeon Gold 6240 — 36-ядерная конфигурация.
Мы также готовы собрать для вас любая конфигурация —
! Если не требуются большие мощности выделенного сервера -
Бесплатно"> VDS от 150 руб/мес.
- что вам нужно! Теги: #python #github #облачные сервисы #Хранение данных #Лайфхаки для гиков #Telegram #FUSE #облачное хранилище #vfs #файловая система
-
Каким Был Ваш Последний Завершенный Проект?
19 Dec, 24 -
Методы Оптимизации Вашей Работы В Интернете
19 Dec, 24