@avral
год назад
Moscow, Russia

🔨Mapala | О проектировании приложения для голоса.

Сокращения:

  • HF - Хардфорк
  • БЧ - Блокчейн

При разработке приложения Mapala Beta еще на 16HF. Сформировались проблемы мешающие нормальному функционированию приложения.

  1. Работа с данными БЧ.
  2. Изначально приложение проектировалось сразу на два БЧ steem/golos.
  3. Регистрация в приложении с автоматическим созданием аккаунта в блокчейне.
  4. SPA/SSR, SEO, sitemap.xml, итд.

Работа с данными БЧ.

Основная проблема - это работа с базой БЧ. Так как API ноды не обеспечивала необходимой гибкости выборок, было решено написать свой бек-энд который будет парсить блоки и хранить операции в удобном формате. В результате получилось удобное API, но из-за постоянных обновлений протокола и обновления структуры данных в базе, была необходимость при каждом обновлении кода, синхронизировать базу заново. Так же API было ориентированно только для работы с приложением Mapala. С выходом 18HF команда голоса обрадовала нас релизом mongo-plugin’а благодаря которому взаимодействовать с базой БЧ стало намного проще. Я решил написать GraphQL сервис для голоса на основе mongo базы. Получилось удобное API, которое можно развивать, при этом каждый раз не синхронизироваться заново. Приложение Mapala использует GolosQL для запроса аккаунтов/постов с фильтрацией по тегу приложения(mapala/ru—mapala).

Приложение проектировалось сразу на два блокчейна steem/golos.

Как следствие, блокчейны пошли по разным путям развития, соответственно поддерживать совместимость с двумя разными интерфейсами как для бек-энда так и для фронтенда стало технически сложно. Из этого было выработано правило: один БЧ - один фронтенд. Проще отдельно развивать несколько фронтендов под разные БЧ, при этом используя общие модули где это возможно.

Регистрация в приложении с автоматическим созданием аккаунта в БЧ.

Для хранения данных пользователя и авторизации использовался внутрений аккаунт, хранящийся на бекенде, а аккаунт БЧ импортировался на стороне клиента. Это создало массу проблем: несовпадение имен аккаунтов, невозможность импортировать ключи повторно в новом аккаунте(внутреннем), при регистрации пользователи не сохраняли и теряли свои приватные ключи. Имхо, без понимания базовых принципов работы БЧ, пользователь не сможет полноценно пользоваться приложением. Регистрировать аккаунты с префиксом приложения, генерировать имена аккаунтов по OAuth авторизации со стороннего сервиса, не имеет особого смыла. Регистрация была временно отключена, функцию регистратора выполняет golos.io. Вывод: 1 аккаунт в БЧ - много фронтендов/приложений.

SPA/SSR, SEO, sitemap.xml.

Изначально фронтенд разрабатывался как SPA приложение, СЕО оставляло желать лучшего, поэтому приложение было переписано на SRR. Для добавления веса фронтенду, в конце каждого поста добавляется баннер со ссылкой на источник. Добавлен sitemap который генерируется динамически. Вывод: Приложение для медиа-БЧ должно быть СЕО оптимизированным.

Что представляет из себя приложение golos.mapala сейчас?

  1. Фронтенд, взаимодействующий с отрытым АПИ(GolosQL).
  2. Авторизация посредством posting ключа.
  3. Оптимизированное СЕО, SSR.
  4. Современные технологии веб разработки, vue/nuxt.js/es7, docker.

https://golos.mapala.net https://github.com/avral/golos.mapala

P.S Для разработчиков. Данное приложение можно использовать как каркас для создания приложений на блокчейне голос. При проектировании приложения, я старался заложить максимальный уровень абстракции.

Параметры “config/index.js”, указанны параметры для golos.mapala.

  1. app: идентификатор приложения -> mapala/1.1
  2. app_tags: летна постов фильтруется по даррым тегам ['mapala', 'ru--mapala']
  3. tag_for_post: первый тег в редакторе, при создании публикации -> mapala
  4. pagination: количесто постов, для подгрузки в ленту для каждой итерации -> 10

Тех поддержка -> telegram: @avral

From Mapala

denis-skripnikОтветил avral
год назад

@avral Сколько диска и оперативки занимает база и Клиент? Благодарю за ответ и пост.

Ответить
avralОтветил denis-skripnik
год назад

Спасибо. Я запускаю все в контейнерах. Поэтому покажу статистику образов/контейнеров.

Вес образов:

  • Клиент 500MB.
  • GolosQL 713MB
  • Монга 380MB
  • Нода 1.46GB

Вес данных: Нода + Монга ~ 100Gb

RAM (контейнеры):

Клиент: 188Mb GolosQL: 207MB Нода 200Mb (shared_memory.bin на диске) Монга: 12GB

Все это хостится на 32Gb RAM сервере.

Но, для разворачивания клиента хватит 512MB сервера, так как остальные сервисы для взаимодействия с данными находятся в публичном доступе. https://golos-ql.mapala.net https://golos-mongol.mapala.ne

Ответить
denis-skripnikОтветил avral
год назад

Благодарю. Пожалуйста.

Ответить
denis-skripnikОтветил avral
год назад

Кстати, хотелось бы увидеть посты с примерами запросов основных данных:

  1. Список постов,
  2. Пост и комментарии,
  3. Пользователя данные (get_accounts);
  4. История операций аккаунта с фильтром, например, по переводам,
  5. Суть формирования запросов: какова структура базы данных.
Ответить
dobryj.kitОтветил avral
год назад

Ваш пост поддержали следующие Инвесторы Сообщества "Добрый кит": alex2016, dimarss, ohlamoon, vadbars, dany2323, vict0r, gans91, kssenia, svinsent, alex-zi, polyakov, baltiyka, voronchihin, cattyshark, mryabinin, prost, sareon, soroka, dim447, zhasmin, skiexpert, bounty-compaing, kr-alexey, makcl, ratrin, brainmechanic, kiorsergey, annadolphin, pkrugloff, esperos, yurij12 Поэтому я тоже проголосовал за него!

Узнать подробности о сообществе можно тут: Разрешите представиться - Кит Добрый Правила Инструкция по внесению Инвестиционного взноса Вы тоже можете стать Инвестором и поддержать проект!!!


Если Вы хотите отказаться от поддержки Доброго Кита, то ответьте на этот комментарий командой "!нехочу"


dobryj.kit теперь стал Делегатом! Ваш голос важен для всего сообщества!!! Поддержите нас:

Ответить