Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
cyberevents
6 лет назад

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

В данной лекции разработчик 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 - продукт нового поколения, который способен привнести свежие решения в индустрию Блокчейн. Следите за новостями развития технологии на нашем канале.

!
23
7.162 GOLOS
На Golos с August 2017
Комментарии (2)
Сортировать по:
Сначала старые