Оригинал: https://forums.eosgo.io/discussion/1997/improving-eos-max-transactions-per-second-calculation#latest
Целью этого поста является поделится предложенной нами методологией калькуляции транзакций в секунду на EOS блокчейн и призвать вас детально ознакомится с ней, а также получить вашу конструктивную критику по этому поводу. Наша мотивация частично состоит в том, чтобы показать точную и надежную информацию на EOS Network Monitor.
Предположения
Блоктаймы всегда кратны 500 мс и никогда не равны - нулю. Это значит, что у вас могут быть блоктаймы 500 мс, 1000 мс, 1500 мс, 2000 мс и т.д. И вы никогда не получите блоктаймы 0 мс, 300 мс, 750 мс, 1050 мс и т.д.
Транзакции поровну распределены на интервалы времени, нужного для добавления блока. Другими словами, скорость транзакций внутри блоктайма неизменна. Это значит, что если блок из 6000 транзакций добавляется в блокчейн за 6 секунд, TPS = 1000 для всех 6 секунд между добавлением предыдущего блока к следующему.
Мы хотим сообщить об актуальном максимуме транзакций за секунду, как противоположный скоростям максимумов. Предположим, что мы добавляем 9000 транзакций в блокчейн за 5 секунд, это достигается скоростью 18000 TPS, но актуальный максимум был бы 9000 плюс количество транзакций добавленных до и/или после этой полсекунды, так как общее время считается - одна секунда.
Блок 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
Hi! I am a robot. I just upvoted you! I found similar content that readers might be interested in:
http://www.ta4mx.blogspot.gr/2011/09/blog-post_16.html