Действительно ли граничные вычисления быстрее? Сравнительный анализ пограничных платформ (с базами данных)

TLDR

Я создал платформу для запуска ваших приложений и данных на периферии с помощью TypeScript (Bun и Deno) и SQL с высокой согласованностью (совместимость с PostgreSQL, которая работает с Prisma!).

Подпишитесь на Ранний доступ

Что такое край?

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

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

Я читал много статей, в которых говорится о том, что периферия — это будущее облачных вычислений. Такие платформы, как Cloudflare, Vercel и Deno, добились больших успехов в этом направлении. В Cloudflare есть Workers, ПО промежуточного слоя и функции Vercel Edge, а также Deno, позволяющий запускать Deno и WebAssembly на периферии. Обещания низкой задержки, высокой масштабируемости и нулевого холодного запуска — это то, что многие из нас могли бы извлечь выгоду из наших веб-приложений, и эти компании предлагают отличные решения на пути к достижению этой цели.

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

Почему данные должны быть на краю?

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

Нубо

Именно поэтому я работаю над собственной периферийной платформой — Nubo. Он позволяет запускать приложения TypeScript на периферии, а также получать доступ к глобально распределенным данным на периферии.

Производительность

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

Я создал тестовое приложение и развернул его, используя различные комбинации платформ и сервисов, чтобы сравнить их с Nubo.

- Deno Deploy с CockroachDB
- Cloudflare Workers с Cloudflare D1
Vercel Edge Functions с CockroachDB
— Nubo Deploy с Nubo SQL

Тест №1 — Просто код, без базы данных

В качестве основы мы сначала посмотрим, насколько быстро каждый сервис отвечает без каких-либо запросов к базе данных, просто код выполняется на границе. Вы действительно можете видеть, что Deno оптимизировала свою платформу для быстрого отклика (хотя Nubo не сильно отстает!).

Тест №2 — С базой данных

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

Тест №3–1000 записей

Далее давайте извлечем 1K записей из базы данных. Nubo может ответить за меньшее время с помощью 1K записей по сравнению с получением одной записи с других платформ. На самом деле мне удалось получить 8 КБ записей с помощью Nubo быстрее, чем получить одну запись из Vercel с помощью CockroachDB и Cloudflare Workers с D1.

Тест № 4–100 000 записей

И последнее, 100К записей из базы данных. Nubo отвечает менее чем за одну секунду. В 6 раз быстрее, чем Deno, в 23 раза быстрее, чем Cloudflare, и более чем в 40 раз быстрее, чем Vercel.

Так ли необходима вся эта скорость?

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

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

Что еще может сделать Нубо?

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

Нубо Развернуть

– Развертывание приложений TypeScript (Bun и Deno)
– Распространяется по всему миру
– Отсутствие холодных запусков
– Работает с Next.js, Vite, Express, Hono и другими

Нубо SQL

– Глобально распределенные данные
– Надежная согласованность данных
– Совместимость с PostgreSQL
– Работает с Prisma
– Встроенное соответствие (GDPR, CCPA, LGPD и т. д.)

Почему TypeScript?

Потому что никто больше не должен кодировать на простом JavaScript. Серьезно. Останови это.

Почему Бан и Дено?

Бун просто потрясающий. Он почти стал заменой Node, но с таким количеством преимуществ, которые делают его готовым к периферии, таким как быстрое время запуска, встроенная поддержка TypeScript и чрезвычайно быстрая установка (прощай, длинные сборки).

Deno также быстро набирает обороты в сообществе TypeScript. У него будет более длительный путь для принятия (хотя он был сокращен благодаря поддержке NPM), но это действительно отличный способ создавать небольшие сценарии и даже приложения с помощью TypeScript.

Зачем нужна строгая согласованность данных?

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

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

Почему совместимость с PostgreSQL?

Когда появляется новая база данных с такими функциями, как высокая масштабируемость, глобальный доступ к данным и т. д., я сначала оцениваю, сколько усилий мне потребуется, чтобы использовать эту технологию в своих приложениях. Всегда здорово иметь возможность перемещать приложения между платформами. Например, допустим, вы создали приложение для своего стартапа, используя Cloudflare Workers KV (глобальное хранилище данных Cloudflare). Теперь ваш стартап вырос, и у вас есть более сложные требования к запросам, которые выходят за рамки того, что может предложить KV. Миграция с KV на нечто вроде MySQL может оказаться кошмаром (в зависимости от того, насколько тесно ваше приложение интегрировано с KV). Поэтому всегда лучше выбирать технологию, позволяющую перейти на другую платформу с минимальными или, в идеале, без изменений в кодовой базе.

Вот почему Nubo SQL совместим с PostgreSQL. Нет необходимости изучать какой-то новый проприетарный язык запросов. Это просто Постгрес. Многие разработчики уже знакомы с Postgres, а если вы используете MySQL, то портировать на Postgres очень просто. Еще одним преимуществом этого является то, что он позволяет использовать Призму!

Почему Prisma поддерживает?

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

Следует отметить, что сама Prisma не предназначена для эффективной работы на периферии, поэтому Prisma создала свой прокси-сервер данных. Это позволяет вам развернуть облегченную версию Prisma с вашим пограничным приложением, а затем отправлять запросы в прокси-сервер данных, который, в свою очередь, проксирует запросы в вашу базу данных. Однако прокси-сервер данных Prisma доступен только в двух регионах — во Франкфурте, Германия, и в Северной Вирджинии, США. Это не идеально, если ваш код работает по всему миру, возвращая нас к той же проблеме, что и когда ваша база данных находилась в одном регионе.

Вот почему у Nubo есть собственный прокси-сервер данных, развернутый во всех регионах, где доступен Nubo SQL.

Нам действительно нужно соответствие (GDPR)?

Если вы не хотите, чтобы вас оштрафовали за то, что вы сохранили данные гражданина ЕС в регионе, не совместимом с GDPR, тогда да, вам нужно подумать о соблюдении. GDPR — не единственное существующее регулирование конфиденциальности данных. В Калифорнии действует Калифорнийский закон о конфиденциальности потребителей (CCPA), в Бразилии действует LGPD, и многие другие страны/территории начинают принимать свои собственные политики/положения/законы о конфиденциальности данных. Эти правила также могут сопровождаться крупными штрафами за несоблюдение. Вот почему мы, как разработчики, должны убедиться, что у нас есть полный контроль над тем, какие данные куда идут.

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

А как насчет MongoDB Atlas?

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

Я также не рекомендую использовать NoSQL в качестве основного источника данных. Структура, предоставляемая реляционными базами данных с безопасностью типов таких инструментов, как Prisma, является лучшим способом управления данными для ваших приложений. Для меня спор между NoSQL и реляционными базами данных подобен спору между JavaScript и TypeScript. Один позволяет вам делать все, что вы хотите (NoSQL/JavaScript), другой обеспечивает структуру и безопасность для создания больших приложений (реляционная база данных/TypeScript).

А как насчет Google Cloud Spanner?

Мне очень нравится идея Cloud Spanner. Это многорегиональная база данных SQL со строгой согласованностью. Недавно Google выпустил адаптер PostgreSQL для Spanner. Это, однако, имеет множество ограничений и не позволяет вам легко портировать существующее приложение для использования Spanner.

А как насчет FaunaDB?

Всегда есть риск при рассмотрении новых технологий для ваших приложений. С FaunaDB вам придется научиться делать то, что характерно только для FaunaDB, например язык запросов Fauna (FQL). Если требования к вашему приложению изменятся и вам нужно будет перейти к другому провайдеру, вам придется переписать весь код, относящийся к Fauna. Другой аспект заключается в том, что FaunaDB поставляется с GraphQL. GraphQL НЕ следует использовать между вашим сервером и вашей базой данных. GraphQL предназначен для работы между вашим клиентом и вашими сервисами.

Что дальше?

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

Подпишитесь на Ранний доступ