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

in #eos6 years ago

Оригинал: https://forums.eosgo.io/discussion/1997/improving-eos-max-transactions-per-second-calculation#latest

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

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

  1. Блоктаймы всегда кратны 500 мс и никогда не равны - нулю. Это значит, что у вас могут быть блоктаймы 500 мс, 1000 мс, 1500 мс, 2000 мс и т.д. И вы никогда не получите блоктаймы 0 мс, 300 мс, 750 мс, 1050 мс и т.д.

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

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

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

Несколько условий

Обозначим блоки, используя буквы: A, B, C и т.д.

Назовем количество транзакций в каждом блоке: NA, NB, NC и т.д.

Установим блоктайм блока B как timestamp блока В минус timestamp блока А выраженный в секундах. И будем использовать TA, TB, TC и т.д. чтобы ссылаться на timestamps.

Определим TPS Run Rate блока делением количества транзакций на timestamp. Таким образом, TPS Run Rate блока В будет исчисляться как NB/TB. Обозначим TPS Rates для каждого блока как RA, RB, RC.

Пример:

Если NB = 10, и TB = .5, то RB ровно 20. За полсекунды, нужной для добавления блока В, 10 транзакций были добавлены в EOS блокчейн. В рамках этой полсекунды были добавлены транзакции со скоростью 20 за секунду. RB = 20.

Калькуляция TPS в нормальных условиях (все блоктаймы равны 500 мс)

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

NA + NB
NB + NC
и т.д.

Никогда не нужно считать, что секунда состоит из трех блоков, иными словами говоря, от timestamp блока В минус 250 мс и к timestamp блока С плюс 250 мс.

Что является причиной нестандартных блоктаймов?

Мы сделали быстрый анализ нестандартных блоктаймов для 100,000 блоков начиная с блока # 11.

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

100,000 проанализированных блоков 1,319 имели нестандартные блоктаймы, или в процентах это - 1,3%.
Из них 72% были с блоктаймами 1000 мс.

95 блоков, или 7,2% с нестандартными блоктаймами имели блоктайм >= 3000 мс.

Наихудшие блоктаймы были следующие: 12500 мс (1 пример), 9000 мс (1), 8500 (2), 7500 (1), 7000 (1), and 6500 (20).
Более очевидной причиной нестандартных блоктаймов кажется является переход от одного Блок Продюсера к другому. Только 108 блоков, или 8,2 % из числа с нестандартными блоктаймами были изготовлены тем же BP, который выпустил предыдущий блок.

С 95 блоков, блок тайм которых >= 3000 мс, только один был изготовлен тем же BP, который изготовил предыдущий блок.

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

Наверное нам следовало бы сделать более всестороннее изучение ВСЕХ блоков и посмотреть есть ли корреляция между количеством транзакций и ЛЮБЫМИ нестандартными блоктаймами.

Вычисление MAX TPS в EOS

Вот основная идея этой статьи. Мы ожидаем вашу конструктивную критику по поводу этой методологии:

Проверка 1

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

  • Если TB = .5, то искомое значение MAX TPS рассматривается следующим образом

RB(TB)+RA(1-TB)

или так как TB = .5, мы можем использовать

(RB + RA)/2

  • Если TB >= 1, то искомое значение MAX TPS рассматривается следующим образом

RB/TB

Крайний пример

Этого почти достаточно, но не будем пренебрегать рассматриванием TPS в следующем крайнем примере:

TA = .5, NA = 1
TB = .5, NB = 1000
TC = 1, NC = 4

(почти пустой блок, следующий за быстрым блоком с множеством транзакций, за которым следует медленный блок из средним количеством транзакций)

Используя только вышеизложенную логику, мы пришли к итогу что Max TPS за 2 секунды, нужное для изготовления этих трех блоков вычисляется как 1001 (RA + RB)/2.

Проверка 2

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

  • Если мы столкнемся со случаем где TC >= 1 AND TB < 1, то мы считаем искомое значение Max TPS следующим образом

RB(TB) + RC(1 - TB)

или так как TB = .5, мы можем использовать

(RB + RC)/2

В проверке 2, передовой пример изложенный выше, приводит к результату, где Max TPS является (RB + RC)/2 or 1002.

Итоги

Мы думаем, что это прочный подход к калькуляции MAX TPS. С нетерпением ждем ваших комментариев и конструктивную критику.

CryptoLions

photo_122x122.jpg

Website

Telegram

Steemit

Twitter

GitHub

Meetup

Coin Marketplace

STEEM 0.19
TRX 0.15
JST 0.029
BTC 62948.49
ETH 2583.15
USDT 1.00
SBD 2.74