Эксперимент по созданию файловой системы, хранящей данные в кэше DNS

Под вдохновением от проекта PingFS, предпринята попытка создания более надёжной ФС — DNSFS. Как и PingFS проект DNSFS позиционируется как эксперимент, не рассчитанный на серьёзное использование.

В PingFS для хранения информации используется поле с данными в пакетах ICMP Echo — инициируется серия непрерывных операций ping, и каждый ответ синхронизирует примерно 1400 байт информации по аналогии с синхронизацией содержимого памяти (время жизни информации от отправки пакета до получения ответа). Но в случае остановки ping или потери пакета информация потеряется.

В DNSFS для хранения информации решено использовать кэш DNS. Для определения общедоступных резолверов было произведено сканирование всех IP-адресов сети при помощи пакета masscan, которое выявило почти 4 млн открытых DNS-резолверов, но повторная проверка показала, что 37.9% не пригодны для проекта, так как используют динамически выделяемые адреса. Дальнейшее изучение списка показало, что только 18% открытых резолверов могут хранить данные в кэше около суток. В итоге пригодными для проекта оказались 438 тысяч открытых резолверов.

Отслеживая время жизни записей и дублируя информацию можно добиться приемлемого уровня надёжности при достаточно редком цикле обновления информации (по сравнению с PingFS). В итоге можно получить полностью распределённое и независимое эфемерное хранилище. Для хранения было решено использовать TXT-записи в рассчёте 9 TXT-записей по 187 байт на каждый резолвер. Максимальный размер хранилища при такой разбивке составляет 250 Мб с учётом репликации данных как минимум на три разных резолвера. В текущем виде DNSFS оформлен в виде простого HTTP-интерфейса для загрузки и скачивания файла. Обновление состояния блоков пока не поддерживается, т.е. данные могут храниться не более суток.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.