Друзья, этим постом мы открываем серию публикаций, посвященных планам развития клиента Golos.io. Будет много технической информации, поэтому для удобства весь объем разделили на несколько постов.
Для начала давайте заглянем в историю, определим основные проблемы существующей кодовой базы, обозначим наши цели и задачи.
История
Текущий клиент Golos.io до недавнего времени представлял из себя кальку с клиента Steemit от начала 2017 год. Да, было проведено две адаптации под хардфорки, разработанные командой @goloscore, были переписаны места, отвечающие за взаимодействие с блокчейном, но в глобальном смысле в самом клиенте особо ничего не менялось. Чтобы понять, почему сложилась такая ситуация, надо рассмотреть историю создания Steemit, используемые паттерны и технологии.
Клиент Steemit был разработан очень быстро, за три месяца, однако, при этом в разработке были задействованы современные и актуальные подходы и библиотеки (Isomorphic, Immutable, Server Side Rendering, React, Redux, Redux-Saga, Foundation Framework). Подобная скорость разработки с использованием перечисленных выше технологий заслуживает уважения, но в тоже время ухудшает качество кода и способствует накоплению технического долга.
В итоге в коде Steemit часто встречаются спорные решения.
Например, connect используется практически в каждом компоненте, модуле или контейнере. Подобное использование данного модуля, который призван облегчить работу с данными, к сожалению, только усложняет её и приводит к деградации производительности. Некоторые модули и компоненты представляют из себя нечитаемые массивы, длиной 500 (пятьсот) строк кода и более, при этом большое количество логики сконцентрировано в методе render. Сама структура проекта представляет из себя слабоструктурированное нагромождение файлов.
Большой проблемой является роутинг (маршрутизация) внутри приложения. По непонятной причине для реализации роутинга были использованы регулярные выражения, и маршрутизация приложения сильно связана с кодом, реализованном в redux-saga.
Поскольку клиент написан как «чистый» - каждый отдельно взятый пользователь взаимодействует с блокчейном напрямую, и в случае записи транзакции, и в случае чтения данных из блокчейна, каждый, без исключения, вызов нагружает ноду блокчейна. Из-за высокой нагрузки на ноды и проблем их синхронизации несостоятельность данного подхода при работе с блокчейном становится очевидной.
Проблемы
Основная проблема текущей кодовой базы заключается в том, что она крайне сложна в поддержке, а внедрение нового функционала приводит к еще большему накоплению технического долга.
При увеличении трафика нам необходимо увеличивать количество seed-node golos и приложений tolstoy. Но они весьма ресурсозатратны, и требуют большого количества вычислительных мощностей для корректной работы. При этом периодически происходит рассинхронизация, и на восстановление корректной работы уходит много времени и сил.
Для получения данных используется прямое соединение (через web-socket) к seed-node, то есть все, без исключения, запросы обрабатываются нодой блокчейна, будь то случайный посетитель, пришедший из поисковой системы, или зарегистрированный пользователь. При этом механизмы блокчейна для обработки данных оставляют желать лучшего. Из-за жесткого API, реализованного непосредственно в ноде, мы не можем работать с данными способом отличным от заложенного в ноду, о чем уже писала команда @goloscore. Сами же запросы, такие как getDiscussionsBy*, могут выполняться по несколько секунд, а в случае рассинхронизации вообще могут не отдавать никаких данных. Это не только создает неудобства для конечного пользователя, но и ухудшает индексирование сайта поисковыми системами.
Жестко запрограммированный API, без возможности его быстрого изменения (каждое изменение API требует проведения софтфорка) накладывает дополнительные ограничения на использование данных, которые хранятся в блокчейне. Пользователи давно привыкли получать уведомления о событиях, происходящих с их учетной записью, например, лайки/флаги, новые комментарии к постам, и т.д. Однако, блокчейн нода не может предоставить подобного функционала, не говоря уже о push уведомлениях для мобильных устройств, почтовых уведомлений, верификации учетных записей и другого не менее важного функционала.
Все эти обстоятельства привели нас к тому, что необходимо коренным образом менять архитектуру веб-приложения, для реализации более удобного и современного сервиса, по сравнению с тем, что мы имеем на данный момент.
Однако, невозможно просто взять и все переделать, поскольку проект уже запущен, сайтом пользуется много людей, поэтому мы решили постепенно перестраивать отдельные части сервиса.
Цели и задачи
Перед тем как приступить к внесению серьезных изменений давайте обозначим, чего мы, как команда клиента блокчейна, хотим добиться в итоге:
1. Простота регистрации
Обновить систему регистрация новых пользователей. Она должна быть проста и понятна.
2. Скорость работы сайта
Увеличить производительность, сделать ее сопоставимой с современными веб-ресурсами.
3. Работа с данными
Внедрить гибкую систему фильтрации и поиска контента.
4. Пользовательский интерфейс и юзабилити
Полность обновить дизайн приложения. Он должен соответствовать современным реалиям, а сами компоненты при необходимости легко модифицироваться и/или заменяться.
5. Неизменность клиентского окружения
Синхронизировать настройки вне зависимости от того, каким браузером или мобильным приложением пользуется человек.
6. Сервисы и инструменты
Вынести различные вспомогательные инфраструктурные компоненты в отдельные, независимые сервисы, чтобы при необходимости их можно было дорабатывать и обновлять без ущерба для основного приложения.
Иллюстрация к посту - Yandex
—
Подписывайтесь на официальный аккаунт блог-платформы Golos.io @golosio, чтобы быть в курсе развития проекта! Телеграм для ваших вопросов — https://t.me/golos_support. Лучшее на Голосе — https://t.me/golos_best
Есть предложения, как сделать Golos.io лучше? Пишите в Issues на нашем Github, в наш Телеграм-канал или в чат разработчиков Golos.io в Телеграм!
—
С уважением, команда Golos.io @golosio: @alex-firsov, @bacher, @b1acksun, @chinpu, @dan-kinescop, @dekol, @devall, @format-x22, @insider, @jevgenika, @kucinskaya.alla, @muhazokotuha, @msm72, @nickshtefan, @yulia.rodnikova, @yuri-vlad.
А когда вы поставите цель "возможность публикации в блокчейне без регистрации"? Это касается и комментариев и постов.
@ili А как предполагается реализовать данную задачу? Ведь без адреса невозможно записать транзакцию (контент) в блокчейн. Можно создать аккаунт "Анонимус", который будет постить от имени всех незарегистрированных посетителей клиента.
Однако с точки зрения проекта (клиента) это может быть спорным решением. Объясню проблему на примере. В ЖЖ есть авторы, которые блокируют возможность комментирования пользователям, не имеющих подписку (не добавили в друзья автора). Таким образом автор стимулирует новых посетителей блога, пожелавших оставить коммент, подписываться. Это справедливо и для нашего случая.
"которые блокируют возможность комментирования пользователям, не имеющих подписку" - разве на Голосе есть такое? Не говоря уже о бане )))
Если уж взяли в ЖЖ, то там возможна авторизация через вк и не только, как для постинга, так и для оставления комментариев. Любая площадка стремится быть удобной для пользователей, ну кроме Голоса конечно, Голос является исключением. Любая площадка борется за количество посетителей и авторов, ну конечно кроме Голоса.
Так вот ваше замечание о комментировании подписчиков должно учитывать вкупе ситуацию в ЖЖ, а не быть выдернутым из контекста.
@golosio апы Креатора отключены навсегда или это просто поломка бота?
@bammbuss тоже интересно!!!
@rous Похоже игнор актуальных вопросов у них в крови
@fainder, @bammbuss, @rous, в работе апвоут-бота произошел сбой.
На данный момент все исправлено, бот снова в строю.
@yulia.rodnikova благодарю за ответ!
@golosio Ну цели сформулировали, это хорошо. Давайте теперь формулировать способы достижения этих целейи критерии их достижения.
Потом нужно делать план-график внесения этих изменений.
Потом нужно будет все это реализовать и не выбиться из графика и бюджета.
Я почему для вас пишу эти эти прописные истины... Потому что ранее, вы формулировали похожие задачи, выделяли бюджеты. А что-то ничего не изменилось... Ни упрощенной регистрации, ни улучшения юзабилити. А об этом еще год назад говорилось. Почему сейчас будет все по-другому?
@captain
потому что работает другая команда!!!!
я надеюсь, будет по другому! )
@golosio Подскажите где познакомиться с API для постинга в в golos.io?
@karinochka, вот здесь: https://github.com/GolosChain/golos-js/blob/master/doc/README.md
@golosio подскажите, почему на клиенте Андроид перестали приходить уведомления?
@mikhailal, уведомления снова приходят
@golosio
так. начало хорошее, понятное. пошла читать продолжение.
@golosio Удачи!
@irinadob550, спасибо!
@golosio Удачи в развитии. И чтоб в итоге получился классный удобный всем сайт.
@denis-skripnik, спасибо!
Пожалуйста.