Вчера, без дела просматривая новости в圈内, я вдруг увидел, что активные пользователи Pixels преодолели отметку в 153000 человек. Молодежь в чате была в восторге и кричала, что рынок на подъеме, нужно срочно влезать, но я, как опытный разработчик, который почти десять лет копается в круге Web3 и кодах, первым делом не закричал "Как здорово, я хочу войти!", а вместо этого в голове зазвучал вопрос, который мне кажется важным — это же десятки тысяч людей, распределенных по многим странам мира. Игровой сервер настроен на полное обновление состояния фермы каждые 100 миллисекунд. Подумайте, как из нашего сингапурского дата-центра отправить этот пакет данных на мобильный телефон или компьютер игрока в Бразилии, сколько миллисекунд на это уйдет?

Мы все играли в традиционные игры Web2, такие как особенно популярная многопользовательская версия (Stardew Valley), даже с задержкой 200 миллисекунд, мы просто чувствовали, что при рубке деревьев небольшая задержка, но все равно могли наслаждаться игрой, но Pixels не является чисто традиционной игрой, у нее в основе лежит блокчейн, что означает, что каждый раз, когда вы с трудом собираете редкий урожай, это должно быть зафиксировано как NFT в цепи! Этот "период подтверждения на цепи" можно сказать, полностью разрушает прежние простые экономические расчеты синхронизации состояния серверов, давайте сегодня заварим чашку чая и хорошо обсудим архитектуру технологий, стоящую за этим!

Первый рубеж: иллюзия 100 миллисекунд и физические пределы через океан

Как обычно, давайте начнем с самой нижней технической архитектуры и "анализируем" ее, согласно логике синхронизации современных игровых серверов, поскольку Pixels позиционируется как игра, ориентированная на расслабление и социальное взаимодействие, скорее всего, она использует систему "синхронизации состояния", а не требующую строгой "синхронизации кадров" - что такое синхронизация состояния? Проще говоря, это когда сервер владеет единственной "истиной" о мире, а игроки видят только "результаты судьи", которые посылает сервер, он говорит, что вы посадили, значит, вы и посадили; а синхронизация кадров, используемая в киберспортивных играх, требует, чтобы все игроки выполняли полный расчетный экземпляр, при этом, если все вводимые команды совпадают, конечное состояние мира будет абсолютно一致!

Выбор Pixels для синхронизации состояния - это просто очевидно, ведь посадка морковки не требует той предельной точности, как в DOTA, где обновление кадра происходит каждые 16,67 миллисекунд. 100 миллисекунд интервалов для вещания, для нас, кто наблюдает за медленным ростом растений и маленькими животными на карте, абсолютно достаточно!

Но! Проблема заключается именно в этих двух словах "глобальный" - посмотрите, насколько ужасно распределение географической задержки в физическом мире - если у нас в Сингапуре задержка составляет всего 20 миллисекунд, то наши друзья на западном побережье США сталкиваются с 80 миллисекундами, игроки в Европе, возможно, имеют 120 миллисекунд, а в Южной Америке задержка может достигать 200 миллисекунд и даже выше! Вчера я сидел за компьютером, глядя на глобус, и подсчитывал, если бы команда Pixels была достаточно доброй, чтобы развернуть узлы серверов в трех основных глобальных регионах, например, в Азии в Сингапуре, в Европе во Франкфурте и в Америке в Вирджинии, согласно данным о качестве сети, предоставленным ведущими облачными провайдерами, в одном регионе мы действительно можем удерживать задержку в пределах 20-50 миллисекунд, но как только выходит за пределы региона? Тогда придется страдать от физических задержек в 100-200 миллисекунд! Это означает, что если игрок из Сингапура и игрок из Бразилии случайно взаимодействуют на одной и той же ферме, пакет данных для синхронизации состояния должен пройти из Сингапура через океан в Вирджинию, а затем до Бразилии, что приведет к задержке более 300 миллисекунд!

Но игра на стадии нижнего уровня фиксирует каждую 100 миллисекундную трансляцию, не так ли это неловко? На самом деле весь ритм сервера будет жестко зависеть от самого медленного игрока, перед проектом открываются только два пути: либо снижать частоту трансляции, например, до 200 миллисекунд; либо заставить быстрых игроков с хорошей сетью ждать медленных игроков, хотя они могут также попробовать "распределить сервера по регионам", но как только сервера разделяются, то так называемое "глобальное совместное серверное" видение Web3 становится чистым маркетинговым трюком!

Второй рубеж: подсчитайте эту запутанную "цепочку" из 150000 одновременных операций

Но это еще не все, более серьезной проблемой является невидимая задержка блокчейна, это действительно становится критичным местом! Вы видите, Pixels сейчас использует тот подход, при котором частые и не критичные игровые состояния обрабатываются на централизованных серверах вне цепи, только при столкновении с ключевыми событиями, такими как создание NFT и перевод токенов, данные фиксируются на цепи Ronin! Мы все знаем, что Ronin была специально создана для игр, среднее время подтверждения блока составляет около 3 секунд, а комиссия за одну транзакцию составляет примерно 0,003 доллара, звучит неплохо, не так ли?

Но не забудь, что это имеет сравнение. Если бы Pixels в свое время на горячую голову запустился на основной сети ETH, то картинка была бы просто невыносимой - даже если каждый раз состояние просто бросает хэш-резюме на цепь, учитывая среднее время подтверждения блока в 12 секунд и стоимость газа в 2 доллара, это не игра, это сжигание денег; если бы это было на цепи BTC, то это было бы еще более магическим, подтверждение заняло бы 10 минут, а комиссия начиналась бы с 10 долларов! Брат, подумай, для игры, которая требует скорости отклика в 100 миллисекунд, 10 минут на BTC и 12 секунд на ETH - это как если ты заказал срочную доставку в одном городе, а тебе прислали повозку, которая медленно доедет, и ты уже умираешь от нетерпения, именно поэтому, спустя столько лет, так называемая "игра на всей цепи" до сих пор не имеет даже тени массового распространения, базовая инфраструктура этого просто не позволяет!

Как старый разработчик, я просто не могу сдержать любопытство и сам смоделировал самый экстремальный сценарий стресс-тестирования: посчитай, если 150000 активных пользователей Pixels одновременно онлайн в пиковый период, предположим, каждый нажимает мышь один раз в секунду, что-то перемещает, сажает семена, поливает, тогда весь сервер должен будет выдержать 150000 операций в секунду! Если эта игра действительно "вся на цепи", это означает, что на цепи должно обрабатываться 150000 транзакций в секунду, то как ты думаешь? TPS основной сети ETH в настоящее время достигает не более 30, если действительно запустить эту игру, потребуется увеличить мощность в 5000 раз; TPS BTC составляет около 7, значит, потребуется увеличить его более чем в 20000 раз, чтобы выдержать это!

Так что, на самом деле, перед Pixels стоит не какой-то многоуровневый вопрос, эта смешанная архитектура - единственное решение, которое может спасти - сервера вне цепи изо всех сил выдерживают 150000 высокочастотных фрагментированных операций в секунду, а в цепи спокойно обрабатывают менее одного процента ключевых событий активов, примерно 1500 операций в секунду! В это время, хотя TPS от Ronin, который составляет 20, выглядит немного напряженным, но с небольшими доработками в области пакетной упаковки это еще можно использовать, TPS в 30 от ETH тоже сойдет, но учитывая, что между ними разница в целых 1000 раз по стоимости, дурак поймет, кого выбирать, верно?

Третий рубеж: эта проклятая "оптимистичная синхронизация" и вакуумный период трансакций между странами

Но не радуйтесь слишком рано, здесь скрыт один супер глубокий ловушка - это задержка ожидания при синхронизации серверов вне цепи на глобальном уровне! Pixels в этих трех крупных регионах мира должны постоянно поддерживать一致ность состояния игры, иначе возникают крайне абсурдные "паранормальные явления": например, в Азии я уже собрал идеальную тыкву, но игроки в Америке видят, что тыква все еще растет на их экранах, если данные не совпадают, экономика игры просто рухнет! Ранее, когда мы занимались традиционными играми Web2, используем главные и вторичные базы данных с обработкой данных CDC, потратив немного денег на каналы, мы могли легко сдерживать задержку ниже 50 миллисекунд, но с Pixels это не так, над ними висит меч, называемый "подтверждение активов на блокчейне"! Любое состояние, связанное с изменением активов, например, если вы только что нашли предмет легендарного уровня, сервер вне цепи может синхронизироваться мгновенно, но он должен будет ждать долгие 3 секунды подтверждения на цепи от Ronin, прежде чем это будет окончательно закреплено!

Это также означает, что синхронизация состояний между серверами в разных регионах на самом деле застревает в этой трехсекундной цепной подтверждающей блокировке, сейчас в индустрии распространенная практика - это создание механизма "оптимистичной синхронизации": то есть сервер сначала предполагает, что ваше действие успешно, позволяет игре продолжать, а если через 3 секунды выясняется, что сделка на цепи не удалась или произошел сбой, сервер вынужден откатить ваше состояние игры! Честно говоря, такой дизайн крайне испытывает навыки написания логики разрешения конфликтов, иначе игроки просто взорвутся от разочарования!

Говоря об этом, есть одна более важная логика, которую я до сих пор не совсем понимаю - как они вообще обеспечивают абсолютную безопасность трансакций активов между регионами? Представьте себе такой сценарий: опытный игрок из Сингапура хочет продать свою дорогую землю NFT бразильскому покупателю, на уровне серверов вне цепи это всего лишь изменение нескольких строк кода, статус земли мгновенно переносится; но на уровне блокчейна, реальное правомочное перемещение собственности должно ждать трехсекундного подтверждения блока от Ronin! Это создает крайне опасный "вакуумный период" - в течение этих коротких трех секунд земля на экране игры уже отображается как принадлежащая бразильскому парню, но при проверке блокчейна все еще находит имя старого игрока из Сингапура!

Если в этот критический трехсекундный период один из основных серверов внезапно выйдет из строя или сеть подвергнется резким колебаниям, состояние может быть потеряно или возникнет смертельная логическая ошибка! Посмотрите, хотя транзакции BTC медленные, как улитки, и требуют 10 минут, но как только они подтверждены, это абсолютно неоспоримый факт; ETH требует 12 секунд, но это тоже окончательное подтверждение! Только Pixels сейчас использует эту трехсекундную цепочку подтверждений, сочетая с "оптимистичной синхронизацией" вне цепи, фактически создает в системе крайне хрупкое "временное несоответствие", что для активов типа NFT земли, стоимость которых может достигать нескольких тысяч или даже десятков тысяч долларов, просто ходить по канату!

Четвертый рубеж: "телепортация призраков" в сетевых колебаниях

Давайте углубимся в детали сетевых колебаний и потерь пакетов, согласно ныне признанным стандартам оценки задержки в игровом сообществе, задержка от 1 до 30 миллисекунд считается очень быстрой, 31 до 50 миллисекунд - это неплохо, 51 до 100 миллисекунд - это уже с трудом играемая обычная задержка, а если более 100 миллисекунд, то это уже только негативные отзывы! Сейчас Pixels упорно держится за интервал трансляции в 100 миллисекунд, это означает, что как только ваша задержка сети превысит 100 миллисекунд, вы без сомнения пропустите крайне важный пакет обновления состояния, и вам придется просто ждать, пока не придет следующий пакет данных за 100 миллисекунд, чтобы "спасать" ситуацию! Если ваша сеть еще хуже и процент потери пакетов составляет 5%, это означает, что из каждых 20 трансляций сервер теряет 1, и это отражается на вашем экране: игроки, которые рядом с вами, внезапно "телепортируются" на некоторое расстояние, или ваше движение с лопатой зависает в воздухе!

Когда мы занимались традиционными играми, в таких случаях мы просто использовали протокол UDP с механизмом повторной передачи, добавили немного предсказательной компенсации на клиенте, и это в основном могло обмануть игроков, чтобы они этого не заметили; но с Pixels это не сработает, ведь это связано с блокчейн-проверкой, если действия клиента предсказаны неверно, вы не можете просто заменить их новыми данными, как раньше, вам придется пройти через крайне сложный и дорогостоящий процесс отката в цепи, и эта цена является непосильным бременем для команды проекта!

Пределы и окончательные расчеты старого игрока

Так что сейчас я, как старый боец, каждый день больше всего наблюдаю не за их замысловатыми графиками токенов, а за тем, достаточно ли Pixels осмелится раскрыть свою карту распределения серверов по всему миру и реальную панель мониторинга задержек! Если они действительно готовы инвестировать, развернув серверы высокой производительности в ключевых узлах Северной Америки, Европы и Азии, и могут с уверенностью гарантировать, что задержка для большинства игроков останется ниже 100 миллисекунд, тогда я действительно подниму большой палец и скажу, что эта архитектура действительно впечатляющая и зрелая; но если выяснится, что из-за экономии они полагаются только на один центральный сервер в Сингапуре, в то время как старые друзья из Европы и Америки должны ежедневно терпеть задержку более 200 миллисекунд, то так называемая "глобальная совместная экосистема" будет чистым маркетинговым трюком, обманом для инвесторов! Кроме того, стабильность времени блока на цепи Ronin - это вопрос первостепенной важности - если эта цепь выглядит нормально, но во время пиковых периодов загрузки сеть перегружена, и время блока увеличивается с 3 секунд до 10 секунд или даже дольше, это полностью разрушит все технические предположения о плавной синхронизации состояний вне цепи, и вся экономика игры может в этом случае зависнуть!

В конечном счете, если вы разберете все эти технические слои, вы обнаружите, что установленный Pixels интервал вещания в 100 миллисекунд по сути является вынужденным компромиссом между игровым опытом игроков и высокими затратами на серверную архитектуру! Если бы интервал был сокращен, например, до 50 миллисекунд, это действительно было бы плавно, но команде проекта пришлось бы арендовать больше серверов высшего класса и покупать более дорогие международные каналы, это стоимость может моментально разорить команду проекта; но если бы интервал был увеличен до 200 миллисекунд, игроки бы почувствовали, что игра абсолютно "не отзывчивая", медлительная, как полуобездвиженный продукт! Я размышляю об этом загадочном числе в 100 миллисекунд, которое, безусловно, является критической точкой, найденной их командой в течение многих дней и ночей: в конце концов, мы не играем в FPS-шутеры, где требуется мгновенное реагирование, 100 миллисекунд уже достаточно, чтобы анимация роста моркови выглядела плавной и естественной; но это отличается от игр, где каждый ход требует времени, нельзя на самом деле терпеть задержки в несколько секунд! Это решение, найти баланс в этом, аналогично тому, как Bitcoin решительно выбрал 10 минут на подтверждение для обеспечения безопасности, в то время как Ethereum выбрал 12 секунд для увеличения доступности, это все выборы высших архитекторов в философии дизайна!

Мой собственный вывод, который я сделал с помощью бумаги и ручки до глубокой ночи, состоит в том, что нынешнее глобальное распределение задержек в 150000 игроков в Pixels, скорее всего, варьируется от гладких 20 миллисекунд у местных игроков в Азии до болезненных 200 миллисекунд у игроков в Южной Америке, медиана примерно в диапазоне от 80 до 120 миллисекунд, вот так и проверяем! Откровенно говоря, этот уровень сетевой задержки, если он позволяет всем заниматься различными делами, собирать дерево и заниматься другими чисто развлекательными действиями, действительно может быть с трудом принятым; но если игра впоследствии станет более амбициозной и захочет создать что-то с высокой степенью взаимодействия в реальном времени, даже для событий PVP, где требуется позиционирование, то эта задержка, безусловно, станет катастрофой! А все эти проблемы коренятся в неизбежных задержках подтверждения блокчейна и врожденной потребности игры в实时 взаимодействие, между ними существует огромная пропасть, которую невозможно примирить. Пока мы не решим эту проблему, мы не можем расслабляться. Я все еще внимательно слежу за этими экономическими расчетами на уровне технологий, давайте меньше смотреть на рекламные сообщения и больше ждать фактических данных о задержках!

$BTC $PIXEL @Pixels #pixel

PIXEL
PIXELUSDT
0.006199
+6.89%