VIZ.cx
on1x posted note :
Как же хочется построить что-то в DePin... VizHub которые описывал в свое время идеально в это ложатся. Узлы, которые обслуживают юзеров и берут service fee с пользователя. Хранение файлов, тарификация переданных данных (сетевой трафик), роутинг сообщений, api с своей ценой CPU. Все это выглядит очень вкусно. Но как только начинаешь смотреть на технологии, как видишь, что не хватает некоторого софта. Ключевая вещь, как учет трафика - ложится не понятно на кого. Вот есть файл в 10 Мегабайт. Он хранится в Хабе от пользователя А. Юзер дал ссылку на него где-нибудь в сети и народ начал качать, создавая нагрузку. Хаб должен тарифицировать всю сетевую нагрузку и, условно, взять 0.1 виз за одно скачивание. Факт скачивания можно записывать в логи того же nginx. Но вот фиксировать частичные загрузки уже не получается. Прервали скачивание, как ты поймешь сколько трафика передано? В nginx есть модули. И есть даже отдельная сборка с поддержкой языка lua в конфигах. Именно через него можно написать учет переданных байт с логированием раз в 5 секунд, например. Но это настолько усложняет весь хаб... Плюс к этому надо еще ограничивать скорость скачивания с каждого ip адреса, чтобы распределять нагрузку на всех участников хаба. Один супер активный участник может тормозить удобство остальных (как в shared хостинге). Вот и приходится делать специфичные вещи. Сам LUA в одиночку это не сделает. Надо проксировать запрос в nodejs сервер, который будет подсчитывать логи, трафик и ограничивать юзера, выдавая нужный rate_limit через заголовок upstream_http_x_rate_limit, проброшенный через директиву auth_request. Логи падают в файл постоянно, файл должен считываться постоянно, очищая старые записи, не допуская появления и обработки дублей или пропусков. Сборка nginx + lua модуль есть от https://openresty.org/en/linux-packages.html#ubuntu, но ручная сборка сложное дело. Все это надо делать через контейнеры: https://hub.docker.com/r/openresty/openresty А это приводит к необходимости сразу вести всю разработку контейнеризованной :D

Comments