Функциональность DCore достигла 2000+ транзакций в секунду

Август 28, 2018

Наша команда разработчиков добилась очередного успеха! Мы много трудились над новой версией DCore 1.3.0, способной обрабатывать более 2000 транзакций в секунду!

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

Во-первых, мы должны объяснить, что значит обрабатывать 2000+ транзакций в секунду. Транзакции, о которых мы говорим, должны приниматься постоянно (не только в пиках); при этом потеря каких-либо транзакций или отключение проверки подписей при получении транзакций из сети недопустимы.

Помимо прочего, необходимо учитывать несколько факторов, включая топологию тестируемой сети, проверяемые операции и техническое обеспечение. В этом тесте мы использовали физическую аппаратуру. Это требует достаточно много свободного места, так как в процессе участвует несколько видов оборудования (устройств), после чего устанавливается их соединение через сетевой коммутатор и т.д.. По этой причине мы выбрали наиболее простую модель:

Мы взяли сервер Linux Ubuntu 16.04, запустили DCore узел с 11 майнерами, и два других компьютера с Windows, и запустили DCore узел вместе с утилитой transaction_gun. Следует отметить, что в небольшой сети мы достигнем одинакового результата, если все 11 майнеров будут на одном сервере или на разных устройствах. К примеру, четыре устройства, у каждого из которых имеется два майнерa, и пятое устройство с тремя майнерами.  Результат будет одинаковым, потому что майнеры назначают определенные временные интервалы и проверяют транзакции по блокам только в пределах этих временных интервалов.

Серверное оборудование Linux:
HP Compaq Elite 8300 CMT PC ALL c CPU i7-3770 3.4GHz 4 ядра, SSD диск, RAM 8GB.

Один компьютер со средним оборудованием способен отправлять (макс.) около 1800 транзакций в секунду с помощью нашей утилиты transaction_gun. Поэтому для этого теста мы решили использовать два компьютера:

Компьютерное оборудование:
ThinkPad L560 с CPU i7 6600U, 2.6 — 2.8GHz, RAM 8GB, SSD диск, Windows 10
ThinkPad E570 с CPU i7 7500U, 2.7 — 2.9 GHz, RAM 8GB, SSD диск, Windows 10

Все три устройства были подключены через кабельную сеть. По нашему опыту, если у вас есть хорошее подключение к беспроводной сети, то вы можете воспользоваться и этим, но если работа сервера приближается к мощности 2000 транзакций в секунду, то ядра процессора могут быть загружены на 70%-100% и тогда необходимая пропускная способность сети может  достичь вплоть до 10 Мбит/устройство.

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

Узлы DCore запускались в частной сети testnet, предназначенной для тестов производительности. Узел DCore в Linux настроен с рекомендуемой конфигурацией.

Два не участвующие в майнингe узлa подключаются к узлу, работающему на Linux сервере, который действует как узел-сидер.

Transaction_gun — утилита, разработанная для бенчмарков. Она отправляет поток транзакций на локально запущенный узел DCore, и узел DCore передает их в сеть DCore. Каждая транзакция содержит одну операцию, которая переводит небольшое количество DCT между счетами.

Мы создали четыре тестовых аккаунта. Когда узел DCore запущен на компьютере и синхронизирован с сервером Linux, следующим шагом становится запуск transaction_gun. Мы использовали две  программы на каждом компьютере, и каждая из них отправляла DCT на разные тестовые аккаунты.

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

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

После завершения теста мы можем использовать простой расчет: Транзакции в секунду = (количество отправленных транзакций) / промежуток времени.

В нашей тестовой среде мы измеряли от 2100 до 2500 транзакций в секунду без потери каких-либо из них. Когда мы попытались добавить еще два устройства, мы достигли более высоких скоростей, но потеряли некоторые транзакции. Транзакции теряются, когда сервер Linux имеет очень высокую загрузку CPU и узел DCore не в состоянии обработать все транзакции, полученные от сети.

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

Мы провели много тестов с четырьмя типами процессоров и достигли лучших результатов в 2000+ транзакций в секунду с процессором Intel CPU i7-3770 3.4GHz 4 cores.

Мы очень довольны результатами нашего тестирования и надеемся достичь новых вех, поскольку мы продолжаем продвигать нашу технологию и платформу DCore. Как всегда, если вы хотите быть в курсе последних новостей о DECENT, следите за нами в VK и присоединяйтесь к нашему каналу Telegram.