GOLOS
RU
EN
UA
cryptolions
в прошлом году

Улучшение вычисления максимального количества EOS транзакций в секунду

Оригинал: https://forums.eosgo.io/discussion/1997/improving-eos-max-transactions-per-second-calculation/p1?new=1

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

Предположения

  1. Время блока всегда кратно 500 мс и никогда не равно нулю. Таким образом, вы можете иметь блоки длиной в 500 мс, 1000 мс, 1500 мс, 2000 мс и т. д. И у вас никогда не будет блока длиной в 0 мс, 300 мс, 750 мс, 1050 мс и т. д.

  2. Транзакции равномерно распределены в интервале времени, которое необходимо для добавления блока. Иными словами, скорость транзакций в пределах времени блока - постоянна. Поэтому, если блок с 6000 транзакциями добавляется на блокчейн за 6 секунд, TPS = 1000 в эти шесть секунд между добавлением предыдущего блока к этому.

  3. Мы хотим определять фактическое максимальные число транзакций в секунду, вместо максимальной скорости. Это значит, что если мы добавим 9000 транзакций на блокчейн за .5 секунды, будет достигнута скорость в 18000 TPS, но фактический максимум составит 9000 плюс количество транзакций, добавленных до и / или после этой .5 секунды, так что общее время рассмотрения будет составлять одну секунду.

  4. Отметки времени блока являются точными. На самом деле существует задержка между разными блок-продюсерами. Мы предлагаем рассматривать это как отдельную проблему позже. Задержка касается не блокчейна, а регистрации входа разных блок-продюсеров.

Некоторые термины

Давайте обозначим блоки, используя буквы 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

photo_122x122.jpg

Website

Telegram

Steemit

Twitter

GitHub

Meetup

0
0.024 GOLOS
На Golos с June 2018
Комментарии (0)
Сортировать по:
Сначала старые