Dfinity (ICP) - интернет-компьютер

Интернет-компьютер (IC) - это общедоступный блокчейн, который работает иначе, чем любой другой, находящийся в производстве, который вводит новые возможности и функции, которые в значительной степени дополняют децентрализованную экосистему. Архитектура сети в значительной степени опирается на философию проектирования Интернета и создается независимыми центрами обработки данных по всему миру, на которых установлено огромное количество специальных «узловых компьютеров» со стандартизованным оборудованием.

Вычислительная мощность этих узловых компьютеров сочетается с усовершенствованным протоколом цепочки блоков, называемым ICP (Internet Computer Protocol), который создает бесшовную вселенную, в которой может выполняться эволюция интеллектуальных контрактов, которые являются быстрыми и эффективными, называемыми «программными накопителями» или просто «контейнер» для краткости. В децентрализованных приложениях Ethereum могут использоваться контейнеры с программным обеспечением для расширения своих возможностей множеством интересных способов, включая масштабирование хранения и обработки данных и обслуживание веб-приложений.

Компьютерный узел Интернета. В настоящее время эту спецификацию выпускают четыре производителя. по состоянию на август 2020 г.

Интернет-компьютер другой

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

В сетях Proof-of-Work майнеры получают право добывать новые блоки с помощью повторяющегося хеширования и в долгосрочной перспективе создавать блоки пропорционально хешированию, которое они выполняют относительно всех остальных. В сетях Proof-of-Stake майнеры получают право чеканить новые блоки, храня токены на узлах, и в долгосрочной перспективе производить блоки пропорционально размеру их «ставки» по отношению ко всем остальным ставкам. Протокол ICP использует другой подход и вознаграждает независимые центры обработки данных за то время, которое они правильно управлять стандартизованными вычислительными узлами.

ICP вознаграждает работу узловых компьютеров, поскольку сеть особо заботится об их вычислительной мощности, поскольку она поддерживает целостную вселенную для смарт-контрактов и данных, которые она создает в киберпространстве («Интернет-компьютер»). В некотором смысле протокол представляет собой эволюцию Proof of Work, где повторяющееся хеширование было заменено любой полезной вычислительной работой, которую сеть требует от узлов. Когда сеть привлекает группы узлов из независимых центров обработки данных в подсети, в которых размещаются смарт-контракты, она требует от них общего поведения, а не конкурентного поведения, и вознаграждает узлы за создание среднего числа блоков, а не за их участие в соревнованиях, которые не выполняются. напрямую связано с функциональным назначением сети. Это лишь один из многих архитектурных столпов, которые Интернет-компьютер объединяет с передовой информатикой и криптографией, чтобы он мог масштабировать свою емкость по мере необходимости и эффективно размещать программное обеспечение и данные для смарт-контрактов, обеспечивая производительность на уровне или лучше традиционное облако во многих приложениях.

Помимо расширения возможностей децентрализованных приложений, проект Internet Computer преследует несколько других целей. Одним из них является создание общедоступной сети, которую можно использовать в качестве полной замены современного устаревшего ИТ-стека, включая облачные сервисы Big Tech и устаревшее инфраструктурное программное обеспечение, такое как файловые системы, веб-серверы, промежуточное программное обеспечение и базы данных. Другой - создание «открытых интернет-сервисов» (или OSI), которые построены на автономном программном обеспечении, управляемом токенизированными системами управления, которые могут заменить закрытые, проприетарные и часто монополистические услуги Big Tech, которые так проблематичны для пользователей и в настоящее время сдерживают инновации в Интернете. Он направлен на оживление экосистемы Интернета, позволяя сервисам без доверия обмениваться функциями и данными через неизменяемые API, обеспечивая возможность компоновки сервисов и позволяя начинающим предпринимателям получать лучшие сетевые эффекты в борьбе с централизованными операторами. Давняя цель проекта - продвинуть мир к будущему, в котором все услуги, программные системы и данные человечества живут на блокчейне.

CanCan, открытый клон TikTok на компьютере в Интернете, транслирующий видео на телефон

Интернет-компьютер работает иначе, чем традиционные блокчейны, и это позволяет разработчикам Ethereum относительно легко включать его возможности в свои децентрализованные приложения. Например, в то время как Ethereum требует, чтобы пользователи отправляли некоторую сумму ETH с каждой транзакцией для оплаты газа, который питает вычисления в результате вызова кода смарт-контракта, в Интернете компьютерные контейнеры (форма смарт-контрактов) предварительно заряжены  «циклами» (эквивалент газа) и платят сами за вычисления. Это означает, что пользователи могут взаимодействовать со службами, предоставляемыми контейнерами, без совершения платежей и, следовательно, нуждаются в настройке кошелька токенов, такого как MetaMask, а размещенный код может обслуживать веб-страницы и медиа-объекты непосредственно из киберпространства в веб-браузеры, например, даже если конечный пользователь анонимен.

Где подходит Интернет-компьютер

Один из способов мышления об Интернет-компьютере - это непрерывный переход от традиционной криптовалюты к высокооптимизированному компьютеру с блокчейном. В этом спектре находится Биткойн, который представляет собой чистую криптовалюту, разработанную как цифровое золото, через Ethereum, который представляет собой хорошо программируемую криптовалюту, способную поддерживать сложные DeFi, через Интернет-компьютер, который может запускать основные корпоративные системы и гипермасштабные интернет-сервисы. Все три являются блокчейнами, но обеспечивают разные вещи.

Сеть Ethereum в настоящее время находится в процессе перехода к модели Proof-of-Stake, которая позволит любому, у кого есть токены ETH, запускать сетевой узел, максимизируя анонимность участников и сопротивление государственной цензуре. Интернет-компьютер содержит «контейнеры с программным обеспечением», которые защищены от несанкционированного доступа, как и смарт-контракты Ethereum, но основная сеть образована большим количеством независимых центров обработки данных по всему миру, которые не являются анонимными, использующих стандартизированное вычислительное оборудование, чтобы предоставлять неограниченное количество данных. Масштабируемость и увеличение скорости и эффективности на много порядков. Протоколы Internet Computer также применяют гораздо более продвинутую криптографию и информатику, что затрудняет для разработчиков сообщества проведение исследований и разработок в одиночку, и поддерживается большой командой штатных инженеров и криптографов, которые в настоящее время распределены по четырем специализированным международным исследовательским центрам, а также удаленные команды. 

Интеграция Dapps с Интернет-компьютером

Подключившись к Интернет-компьютеру, децентрализованные приложения могут использовать его вычислительную мощность и уникальные функции, которые они предоставляют. Например, децентрализованные приложения могут поддерживать основную логику расчетов в Ethereum при использовании Интернет-компьютера для горизонтального масштабирования интенсивной обработки вычислений в недоверенной децентрализованной экосистеме или обслуживать веб-сайты непосредственно в веб-браузерах, устраняя необходимость запускать их на надежных, небезопасных и потенциально ненадежные проприетарные сервисы, такие как Amazon. Прежде чем рассматривать некоторые примеры, давайте сначала рассмотрим, как можно интегрировать код на Ethereum и код на Интернет-компьютере.

Примеры

Как обслуживать веб-сайт DeFi

Хотя мы можем создавать блестящие системы DeFi на Ethereum, используя надежные, защищенные от взлома и неудержимые смарт-контракты, пользователям этих систем часто приходится взаимодействовать с нашими контрактами, используя небезопасные, доверенные интерфейсы. Например, мы можем построить рынок прогнозирования с использованием смарт-контрактов Ethereum, которые могут, скажем, обрабатывать ETH и упакованные BTC. Система должна быть полностью неудержимой, защищенной от несанкционированного доступа и честной - и даже прозрачной, потому что люди могут даже сопоставить байт-код смарт-контракта в сети Ethereum с исходным исходным кодом Solidity на GitHub, что позволяет им просматривать задействованную логику обработки. Проблема в том, что чаще всего пользователям нужно будет взаимодействовать с контрактами, используя веб-сайт, который мы создали на надежной централизованной службе, такой как Amazon Web Services (AWS).

Это может пойти не так, как надо. Прежде всего, AWS выдает лицензии на свои услуги юридическим лицам, которые являются физическими или юридическими лицами, а не автономным кодом. Такие организации могут стать юридически ответственными за системы DeFi, которые в остальном децентрализованы и открыты, и AWS также может просто решить, что он хочет прекратить предоставлять свои услуги, и просто выключить веб-сайт. Более того, веб-сайт работает на надежной платформе, которую можно взломать. Веб-сайт может быть взломан злонамеренным сотрудником Amazon, сторонним хакером или лицензирующая организация может быть злонамеренной. У пользователя нет гарантии, что просматриваемый им веб-сайт не был изменен, что может иметь катастрофические последствия. Их могут заставить подписать плохую транзакцию, рыночная информация, которую они просматривают, может быть отредактирована или неверна, а веб-страница может задержать отправку их заказов, например, чтобы кто-то мог их опередить. Это всего лишь очевидные проблемы, и изучение безопасности вспомогательных систем, таких как DNS, раскрывает еще больше.

Чтобы избежать этого беспорядка, вместо использования AWS для обслуживания веб-сайтов мы можем создавать безопасные веб-интерфейсы для наших децентрализованных приложений, устанавливая контейнеры на Интернет-компьютере. Они могут обеспечить взаимодействие с пользователем, основанное на так называемых «запросах», которые не обеспечивают такой же уровень подавляющей безопасности, как «вызовы обновления» (эквивалент стандартного выполнения транзакции в Ethereum), но выполняются с молниеносной скоростью, оставаясь при этом обеспечивая очень высокий уровень безопасности, обеспечивая гораздо более надежную и безопасную работу, чем можно было бы достичь в противном случае.

Чтобы создать интерфейс компьютера с Интернетом для dapp, выполните следующие действия:

  1. Попросите смарт-контракты Ethereum пересылать копии данных, требуемых веб-сайтом, во внешние накопители на Интернет-компьютере. Попросите контейнеры кэшировать последнюю копию данных в их состоянии.
  2. Разработайте веб-сайт, который будет безопасно обслуживаться из клиентских контейнеров непосредственно из киберпространства в веб-браузеры, генерируя контент из самой последней копии пересылаемых данных.
  3. Спроектируйте, как пользователи создают транзакции Ethereum, например, для отправки и заказа. Либо просто вставьте такую ​​систему, как MetaMask, внутрь обслуживаемых страниц, чтобы транзакции можно было отправлять прямо в сеть Ethereum изнутри страниц, либо сначала сообщите о заказах в накопитель, и его код сгенерирует транзакцию Ethereum (обратите внимание, что для этого требуется «цепочка key», поэтому начнем с первого метода).

Невероятный веб-сайт LinkedUp OSI, продемонстрированный в Давосе в январе 2020 года (бронзовая веха)

Как хранить и обрабатывать большие наборы данных

Хранение 1 ГБ данных внутри смарт-контракта в сети Ethereum будет стоить миллионы долларов, что может сделать чрезмерно дорогое обслуживание чего-либо, кроме фидуциарных данных. Напротив, стоимость хранения 1 ГБ данных внутри накопителя на Интернет-компьютере в течение некоторого значительного периода времени может стоить всего несколько центов, обеспечивая невероятное решение для децентрализованных приложений Ethereum, которым необходимо поддерживать и обрабатывать большие наборы данных. На Интернет-компьютере для доступа к данным и их изменения требуется предсказуемое количество циклов, которые сами привязаны к традиционным валютам, что делает управление хранилищем очень простым и предсказуемым для децентрализованных приложений.

Разработчикам невероятно легко хранить данные в Интернете на компьютере. Причина, по которой контейнеры называются «контейнерами», а не «смарт-контрактами», заключается в том, что они фактически представляют собой связки кода и состояния. Под капотом контейнера скрывается логика смарт-контракта в виде байтового кода WebAssembly, который разработчик создал путем компиляции высокоуровневого кода с использованием языка программирования, такого как Motoko или Rust, а также состояние, которое состоит из тех самых страниц памяти, внутри которых работает логика смарт-контракта (в роли программного «актера», для заинтересованных). На компьютере с Интернетом нет файлов или API-интерфейсов баз данных - сохранение данных происходит автоматически в системе «ортогонального сохранения».

Это означает, что разработчики могут писать код так, как будто он будет работать вечно, и что переменные, объекты, коллекции и другие экземпляры типов в их высокоуровневом коде никогда не будут сброшены, и, следовательно, их достаточно для поддержания своего состояния. По сути, архитектура Интернет-компьютера позволяет ему сохранять страницы памяти от имени кода смарт-контракта, чтобы программист мог просто описывать абстракции высокого уровня для хранения и обработки данных, устраняя один из самых больших источников сложности и головной боли при программировании. а также открытие нового уровня эффективности.

Ортогональное постоянство означает, что сохранение профиля пользователя может быть таким же простым, как его присвоение объекту карты, как показано ниже:

Храните данные в стандартном объекте HashMap. Интернет Компьютерная память постоянна 

Каждый контейнер может поддерживать до 4 ГБ страниц памяти. Но если этого недостаточно, система может состоять из любого количества взаимодействующих накопителей, так что не существует верхней границы общего количества данных, которые они могут поддерживать. Более того, разработчику нет необходимости поддерживать несколько накопителей самостоятельно, поскольку они могут просто импортировать, скажем, накопитель BigMap, который обеспечивает горизонтально масштабируемую функциональность карты, которая позволяет эксабайтам данных объекта находиться в основной памяти, как показано ниже:

BigMap поддерживает сеть накопителей, чтобы вы могли хранить в памяти эксабайты данных

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

Архитектура Dfinity (ICP)

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

Сетевая нервная система

Интернет-компьютер основан на компьютерном протоколе цепочки блоков, который называется Интернет-компьютерным протоколом (ICP). Сама сеть построена из иерархии строительных блоков. Внизу расположены независимые центры обработки данных, в которых размещены специализированные аппаратные узлы. Эти узловые машины объединяются для создания подсетей. В подсетях размещаются накопители программного обеспечения , которые представляют собой совместимые вычислительные блоки, загружаемые пользователями и содержащие как код, так и состояние.

Одним из элементов, делающих ICP уникальным, является сетевая нервная система (NNS), которая отвечает за контроль, настройку и управление сетью.

Центры обработки данных присоединяются к сети, подав заявку в NNS, которая отвечает за создание центров обработки данных. Хотя сама NNS имеет открытую систему управления, она контролирует разрешения на участие в сети. В некотором смысле он играет роль, эквивалентную ICANN в Интернете, которая, среди прочего, назначает номера автономных систем тем, кто хочет использовать маршрутизаторы BGP. NNS выполняет широкий спектр ролей по управлению сетью, включая мониторинг узловых машин для поиска статистических отклонений в компьютерной сети Интернет, которые могут указывать на недостаточную производительность или неправильное поведение.

NNS также играет ключевую роль в экономике токенов сети. NNS генерирует новые токены ICP (ранее известные как токены DFN) для вознаграждения узлов, управляемых центрами обработки данных, и нейронов, голосующих в NNS, и именно так он принимает решения по предложениям, которые ему подаются. Когда NNS создает новые токены ICP для вознаграждения центров обработки данных и нейронов, это вызывает инфляцию.

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

Подсети

Чтобы понять Интернет-компьютер, вы должны понять концепцию подсетей, которые являются фундаментальным строительным блоком всей сети. Подсеть отвечает за размещение отдельного подмножества накопителей программного обеспечения, размещенных в компьютерной сети Интернет. Подсеть создается путем объединения узловых машин, взятых из разных центров обработки данных, способом, контролируемым NNS. Эти узловые машины взаимодействуют через ICP для симметричной репликации данных и вычислений, относящихся к программным накопителям, которые они размещают.

NNS объединяет узлы из независимых центров обработки данных при построении подсетей. Это позволяет математическим вычислениям протокола ICP гарантировать, что подсети защищены от несанкционированного доступа и их невозможно остановить, с использованием византийской отказоустойчивой технологии и криптографии, разработанных DFINITY. Хотя подсети являются основными строительными блоками всей компьютерной сети Интернет, они прозрачны для пользователей и программного обеспечения. Пользователям и программному обеспечению накопителя необходимо знать только идентификатор накопителя для вызова общих функций.

Эта прозрачность является продолжением фундаментальных принципов дизайна Интернета. В Интернете, если пользователь хочет подключиться к какому-либо программному обеспечению, ему нужно знать только IP-адрес машины, на которой запущено программное обеспечение, и TCP-порт, который программа прослушивает. На Интернет-компьютере, если пользователь желает вызвать функцию, ему нужно знать только идентификатор контейнера и подпись функции. Точно так же, как Интернет создает бесшовное соединение, DFINITY создала целостную вселенную для программного обеспечения, где любое программное обеспечение, имеющее разрешение, может вызывать любое другое программное обеспечение напрямую, не зная ничего о базовой работе сети.

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

В этом примере у нас есть воображаемая подсеть ABC, в которой размещено 11 накопителей. NNS приказывает разделиться. Подсеть ABC продолжается с накопителями 1–6, и создается новая подсеть, Subnet XYZ, которая продолжается с накопителями 7–11. Ни одна из задействованных контейнеров не должна была перебиваться в обслуживании.

Когда вы загружаете свои контейнеры в Интернет-компьютер, вы должны выбрать определенный тип подсети. На самом деле существует специальная подсеть, в которой размещается NNS, но вы не можете загружать туда свои накопители. Вместо этого вы должны выбрать тип подсети, такой как «данные», «система» или «фидуциар».

Каждый тип подсети придает накопителю определенные свойства и возможности. Например, если ваш накопитель размещен в подсети данных, он может обрабатывать вызовы, но не может выполнять вызовы в другие накопители. Для этого вам понадобится системная подсеть. Если вы хотите, чтобы ваш накопитель мог хранить остатки токенов ICP или отправлять циклы в другие накопители, вам понадобится фидуциарная подсеть. И по этим причинам контейнеры управления могут размещаться только в фидуциарных подсетях.

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

Контейнеры

Назначение подсети - разместить накопители. Накопители работают внутри выделенных гипервизоров и взаимодействуют друг с другом через публично указанный API. Внутри контейнера находится байт-код WebAssembly, который может выполняться на виртуальной машине WebAssembly и на страницах памяти, в которых он выполняется. Обычно этот байт-код WebAssembly создается путем компиляции языка программирования, такого как Rust или Motoko. Этот байт-код будет включать среду выполнения, которая упрощает для разработчика взаимодействие с API.

Примечание. Показанный здесь пример кода является псевдокодом.

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

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

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

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

В этом примере пользователь запрашивает настраиваемую ленту новостей и почти сразу получает обратно созданный контент.

Ортогональная настойчивость

Одна из самых интересных особенностей Internet Computer - это способ, которым разработчики сохраняют данные. Разработчикам не нужно думать о постоянстве - они просто пишут свой код, и постоянство происходит автоматически. Это называется ортогональной стойкостью. Это потому, что Интернет-компьютер сохраняет страницы памяти, в которых выполняется код.

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

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

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

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

Масштабируемость

Теперь дается общее объяснение масштабируемых интернет-сервисов. Контейнеры имеют верхние пределы для различных типов вместимости. Например, накопитель может хранить только 4 ГБ страниц памяти из-за ограничений реализаций WebAssembly. По этой причине, когда мы хотим создать интернет-сервисы, масштабируемые для миллиардов пользователей, мы должны использовать архитектуру с несколькими накопителями.

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

Это правда, что каждый дополнительный контейнер увеличивает общий объем памяти. Также верно и то, что каждый дополнительный накопитель увеличивает общую пропускную способность вызовов обновлений и запросов. Но мы не можем масштабировать запросы запроса для контента конкретного пользователя. Нам также необходимо перебалансировать пользовательский контент всякий раз, когда мы увеличиваем емкость системы, добавляя больше сегментов накопителя, и это не совсем хорошая периферийная архитектура. Также нет очевидного способа обслуживать запросы запросов к конечным пользователям из реплик, находящихся в непосредственной близости от них. Нам понадобятся как передние, так и задние контейнеры.

Интернет-компьютер предоставляет несколько интересных функций для подключения конечных пользователей к интерфейсным накопителям. Один из них позволяет отображать доменные имена на несколько накопителей переднего плана через NNS. Когда конечный пользователь желает разрешить такое доменное имя, Интернет-компьютер просматривает совокупность узлов-реплик во всех подсетях, в которых размещены накопители внешнего интерфейса, и возвращает IP-адреса узлов-реплик, находящихся в непосредственной близости. Это приводит к тому, что конечный пользователь выполняет запросы к ближайшим репликам, сокращая внутреннюю задержку сети и улучшая взаимодействие с пользователем, обеспечивая преимущества периферийных вычислений без сети распространения контента.

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

Прежде всего, веб-браузер будет сопоставлен с накопителем внешнего интерфейса, который работает в подсети с ближайшим узлом. Затем веб-браузер отправит запрос на вызов, чтобы получить фотографию в этот ближайший узел.

Затем внешний накопитель отправит запрос запроса между накопителями в накопитель корзины данных, в котором хранится фотография.

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

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

Со временем кеши запросов узлов накапливают статический контент и генерируют данные, которые представляют интерес для ближайших пользователей, обеспечивая им более быстрый и лучший пользовательский интерфейс. Таким образом, собственная периферийная архитектура Интернет-компьютера обеспечивает преимущества сети распространения контента, но без необходимости разработчикам делать что-то особенное и без необходимости прибегать к помощи отдельной проприетарной службы.

Для вызовов обновления классическая архитектура использует другой подход. Необходимо сериализовать обновления содержимого и данных пользователя, чтобы предотвратить такие проблемы, как потеря обновлений. Обычно это достигается путем сопоставления пользователя с конкретным клиентским накопителем, например, просто путем хеширования его имени пользователя.

Как только UX / UI, работающий в веб-браузере или на смартфоне, определил, какой интерфейсный накопитель отвечает за координацию изменений некоторого контента или данных, он может изменить этот контент или данные, отправив вызов обновления в свой стандартный интерфейс.

Затем этот интерфейсный накопитель обычно делает больше вызовов обновления между накопителями, чтобы произвести необходимые изменения.

Открытые интернет-сервисы

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

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

Наконец, чтобы создать по-настоящему открытый интернет-сервис, вы возложите ответственность за все свои накопители на открытый накопитель с токенизированным управлением. Если вы предприниматель, вы соберете средства на развитие, продав некоторые из этих токенов управления на первых порах. И вы, вероятно, создадите схемы, которые будут стимулировать ранних участников вашего интернет-сервиса, давая им токены управления, чтобы получить лучший сетевой эффект - и выиграть.