Внутри блокчейна Graphene. Спикер: Александр Боргардт
В данной лекции разработчик Golos Core Александр Боргардт расскажет о технологии Graphene.
Архитектура Graphene представляет собой монолитное приложение, в которое компилируются плагины Graphene.
Внутри происходит инициализация цепочки, инициализация синхронизирующего объекта, который отмечен как p2p и инициализация двух видов WebSocket.
Graphene - инновационная блокчейн платформа, но, к сожалению, не лишенная недостатков. Рассмотрим сложности с которыми можно столкнуться при работе с Graphene:
- Случай №1
Есть типичный пользователь, который делает запрос. В данный момент используются 3 компонента: один из WebSocket, р2р и Chain.
Не всегда данная последовательность корректно работает. По этой причине есть клиенты, которые и делают запрос в веб сервер. Затем задействуется подсистема р2р, транслирующая блок с операцией во все ноды. На данном этапе может возникнуть проблема с имплементацией.
После трансляции сообщения во все ноды, WebSocket получат обратный ответ и информация записывается в цепочку.
В какой-то момент может произойти перегрузка WebSocket сервера, далее отказ работы р2р подсистемы.
- Случай №2
Во избежании возможного результата первого случая, попробуем пойти другим путем:
В данном случае работа идет с плагинами.
Взаимодействие с WebSocket сервером описано в случае №1, здесь начнем с поступления информации в Chain. Далее с помощью буст сигналов (особый вид колл-бэков с подписками) все данные агрегируются в нужные плагины.
р2р обрабатывает входящий запрос и отправляет данные в Chain - этот тот же тред, что обрабатывает WebSocket сервер. По этой причине цепочка перестает работать:
Для решение данной проблемы в структуре Golos применили Thread Pool
Thread Pool разгружает WebSocket и поднимает производительность.
Также используется специализированный тред, который занимается синхронизацией нод и трансляцией данных в Chain, что снижает нагрузку системы.
Также следует отметить еще одну проблему Graphene
Есть поле person и id все остальные поля опциональны. В таком случае, в Graphene появляется таблица - структура и индексы данной структуры.
Boost Multi-Index Multi Container объединяет Id, как уникальное значение, и name, тем самым построив комбинацию Id+name. Далее из такого индекса можно выбирать по имени.
Внутрь контейнера можно добавить другие индексы:
Но, существует проблема - чем больше в структуре полей, тем толще Boost Multi-Index Container для данной структуры. По мере роста проекта количество данных увеличивается и файловая система перегружается.
Для решение проблемы в Steemit используют shared memory для хранения данных
Но, объем информации растет и наступает проблема - это внутренняя инверсионность и применяется система подобная NVCC (набор решений, который позволяет обычным базам данных сохранять целостность при мутирующих операциях).
При мутирующей операции происходит удвоение данных в оригинальном хранилище данных и shared memory. Далее происходит дампинг из shared memory в оригинальное хранилище и данный дамп не будет работать на другой машине. После дампинга на жестком диске происходит удаление слепка памяти и как следствие хранилище перестает функционировать. Единственный способ восстановить систему - заново загрузить данные.
Учитывая данные сложности, в Golos предприняли следующие шаги
- Отказ от shared memory, поскольку это не продуктивный дизайн хранилища
- Введение понятия Name Space, чтобы работать не объектами, а с указателями - это сильно сокращает нагрузку во многих местах
- Заменить дамп памяти на решение RocksDB (одна из вариаций key-value хранилища)
- Использовать обычную оперативную память
Graphene - продукт нового поколения, который способен привнести свежие решения в индустрию Блокчейн. Следите за новостями развития технологии на нашем канале.
!