Внутренние службы сети Decimal

В сети Decimal работает ряд служб — воркеров (Workers), которые собирают данные, поступающие непосредственно в блокчейн.

Данные — это блоки и транзакции разных типов: отправка, покупка, продажа, создание монет и так далее.

Пользователи обозревателя (Explorer) делают запросы на поиск всевозможной информации о блокчейне. Все они проходят через специальный балансировщик (Balancer), который равномерно распределяет нагрузку и направляет соответствующие запросы на считывание из slave-хранилищ.

Так осуществляется буферизация данных и канала доступа на считывание из блокчейна с высокой пропускной способностью.

Буферизация данных

Буферизация (от англ. buffer) — способ организации обмена данных в компьютерах и других вычислительных устройствах, который подразумевает использование буфера для временного хранения данных.

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

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

Зачем нужны?

Полагая, что пользователям будет интересен очень большой объём информации о состоянии и процессах в сети Decimal, а именно детали транзакций, блоки, валидаторы и их параметры, выпущенные монеты и так далее, DecimalChain позаботился о доступности всех этих данных и обеспечил их корректное и быстрое отображение с помощью внутренних служб.

С течением времени и увеличением блокчейна обрабатывать запросы будет всё сложнее. Возможны значительные временные задержки при выборке данных непосредственно из реплик блокчейна.

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

Процесс организован следующим образом. Изменения состояния в блокчейне генерируют события (events), которые мониторятся воркерами. Они разбирают на составные части всю поступающую информацию из блоков и транзакций и передают в индексер, в котором данные сортируются и индексируются. После этого упорядоченная информация записывается в базу данных (PostgreSQL), ведущую базу (Master) и дублируется на ведомых хранилищах (Slave) для гарантии сохранности. Все запросы от эксплорера поступают на ведомые базы данных через балансировщик (Load Balancer), организующий через программный интерфейс (API) равномерное распределение нагрузки.

Такая схема горизонтально масштабируемая, то есть если возрастает нагрузка, то можно добавлять ведомые базы. При этом мастерноды, где непосредственно хранятся реплики блокчейна, не нагружаются, так как архитектурно отделены от запросов пользователей и внешних служб.

Благодаря индексированию базы данных способны с минимальными задержками выдать информацию о любых событиях и состояниях в блокчейне вне зависимости от размера самой базы данных.