Улучшение вычисления максимального количества EOS транзакций в секунду
Этот пост мы пишем для того, чтобы поделиться методологией, которую мы разработали для вычесления количества транзакций в секунду на EOS блокчейне, а также открыть ее для анализа и критики. Частично, наша мотивация заключается в передаче точной и достоверной информации о нашем мониторе сети EOS.
Предположения
Время блока всегда кратно 500 мс и никогда не равно нулю. Таким образом, вы можете иметь блоки длиной в 500 мс, 1000 мс, 1500 мс, 2000 мс и т. д. И у вас никогда не будет блока длиной в 0 мс, 300 мс, 750 мс, 1050 мс и т. д.
Транзакции равномерно распределены в интервале времени, которое необходимо для добавления блока. Иными словами, скорость транзакций в пределах времени блока - постоянна. Поэтому, если блок с 6000 транзакциями добавляется на блокчейн за 6 секунд, TPS = 1000 в эти шесть секунд между добавлением предыдущего блока к этому.
Мы хотим определять фактическое максимальные число транзакций в секунду, вместо максимальной скорости. Это значит, что если мы добавим 9000 транзакций на блокчейн за .5 секунды, будет достигнута скорость в 18000 TPS, но фактический максимум составит 9000 плюс количество транзакций, добавленных до и / или после этой .5 секунды, так что общее время рассмотрения будет составлять одну секунду.
Отметки времени блока являются точными. На самом деле существует задержка между разными блок-продюсерами. Мы предлагаем рассматривать это как отдельную проблему позже. Задержка касается не блокчейна, а регистрации входа разных блок-продюсеров.
Некоторые термины
Давайте обозначим блоки, используя буквы A, B, C и т. д.
Назовем количество транзакций в каждом блоке: NA, NB, NC и т. д.
Определим время блока для блока B как отметку времени блока B минус отметку времени блока A в секундах. И давайте использовать TA, TB, TC и т. д. для обозначения отметок времени.
Определим скорость выполнения TPS блока как количество транзакций, разделенное на отметку времени. Таким образом, скорость выполнения TPS блока B будет равна NB / TB. Давайте обозначим TPS скорость для каждого блока как RA, RB, RC.
Пример:
Если NB = 10 и TB = .5, то RB будет равно 20. За половину секунды, которые было потрачено на добавления блока B, 10 транзакций было добавлено на EOS блокчейн. В эту половину секунды, транзакции добавлялись со скоростью 20 в секунду. RB = 20.
Вычисление TPS при нормальных условиях (временные интервалы для каждого блока - 500 мс)
При нормальных условиях, когда все временные интервалы блоков равны максимум 500 TPS, кандидатов можно вычислить просто суммируя каждую смежную пару блоков и сравнивая ее с существующим максимумом TPS.
NA + NB
NB + NC
и т.д.
Нет необходимости учитывать секунду, которая охватывает три блока, скажем, от отметки времени B минус 250 мс до отметки времени C плюс 250 мс.
Что приводит к появлению нестандартных временных интервалов?
Мы провели быстрый анализ нестандартных временных интервалов блоков на 100 000 образцах, начиная с блока № 11М.
Результаты вы можете найти в таблице. Каждый раз, когда нам встречалось нестандартное время блока, мы также отмечали некоторую информацию о блоке, который был до него.
Всего 1319 блоков (1,3%) из 100 000 имели нестандартное время блока.
Из них 72% имели время блока в 1000 мс.
Для 95 блоков, или 7,2% из тех, которые имели нестандартное время блока, оно было >= 3000 мс.
Наихудшие временные интервалы были 12500 мс (1 пример), 9000 мс (1), 8500 (2), 7500 (1), 7000 (1) и 6500 (20).
Самой очевидной причиной возникновения нестандартного времени блока является переход от одного БП к другому. Только 108 блоков, или 8,2% из тех, которые имели нестандартное время, были произведены тем же БП, который произвел предыдущий блок.
Из 95 блоков с интервалом >= 3000 мс, только один был произведен тем же БП, который создал предыдущие блоки.
Взаимосвязи между размером нестандартного временного интервала и количеством транзакций в блоке почти не было.
Точно также, почти не было никакой корреляции между размером нестандартного временного интервала и количеством транзакций в предыдущем блоке.
Вероятно, нам следует провести более глубокое исследование, чтобы проанализировать ВСЕ блоки и посмотреть, существует ли корреляция между количеством транзакций и ЛЮБОЙ нестандартной блочной продолжительностью.
Вычисление максимального числа TPS в EOS
Мы подошли к главной сути статьи. Призываем вас к критике следующей методологии:
проверка 1
Мы смотрим на предыдущие блоки и решаем, нужно ли и сколько транзакций из предыдущего блока добавить, а также следует ли отделять транзакции от блоков, на создание которых ушло много времени:
- Если TB = .5, то MAX TPS кандидат будет:
RB (ТB) + RА (1-ТB)
или так как TB = .5, мы можем использовать:
(RB + RA) / 2
- Если TB> = 1, то Max TPS кандидат будет:
RB / TB
edge case
Может показаться что этого достаточно, но здесь мы пренебрегаем рассмотрением TPS для следующего edge case:
TA = .5, NA = 1
TB = .5, NB = 1000
TC = 1, NC = 4
(почти пустой блок, за которым следует быстрый блок с большим количеством транзакций, за которым следует медленный блок со средним числом транзакций)
Используя только приведенную логику, можно прийти к выводу, что максимальное TPS за 2 секунды, которые потребовались для создания этих трех блоков, составляет 1001 (RA + RB) / 2.
проверка 2
В некоторых ситуациях, как и в edge case, мы должны смотреть на следующие блоки и брать среднее от части транзакций из следующего блока.
- Если мы сталкиваемся с TC> = 1 и TB <1, то Max TPS кандидат будет:
RB (TB) + RC (1 - TB)
или так как TB = .5, мы можем использовать
(RB + RC) / 2
С проверкой 2, edge case, указанный выше, приводит к тому, что максимальный TPS будет (RB + RC) / 2 или 1002.
Вывод
Мы считаем, что это хороший подход к вычислению MAX TPS. Комментарии и критика очень приветствуются.
Перевод CryptoLions