Cloudflare как идеальный хостинг (не CDN)

Cloudflare готовится перевернуть рынок хостинга веб-приложений. Длинный пост, но технологии поразительные.

Исторически, Cloudflare — крупный и агрессивный игрок на рынке CDN, то есть они умеют с минимальной задержкой и максимальной скоростью отдавать статический контент: картинки или страницы, которые одинаковые для всех пользователей. Они забирают их с ваших серверов, копируют (кешируют) на сотни своих серверов и отдают пользователю. Прикол в том, что у Cloudflare есть свои серверы в 200 главных точках обмена трафиком, 99% пользователей интернета живут ближе, чем в сотне километров от сервера Cloudflare. Это называется edge-network, пограничная сеть, в смысле та, которая граничит с пользователями. Небольшое расстояние и оптимизированные серверы означают, что статический контент будет грузиться мгновенно.

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

Кажется, у Cloudflare получилось придумать элегантное, красивое решение для динамических страниц, которое работает прямо на edge-серверах! Встречайте Cloudflare Workers и Durable Objects.

Cloudflare Workers — облачные функции, в Амазоне они называются лямбды (lambda@edge). То есть вы пишете программу, которая обрабатывает запросы пользователей, загружаете её в облако и она запускается по необходимости на серверах облака, прозрачно, незаметно для вас и для пользователя. Придет один пользователь — запустится одна копия, придет тысяча — запустится тысяча копий. Обычно есть время на так называемый cold start, то есть после некоторого ожидания облачная функция тушится и нужно время, чтобы она проснулась и начала отвечать на запросы. Тут этой задержки нет. Обычно вам нужно выбрать регион работы функции (помните про близость к пользователю?), тут выбирать не нужно, код запустится из самого ближнего к пользователю edge (!) сервера. Обычно эта штука стоит недешево, здесь она примерно в 3-10 раз дешевле, чем у конкурентов. Весь этот банкет за счет того, что наш код работает не контейнерах, а v8-изолятах, то есть частично — на движке гугл-хрома! (тут рассказано, как их выбрали). Но это всё закуска, кайф — дальше.

почему изоляты выгоднее контейнеров
почему изоляты выгоднее контейнеров

У облачных функций есть слабое место — координация пользователей. Например, мы хотим сделать копию сервиса Гугл-документов или сервис чатов — то есть несколько людей подключаются к одной программе, могут в неё писать и читать общие данные. Решений два — либо запускаем программу по-старинке, один экземпляр на сервере и храним данные в памяти (быстро!), либо запускаем в функциях, но тогда нужна будет очень быстрая общая база данных и то скорость будет ниже, потому что функциям нужно будет ходить в центральную базу данных.

Cloudflare эту проблему решили с помощью Durable Objects — это такие воркеры, которые а) уникальны, то есть гарантированно запускается только один экземпляр б) имеют доступ к надежному и быстрому хранилищу в) запускаются там, где большинство пользователей и могут самостоятельно мигрировать между серверами. Получается, что большинство операций происходят в памяти, но при этом самостоятельная серверная программа не нужна. Красиво! В статье примеры каунтера и чата, простота кода впечатляет.

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

Вот, например, сам Cloudflare предлагает ускорить Wordpress-сайты в 3,5 раза. Просто подключаешь плагин и сайт начинает грузиться в разы быстрее, а это, между прочим, самый популярный движок для сайтов в мире и такое ускорение напрямую влияет на бизнес.

Или вот чуваки приняли 5 миллионов евро пожертвований за 2 часа, написав смешной объем кода и не упали! Вот инженер из Vox Media запустил React прямо на edge-серверах!

В интересное время живем, товарищи!

N.B. Федя добавляет, что красота красотой, но начинать лучше с классических фреймворков и 5-долларового сервера в DigitalOcean, а как только пойдет трафик и станет понятно, что код приносит деньги — вот тогда уже думать об облаках. Аминь.

5151
13 комментариев

Спасибо за статью, интересно. 

7
Ответить

Спасибо! Видимо так природа очистилась, что теперь в 2021 все комментарии позитивные!

7
Ответить

Такой подход мне очень напомнило о "интернете будущего", в котором, по мнению некоторых, нету центрального сервера, а трафик идёт через подобие p2p

2
Ответить

Угу, и за счет очень мощного бэкбона и одинаковых серверов эта штука даже не тормозит :)

1
Ответить

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

1
Ответить

Да для wp это фича полезная, нужно поюзать.

2
Ответить

Ох маркетинг-шмаркетинг ... кто-то хоть посмотрел как чуваки "serverless" 5млн на благотворительность собрали?
Их страница с Cloudflare отдаёт пользоваелям статичный React сайт, и небольшой бек, который через API stripe.com платежи обрабатывает.
В общем из без Cloudflare можно было обойтись.
DurableObjects - ну они опять к централизации гребут приправя шмаркетингом ...

2
Ответить