Golos.io: Новая архитектура клиента: производительность сайта и работа с данными

Друзья, в предыдущем посте мы выявили основные проблемы существующей кодовой базы клиента Golos.io, обозначили наши цели и задачи в плане развития.

Теперь давайте поговорим о новой архитектуре клиента и сервисах, над которыми мы работаем.

Скорость работы сайта и обработка данных

Ранее мы уже проводили работы по обновлению зависимостей (react, redux, nodejs, redux-sagas, webpack e.t.c), уменьшали размер бандла (файла, в котором содержится весь код сайта со всем зависимостями), и в итоге нам удалось получить ощутимый прирост производительности. Однако, дальнейшие обновления и уменьшение бандла более не приведут к качественным изменениям производительности. Единственным действенным способом ускорения работы сайта является создание кешируешего слоя.

Это глобальная задача, и называть данную систему кешем не совсем корректно. В нашем представлении «кеширующий слой» – это комплекс систем, состоящий из баз данных и микросервисов. В данный комплекс будут входить сервисы, отвечающие за:

  • быстрые ответы, расширяемый и универсальный API;
  • полнотекстовый поиск;
  • фильтрацию данных.

В упрощенном виде данный подход будет выглядеть следующим образом.

Из этой схемы видно, что у пользователя появляется два соединения, одно из них это прямое подключение к блокчейну для отправки транзакций в сеть, второе подключение (через Socket Gate) используется для получения данных.

В отличие от текущей реализации, данные, необходимые пользователю, будут забираться не напрямую из блокчейн ноды, а через другие слои из сущности под названием Blockchain State Copy.

Система «кеширующего слоя» будет состоять из следующих сервисов:

  • State Aggregation Service
    Данный сервис необходим для агрегации данных, приходящих в блоках и создания копии стейта, эквивалентной стейту блокчейна.
    Для защиты от форков сети мы планируем сохранять список транзакций, до невозвратного блока. В случае возникновения форка сети, при использовании данного сервиса появляется возможность откатывать изменения данных в Blockchain State Copy и уведомлять пользователя о возникшей ошибке.

  • Blockchain State Copy
    Представляет из себя обычную Базу Данных, содержащую актуальный стейт блокчейна, с возможностью откатить данные до невозвратного блока и накатить новые данные. С данным хранилищем в перспективе будут взаимодействовать Blockchain API Emulation, Extended API Node, и Search Engine.

  • Blockchain API Emulation
    Сервис предназначенный для эмуляции (копирования) запросов от клиента к блокчейну, таким образом, как если бы клиент получал данные напрямую из блокчейна. Здесь должны быть реализованы все запросы из блокчейн API, такие как: getDiscussionBy*, getContent, getTrendingTags, getAccountHistory и т.д. Данная нода так же взаимодействет с Blockchain State Copy.

  • SSR - Server Side Rendering
    SSR представляет из себя копию основного приложения, но работающего на сервере. Клиент Tolstoy в данный момент работает по такому принципу. Первичный запрос пользователя на получение данных отправляется на SSR. Ответом на данный запрос будет готовый HTML и необходимые JS бандлы. Данная операция необходима для SEO (поисковая оптимизация) и увеличения производительности для слабого железа.

  • Socket Gate
    Новая точка подключения, необходимая для корректной работы клиента с обновленной серверной инфраструктурой. Через данный сервис пользователь будет отправлять все запросы, помимо запросов за запись транзакций в блокчейн, и получать различные данные, например такие как онлайн- нотификации. Socket Gate реализует функцию авторизации пользователей, хранит таблицу соотношения каналов и пользователей. В перспективе, с согласия сообщества, на данный сервис можно будет приземлить отправку запросов на запись транзакций в блокчейн, и избавиться от второго соединения.

  • API Router
    Высокоуровневый маршрутизатор запросов от Socket Gate к конечным сервисам/микро-сервисам. Данная абстракция была добавлена для того, чтобы обеспечить непрерывное соединение между клиентом и сервером. При добавлении новых сервисов в инфраструктуру у нас нет необходимости обновлять Socket Gate, соответственно у клиента не будет обрывов соединения.

  • Search Engine
    Необходим для реализации полнотекстового поиска данных.
    Реализация данной ноды возможна только после окончания работ по внедрению State Aggregation Service и Blockchain State Copy. И может представлять из себя любой поисковый движок.

  • Extended API Node
    Сервис представляет из себя набор различных API вызовов, которые не были реализованы в блокчейне, однако являются критически необходимыми. Например, фильтрация данных по дате создания с возможностью выбрать посты только с определенными тегами. В целом в данном сервисе могут быть реализованы любые сложные запросы к БД. Данный сервис также зависим от State Aggregation Service и Blockchain State Copy.

В итоге, после реализации всех вышеописанных сервисов мы получим гибкую и высокопроизводительную систему работы с данными, а клиент станет быстрым и удобным.

State Aggregation Service и Blockchain State Copy позволят нам снизить затраты на инфраструктуру, путем уменьшения количества блокчейн seed-node.
Extended API Node позволит пользователям делать сложные запросы с фильтрацией данных, которые невозможно было сделать без использования БД.
А при помощи Search Engine ноды появится возможность избавиться от сомнительно работающего google поиска.

Однако, это еще не полный список необходимых сервисов, чтобы можно было назвать клиент дружественным к пользователю.

Об инфраструктурных сервисах и юзабилити поговорим в следующем посте.

Иллюстрация к посту - Pexels.com


Подписывайтесь на официальный аккаунт блог-платформы 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.

golosioразработка
92
31.149 GOLOS
0
В избранное
Golos.io
Официальный аккаунт команды Golos.io. Подписывайтесь и будьте в курсе жизни блог-платформы!
92
0

Зарегистрируйтесь, чтобы проголосовать за пост или написать комментарий

Авторы получают вознаграждение, когда пользователи голосуют за их посты. Голосующие читатели также получают вознаграждение за свои голоса.

Зарегистрироваться
Комментарии (13)
Сортировать по:
Сначала старые