Сейчас основных направлений работ и экспериментов три, все более-менее, так или иначе, связаны друг с другом:
1. Новый редактор и переход на Markdown.
2. Перевод файловых архивов на IPFS.
3. Распределение форумов по условно независимым хостингам в рамках Infonesy.
При работе над редактором стою на вопросе аплоада аттачей и «разворачивании» картинок и превью сайтов. Сейчас у нас на форумах вся работа над этим вопросом происходит при обработке ответа. Из-за чего процесс ответа весьма медленный (там ещё и тяжёлые кеши чистятся каждый раз, например). Планирую сделать хитрую многостадийную систему:
- Ответ пишется на форум мгновенно, без любой хитрой обработки и сразу отображается в ленте как автора (даже, скорее всего, без перезагрузки страницы, на AJAX) и у других пользователей.
- При наличии в сообщении тяжёлых компонентов (ссылки, картинки) сообщение помечается как находящееся в обработке (скажем, где-то в уголочке спиннер крутится или прогресс-бар) и в распределённую сеть закидывается запрос на получение информации о нужном контенте (превью ссылки, картинки и т.п.). Не локально, а в распределённой сети, потому что в наше время баны сайтов стали уже слишком частым делом. Кроме того, форумы итак будут распределёнными и нужный контент может уже быть где-то в сети.
- Обработчики в сети получают сообщение о том, что кто-то ищет контент и или закидывают в сеть ссылки на найденное (через IPFS) в своих архивах, или пытаются скачать нужное и, опять же, закидывают в сеть итог. В запросе среди прочей информации пишется, кого эта информация интересует, конкретный форум и пост.
- Тот форум, что закидывал запрос, следит за сообщениями о публикации запрошенных объектов. И когда видит, что есть ответ для одного из своих постов, то пересчитывает этот пост с учётом новых данных и обновляет содержимое поста в открытых браузерах пользователей, если такие ещё есть.
Реально такой процесс должен занимать секунды. Примерно, как и сейчас. Может немного дольше. Зато визуально будет выглядеть заметно приятнее — ты жмёшь в редактор кнопку «Ответить», мгновенно видишь упрощённый результат на форуме, несколько секунд крутится спиннер/прогрессбар, потом пост меняется уже на полный вариант.
Сейчас в рамках этого буду экспериментировать с давно назревшей задачей утягивания/обработки ссылок/картинок. Сейчас всё сделано криво и централизовано. Превью сайтов, например, у меня вообще на домашней машине делается
Картинки, утянутые/кешированные с сайтов, хранятся на сервере Авиабазы в ужасном файловом архиве на десятки, если не сотни гигабайт (и из-за его архитектуры даже ломает пересчитывать размер, это очень долго), который давно тормозит сервер. И этот архив не легко растащить/разгрузить по другим серверам. IPFS будет создавать на один сервер, полагаю, нагрузки больше. Но зато её можно распределить между разными машинами.
Эксперименты с большой нагрузкой на IPFS у меня сильно задерживались, поскольку Hetzner, на котором у меня хостятся два сервера с самой большой дисковой системой (старый Htz, на котором сейчас в основном и сидят форумы и новый Habitat, который был арендован летом и который только вводится в эксплуатацию как файловая помойка, это на нём, например, стоит
PeerTube), сильно не любит IPFS, считая её «хакерским софтом, сканирующим сеть» и банит хосты, требуя объяснений (раза три на эти грабли вставал). Однако, в IPFS, как оказалось, ввели настройки, отключающие такое сканирование и сейчас она работает без претензий со стороны Hetzner'а.
Нужно придумать эффективное и простое локальное key-value хранилище, чтобы каждый узел сети знал, есть ли у него нужные страницы/картинки в локальном IPFS-хранилище. Вот тут пока не решил, что удобнее и быстрее. То ли тупо в плоской файловой системе хранить или sqlite (просто, быстро разворачивается, экономно при хранении без использования), то ли писать в mysql (лучше держит нагрузку, особенно при модификациях). Наверное, надо идти в начале разработки по предельному упрощению и делать самый простой и быстрый вариант. А если с ним не выгорит, всегда можно доработать и усложнить, автономность узлов сети Infonesy позволяет это делать безболезненно и незаметно для других участников.
Вообще, постоянно ловлю себя на том, что пытаюсь заниматься преждевременной оптимизацией («Premature optimization is the root of all evil» ©) и постоянно приходится себя останавливать. Например, взять вставку картинок из IPFS на форуме. Сегодня считается хорошим тоном делать это через централизованный шлюз gateway.ipfs.io. Но это, во-первых, чужой сайт, который не хочется нагружать своим трафиком, который может тормозить и который может быть легко заблокирован тем же Роскомнадзором (я удивлён, что он до сих пор не заблокирован). Другой вариант — делать свой гейт (он даже и есть, но пока под мои частные задачи) и давать ссылки через него. Также активно идут разработки IPFS на JavaScript, когда нужный контент [с]может извлекать из сети прямо браузер, не обращаясь к другим серверам. Наконец, у отдельных энтузиастов может стоять свой узел IPFS на домашней машине, через который они и могут получать контент. В идеале эти подходы надо соединить. Типа, если есть свой узел, отдаём с него. Если нет, то через JS-вариант в браузере. Если его нет или не работает, то с собственного гейта форумов. А если он когда-то упадёт или закроется, то в постах, которые к тому времени могут храниться где-то в распределённой сети, будут стоят ссылки уже на «официальный» гейт IPFS. На разруливание этого вопроса я угрохал сегодня целую «рабочую ночь» и для экспериментов ещё мнооого времени и тестов нужно. Вот только если не увлекаться преждевременной оптимизацией, то это всё вопросы реально ещё не наставшего будущего. А сейчас можно тупо поставить ссылку да хоть на свой гейт. А на время экспериментов — и на «официальный». В таком виде запустить в работу и потом уже дорабатывать. Когда будет время/желание. Как я сам пишу много раз, наученный горьким опытом, лучше сырое и корявое, но востребованное и работающее на практике, чем отлично продуманное и грамотное, но так и не написанное