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

Каждый пятый сайт в интернете работает через Cloudflare. Компания с выручкой $2 млрд в год, с сетью в 330 городов по всему миру. И при этом вы не можете запустить на их compute платформе сервис на Java, Go, Python, PHP, C#, да вообще ни на чём, кроме JavaScript 🤡 Они решили строить compute платформу на JS, а не на KVM виртуализации? wut?

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

Что же выбрала Cloudflare?

В сентябре 2017 года они запустили Workers. AWS Lambda уже три года крутила функции в контейнерах, Google и Azure тоже были на сцене.

Cloudflare пошла другим путём. Вместо контейнеров они взяли V8, движок из Google Chrome, тот самый, который вероятно прямо сейчас исполняет JavaScript в вашем браузере. И сделали ставку на его механизм изоляции V8 isolates.

Почему это было контринтуитивно? Потому что контейнер запускает что угодно. Это универсальный инструмент, V8 запускает только JavaScript (ну и WebAssembly, ладно). Это как если бы новый ресторан открылся и сказал, что у нас в меню только пельмени, когда в городе все конкуренты предлагают среднеземноморскую кухню.

Зачем ограничивать себя? Дело в том, что Cloudflare решала не ту задачу, которую решали AWS и Google. У тех были огромные дата-центры в нескольких регионах. У Cloudflare на тот момент были компактные точки присутствия в 200+ городах, CDN-ноды, не рассчитанные на тяжёлые нагрузки. Запускать контейнеры на каждой такой ноде ночной кошмар в плане оркестрации всего этого дела.

V8 isolates решили другую задачу, дали тысячи песочниц в одном процессе. Холодный старт не в сотнях миллисекунд, а практически мгновенный, потребление памяти ~3 МБ на изолят вместо ~35 МБ на самый пустой контейнер. Один процесс обслуживает сотни, а то и тысячи клиентов одновременно, переключаясь между ними почти без накладных расходов.

И ещё кое-что, чего часто не замечают. V8 один из самых вылизанных рантаймов на планете. Google вкладывает в него чудовищные ресурсы: JIT-компиляция, сборщик мусора, security-песочница. Каждое обновление Chrome автоматически улучшает Workers. Cloudflare получает R&D условного гугловского масштаба бесплатно. Ну, не совсем бесплатно конечно, они контрибьютят обратно в V8 и даже недавно отправили патч, ускоряющий JSON.parse() на 33% для всей экосистемы. Но суть ясна.

Но у любого выбора есть цена.

Go, Java, .NET, PHP, всё, что требует собственного тяжёлого рантайма, осталось за бортом. Огромная доля бэкенд-разработчиков мира не может просто взять и перенести свой код на Cloudflare Workers.

И вот здесь включается та самая логика: Workers это не замена серверу общего назначения. Никто ведь не критикует Формулу-1 за то, что на болиде нельзя перевезти мебель. Он не для этого. Так и Workers создан для конкретного класса задач, обработать запрос на ближайшей к пользователю точке, вернуть ответ, освободить ресурсы. И в этом классе задач он, честно говоря, лучший.

Почему это не только про код?

История Cloudflare это мой аргумент против cargo cult в любых решениях. Не только технических.

«Все серьёзные компании используют Java/Go/С++ для бэкенда» не инженерный аргумент. Это социальное давление. «Все нормальные команды работают по Scrum» не управленческий аргумент. Это тоже социальное давление.

Cloudflare проигнорировала консенсус индустрии и построила на «ограниченном» JavaScript бизнес с двухмиллиардной выручкой. Не потому что JavaScript лучший язык, а потому что он оказался правильным инструментом для их конкретной задачи.

P.S. Если хотите глубже погрузиться в историю Cloudflare, очень рекомендую статью про Ли Холлоуэя. Это он спроектировал архитектуру, на которой Cloudflare стоит до сих пор. Это вдохновляющая и трагическая история одновременно.

Правильный инструмент для правильной задачи
Каждый пятый сайт в интернете работает через Cloudflare. Компания с выручкой $2 млрд в год, с сетью в 330 городов по всему миру | Сетка — социальная сеть от hh.ru