Внутри блокчейна Graphene. Спикер: Александр Боргардт

4 месяца назад
65 в блокчейн

В данной лекции разработчик Golos Core Александр Боргардт расскажет о технологии Graphene.

Архитектура Graphene представляет собой монолитное приложение, в которое компилируются плагины Graphene.

Снимок экрана 2018-02-22 в 0.27.56.png

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

Graphene - инновационная блокчейн платформа, но, к сожалению, не лишенная недостатков. Рассмотрим сложности с которыми можно столкнуться при работе с Graphene:

  • Случай №1

Снимок экрана 2018-02-22 в 0.28.43.png

Есть типичный пользователь, который делает запрос. В данный момент используются 3 компонента: один из WebSocket, р2р и Chain.

Не всегда данная последовательность корректно работает. По этой причине есть клиенты, которые и делают запрос в веб сервер. Затем задействуется подсистема р2р, транслирующая блок с операцией во все ноды. На данном этапе может возникнуть проблема с имплементацией.

Снимок экрана 2018-02-22 в 0.29.13.png

После трансляции сообщения во все ноды, WebSocket получат обратный ответ и информация записывается в цепочку.

Снимок экрана 2018-02-22 в 0.30.30.png

В какой-то момент может произойти перегрузка WebSocket сервера, далее отказ работы р2р подсистемы.

Снимок экрана 2018-02-22 в 0.30.56.png

  • Случай №2

Во избежании возможного результата первого случая, попробуем пойти другим путем:

Снимок экрана 2018-02-22 в 0.31.36.png

В данном случае работа идет с плагинами.

Взаимодействие с WebSocket сервером описано в случае №1, здесь начнем с поступления информации в Chain. Далее с помощью буст сигналов (особый вид колл-бэков с подписками) все данные агрегируются в нужные плагины.

Снимок экрана 2018-02-22 в 0.35.41.png

р2р обрабатывает входящий запрос и отправляет данные в Chain - этот тот же тред, что обрабатывает WebSocket сервер. По этой причине цепочка перестает работать:

Снимок экрана 2018-02-22 в 3.13.35.png

Для решение данной проблемы в структуре Golos применили Thread Pool

Снимок экрана 2018-02-22 в 0.35.52.png

Thread Pool разгружает WebSocket и поднимает производительность.

Также используется специализированный тред, который занимается синхронизацией нод и трансляцией данных в Chain, что снижает нагрузку системы.

Снимок экрана 2018-02-22 в 3.29.11.png

Также следует отметить еще одну проблему Graphene

Снимок экрана 2018-02-22 в 0.37.53.png

Есть поле person и id все остальные поля опциональны. В таком случае, в Graphene появляется таблица - структура и индексы данной структуры.

Снимок экрана 2018-02-22 в 0.40.09.png

Boost Multi-Index Multi Container объединяет Id, как уникальное значение, и name, тем самым построив комбинацию Id+name. Далее из такого индекса можно выбирать по имени.

Внутрь контейнера можно добавить другие индексы:

Снимок экрана 2018-02-22 в 0.41.13.png

Но, существует проблема - чем больше в структуре полей, тем толще Boost Multi-Index Container для данной структуры. По мере роста проекта количество данных увеличивается и файловая система перегружается.

Для решение проблемы в Steemit используют shared memory для хранения данных

Снимок экрана 2018-02-22 в 0.43.14.png

Но, объем информации растет и наступает проблема - это внутренняя инверсионность и применяется система подобная NVCC (набор решений, который позволяет обычным базам данных сохранять целостность при мутирующих операциях).

Снимок экрана 2018-02-22 в 0.45.28.png

При мутирующей операции происходит удвоение данных в оригинальном хранилище данных и shared memory. Далее происходит дампинг из shared memory в оригинальное хранилище и данный дамп не будет работать на другой машине. После дампинга на жестком диске происходит удаление слепка памяти и как следствие хранилище перестает функционировать. Единственный способ восстановить систему - заново загрузить данные.

Учитывая данные сложности, в Golos предприняли следующие шаги

Снимок экрана 2018-02-22 в 12.43.54.png

  • Отказ от shared memory, поскольку это не продуктивный дизайн хранилища
  • Введение понятия Name Space, чтобы работать не объектами, а с указателями - это сильно сокращает нагрузку во многих местах
  • Заменить дамп памяти на решение RocksDB (одна из вариаций key-value хранилища)
  • Использовать обычную оперативную память

Graphene - продукт нового поколения, который способен привнести свежие решения в индустрию Блокчейн. Следите за новостями развития технологии на нашем канале.

!
Авторы получают вознаграждение, когда пользователи голосуют за их посты.
Голосующие читатели также получают вознаграждение за свой голос.
Порядок сортировки:  Популярное
69
  ·  4 месяца назад

@cyberevents, поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:

Награда за количество опубликованных постов

Вы можете нажать на любой бейдж, чтобы увидеть свою страницу на Доске Почета.
Чтобы увидеть больше информации о Доске Почета, нажмите здесь

Если вы больше не хотите получать уведомления, ответьте на этот комментарий словом стоп

Голосуя за это уведомление, вы помогаете всем пользователям Голоса. Узнайте, как здесь.

70
  ·  4 месяца назад

Ваш пост поддержали следующие Инвесторы Сообщества "Добрый кит":
midnight, oksana0407, vika-teplo, hellen-g, kito-boy, photofreediver, irisworld, rastabandito
Поэтому я тоже проголосовал за него!

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


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


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