- Оригинальный адрес:Cloud Computing without Containers
- Оригинальный автор:Zack Bloom
- Перевод с:Программа перевода самородков
- Постоянная ссылка на эту статью:GitHub.com/rare earth/gold-no…
- Переводчик:TrWestdoor
- Корректор:tonylua
Cloudflare имеет платформу облачных вычислений под названиемWorkers.Он не требует контейнеров или виртуальных машин, как другие известные мне платформы облачных вычислений.. Мы верим, что именно за этим будущее бессерверных и облачных вычислений, и я попытаюсь объяснить вам, почему.
Isolate
Два года назад столкнулись с проблемой. Ограниченное тем, сколько функций и опций должно быть встроено внутри компании, нам нужно найти способ, чтобы пользователи могли создавать их самостоятельно. Поэтому мы решили найти способ, чтобы люди могли писать код на наших серверах, развернутых по всему миру (у нас более сотни центров обработки данных, 155 на момент написания этой статьи). Наша система должна иметь возможность запускать ненадежный код безопасно и с минимальными накладными расходами. Мы сидим перед десятками миллионов сайтов, выполняющих миллионы запросов в секунду, и это должно быть очень, очень быстро.
Lua, который мы использовали раньше, не работал в песочнице, пользователи не могли писать свой собственный код без нашего контроля. Традиционные технологии виртуализации и контейнеров, такие как Kubernetes, непомерно дороги для всех участников. Запуск тысяч модулей Kubernetes в одном месте был бы ресурсоемким, а запуск его в 155 местах был бы еще хуже. Масштабировать их проще, чем без системы управления, но отнюдь не легко.
В итоге мы использовали V8: Isolates, технологию, созданную командой Google Chrome для поддержки движка Javascript в их браузере.
Изоляты — это упрощенный контекст, который содержит несколько сгруппированных переменных и код для их изменения. Более того, один процесс может запускать сотни или тысячи изолятов и беспрепятственно переключаться между ними. Это позволяет запускать ненадежный код от разных пользователей в одном процессе операционной системы. Они предназначены для быстрого запуска (некоторые из них должны быть запущены в вашем браузере, просто чтобы загрузить страницу для вас) и не позволяют одному изоляту получать доступ к памяти других изолятов.
Мы берем на себя накладные расходы на однократный запуск Javascript, а затем, по сути, выполняем скрипт бесконечно долго, почти не нуждаясь в накладных расходах за один раз. Запуск любого данного Isolate в сто раз быстрее, чем запуск процесса Node на моем компьютере. Что еще более важно, они на порядок меньше, чем потребление памяти, требуемое процессом.
У них есть вся дружественная эргономика «функция как услуга», и им просто нужно писать код, не беспокоясь о том, как он работает или масштабируется. В то же время они не используют виртуальные машины или контейнеры, а это означает, что вы на самом деле работаете так, как будто это «голое железо», чем любой другой известный мне подход к облачным вычислениям. Я считаю, что эта модель ближе к экономике запуска кода на «голом железе», но в полностью бессерверной среде.
Эта статья не является натяжкой для Workers, но я хотел показать график того, насколько разительна разница, чтобы показать, почему я не думаю, что это итеративное улучшение, а фактический сдвиг схемы:
Эти данные отражают время отклика (включая задержку в сети) при выполнении запросов из ближайшего центра обработки данных, где все функции развертываются и выполняются с интенсивным использованием ЦП.источник
Холодный запуск
Не все полностью понимают, как работают традиционные бессерверные платформы, такие как Lambda. Он создает контейнерный процесс для вашего кода. Он не запускает ваш код в более легкой среде, чем запуск Node на вашем собственном компьютере. Что он делает, так это автоматически масштабирует эти процессы (немного неуклюже). Этот процесс автомасштабирования приводит к холодному запуску.
Холодный старт — это то, что происходит, когда на машине должна запуститься новая копия вашего кода. В мире Lambda это эквивалентно созданию нового контейнерного процесса, который может занять от 500 мс до 10 с. Любой запрос от вас будет приостановлен на срок до десяти секунд, что довольно плохо для пользователя. Лямбда может обрабатывать только один запрос за раз, поэтому новая лямбда должна запускаться в холодном состоянии каждый раз, когда есть дополнительные параллельные запросы. Это означает, что отложенные запросы могут возникать снова и снова. Если ваша Lambda не получит запрос вовремя, она будет закрыта и запущена снова. Это будет происходить снова всякий раз, когда вы развертываете новый код, потому что каждая лямбда должна быть повторно развернута. На это часто ссылаются как на причину, по которой бессерверные технологии не так хороши, как их рекламируют.
Поскольку рабочим не нужно запускать процесс, изоляты запускаются через 5 мс, что незаметно долго. Точно так же изоляты очень быстро измеряются и развертываются, что полностью устраняет проблемы, с которыми сталкиваются существующие бессерверные технологии.
переключатель контекста
Ключевой особенностью операционной системы является то, что она позволяет выполнять несколько процессов одновременно. Он прозрачно включает процесс кода, который вы хотите запустить в любой момент. Для этого используется «переключение контекста»: вся память, необходимая одному процессу, удаляется, а память, необходимая следующему процессу, загружается.
Переключение контекста занимает около 100+ миллисекунд. Когда это время умножается на все процессы Node, Python или Go, запущенные на вашем сервере Lambda, это влечет за собой большие накладные расходы, а это означает, что вычислительная мощность ЦП не полностью используется для выполнения пользовательского кода, поскольку она была потрачена на переключение контекста.
Системы на основе изоляции выполняют весь код в одном процессе и используют собственные механизмы для обеспечения безопасного доступа к памяти. Это означает, что, не тратя слишком много времени на переключение контекста, машина на самом деле потратит почти все свое время на выполнение вашего кода.
ОЗУ
Среды выполнения Node или Python предназначены для работы на собственных серверах отдельных пользователей. Никогда не предполагалось, что этот код будет работать в многопользовательской среде с тысячами других пользовательских кодов и строгими требованиями к памяти.. Потребление памяти базовым запуском Node Lambda составляет около 35 МБ. Когда вы разделяете среду выполнения между всеми изолятами, как это делаем мы, это число уменьшается примерно до 3 МБ.
Память часто является самой дорогой (даже выше, чем ЦП) стоимостью выполнения пользовательского кода, и ее уменьшение на порядок может значительно улучшить экономику.
Базовая версия V8 предназначена для работы с несколькими арендаторами. Он предназначен для запуска кода на нескольких вкладках вашего браузера в изолированной среде одного процесса. Это не относится к Node и подобным средам выполнения, которые появляются в мультитенантных системах, построенных на их основе.
безопасность
Запуск кода для нескольких пользователей в одном процессе, очевидно, требует особого внимания к безопасности. Для Cloudflare само построение этого уровня изоляции было ни продуктивным, ни эффективным. Это требует большого количества тестов, фаззинга, тестирования на проникновение и ресурсов, необходимых для создания действительно безопасной и такой сложной системы.
Единственное, что делает это возможным, — это природа V8 с открытым исходным кодом и ее статус, возможно, лучшего программного обеспечения для тестирования безопасности в мире. Мы также встроили небольшое количество уровней безопасности, в том числе различные средства защиты от атак по времени, но V8 — это настоящее чудо, благодаря которому эта вычислительная модель работает.
выставление счетов
Это не подразумевает референдум по биллингу AWS, но есть интересное экономическое явление, о котором стоит кратко упомянуть. Плата за Lambdas взимается в зависимости от времени их работы. Этот счет округляется до ближайших 100 мс, что означает, что люди платят больше за каждые 50 мс среднего выполнения. Что еще хуже, они выставляют вам счет за все время выполнения Lambda, даже если время потрачено на ожидание завершения внешних запросов. Поскольку внешние запросы обычно занимают от сотен до тысяч миллисекунд, вы можете в конечном итоге заплатить смешную цену.
Изоляты занимают очень небольшой объем памяти, поэтому, по крайней мере, мы будем платить только за фактическое время выполнения вашего кода.
В нашем случае рабочие могут оказаться в 3 раза дешевле за цикл ЦП из-за меньших накладных расходов. Worker стоит 0,50 доллара за миллион запросов на 50 мс ЦП, а та же Lambda стоит 1,84 доллара за миллион запросов. Я считаю, что 3-кратное снижение затрат может эффективно подтолкнуть компании к поставщикам на основе изоляции.
сеть это компьютер
У Amazon есть продукт под названием Lambda@Edge, который развернут в их центрах обработки данных CDN. К сожалению, это в три раза дороже, чем традиционная Lambda, а первоначальное развертывание занимает около 30 минут. Он также не допускает произвольных запросов, ограничивая его использование в CDN.
Вместо этого, как я уже упоминал, с помощью Isolate мы можем развернуть исходные файлы в 155 центрах обработки данных и сделать это экономически лучше, чем Amazon. На самом деле работать на 155 изолятах дешевле, чем на контейнере, или, может быть, Amazon взимает с рынка плату, которую каждый может себе позволить, но намного больше, чем они стоят. Я не знаю экономики Amazon, все, что я знаю, это то, что мы довольны своей собственной.
Давно установлено, что для действительно надежной системы она должна быть развернута в нескольких местах на планете. Но Lambda работает в одной зоне, в одном регионе и в одном центре обработки данных.
дефект
Ни одна технология не идеальна, и каждый переход имеет некоторые недостатки. Системы на основе изоляции не могут произвольно компилировать код. Изоляция на уровне процесса позволяет вашей Lambda иметь любой двоичный файл, который ей нужен. В изолированном пространстве вы должны писать свой код на Javascript (мы часто используем TypeScript) или использовать такой язык, как Go или Rust для WebAssembly.
Если вы не можете перекомпилировать процессы, вы не сможете запустить их в изоляции. Вероятно, это означает, что бессерверные решения на базе Isolate можно использовать только для новых, более современных и популярных приложений. Это также может означать, что устаревшие приложения могут перемещать только наиболее важные части для инициализации Isolate. Сообщество также ищет новые и лучшие способы переноса существующих приложений на WebAssembly, оставляя эти вопросы открытыми для обсуждения.
мы нуждаемся в тебе
я надеюсь, ты сможешьПопробуйте рабочиеИ сообщите нам и сообществу о вашем опыте. Нам еще нужно доработать и создать много контента, и мы можем использовать ваши отзывы для этого.
Нам также нужны инженеры и продакт-менеджеры, которые заинтересованы в этом и хотят развивать его в новых направлениях. Если вы находитесь в Сан-Франциско, Остине или Лондоне, присоединяйтесь к нам.
Если вы обнаружите ошибки в переводе или в других областях, требующих доработки, добро пожаловать наПрограмма перевода самородковВы также можете получить соответствующие бонусные баллы за доработку перевода и PR. начало статьиПостоянная ссылка на эту статьюЭто ссылка MarkDown этой статьи на GitHub.
Программа перевода самородковэто сообщество, которое переводит высококачественные технические статьи из Интернета сНаггетсДелитесь статьями на английском языке на . Охват контентаAndroid,iOS,внешний интерфейс,задняя часть,блокчейн,продукт,дизайн,искусственный интеллектЕсли вы хотите видеть более качественные переводы, пожалуйста, продолжайте обращать вниманиеПрограмма перевода самородков,официальный Вейбо,Знай колонку.