Cloudflare Workers ці Vercel Functions: ліміт важнейшы за cold start

|Аўтар: Рэдакцыя QUASA|5 хв чытання
Cloudflare Workers ці Vercel Functions: ліміт важнейшы за cold start

Для кароткага API з невялікім адказам Cloudflare Workers часта будзе зручным выбарам: тут вырашальнымі становяцца CPU-час аднаго выкліку і колькасць запытаў. Для сервернага рэндэрынгу (SSR) або апрацоўкі, якой патрэбна шмат памяці, Vercel Functions можа даць больш месца, але аб'ём даных на ўваходзе і выхадзе здольны спыніць запыт раней. Таму спачатку трэба супаставіць нагрузку з лімітамі, а потым ацэньваць халодны старт.

Гэты парадак асабліва важны, калі час адказу складаецца з вылічэнняў і чакання базы даных. Час працы працэсара, поўная працягласць запыту і затрымка першага выкліку пасля запуску экземпляра — розныя паказчыкі. Хуткі запуск палепшыць затрымку для карыстальніка толькі там, дзе функцыя можа выканаць працу ў межах сваёй памяці, часу CPU і памеру адказу.

Які ліміт спрацуе раней

Паводле лімітаў Cloudflare Workers, бясплатны план дае 10 мс CPU на HTTP-запыт, платны мае стандартную мяжу 30 секунд з магчымасцю падняць яе да пяці хвілін, а памяць ізалятара на абодвух планах абмежаваная 128 МБ. Ізалятар можа абслугоўваць некалькі запытаў адначасова, таму гэта мяжа для ізалятара, а не асобны запас на кожны выклік. Чаканне сеткі не расходуе CPU-час. Асобнай мяжы для цела адказу Worker няма, хоць для кэшавання дзейнічаюць уласныя правілы, а максімальны памер уваходнага цела залежыць ад плана акаўнта Cloudflare.

Ліміты Vercel Functions на Fluid compute дазваляюць да 2 ГБ памяці на Hobby і да 4 ГБ на Pro або Enterprise, але цела запыту і цела адказу абмежаваныя 4,5 МБ кожнае. Гэта іншыя межы, чым памяць: нават калі працоўныя даныя змяшчаюцца ў функцыі, занадта вялікі файл не пройдзе праз яе HTTP-цела. Для Node.js-функцый платформа таксама дае поўны доступ да API гэтага асяроддзя. Максімальная працягласць выканання існуе асобна ад памяці і не роўная часу актыўнай працы працэсара.

Лёгкі API: кароткі код, шмат выклікаў

Калі маршрут правярае права доступу, атрымлівае невялікі запіс і вяртае JSON, Workers добра адпавядае такой нагрузцы пры ўмове, што актыўная апрацоўка ўкладваецца ў мяжу выбранага плана. Запыт да базы можа чакаць значна даўжэй, чым працуе працэсар: для ліміту CPU гэта істотнае адрозненне. Таму павольны адказ API сам па сабе яшчэ не сведчыць пра недахоп працэсарнага часу ў Worker.

Першая небяспека для такога маршруту — непрыкметны рост працы на кожны выклік: складаная праверка токена, пераўтварэнне вялікага спісу або серыялізацыя аб'ёмнага выніку. Другая — частата выклікаў, бо малы CPU-час на асобны запыт не адмяняе платы за іх колькасць. Калі адказ кароткі, у Vercel абмежаванне цела амаль не ўплывае на выбар; тады трэба параўноўваць затрымку рэальнага маршруту і сумарнае спажыванне рэсурсаў за месяц.

SSR: дзе заканчваецца CPU, а дзе памяць

Серверны рэндэрынг можа быць лёгкай зборкай HTML або цяжкай працай з данымі і залежнасцямі. У Workers платны план дае значна больш CPU-часу за бясплатны, але не павялічвае памяць ізалятара. Таму пераход на платны тарыф дапаможа маршруту, які ўпіраецца ў вылічэнні, і не вырашыць задачу, калі падчас рэндэрынгу ў памяці адначасова знаходзяцца буйныя структуры даных.

Vercel Functions можа лепш падысці для SSR, які патрабуе большай памяці або поўнага асяроддзя Node.js. Але запас памяці функцыі не гарантуе, што любая згенераваная старонка пройдзе праз абмежаванне цела адказу. Пры ацэнцы такога праекта найбольш паказальныя цяжкія дынамічныя маршруты: сярэдняя галоўная старонка можа схаваць пікавае спажыванне памяці, працяглае выкананне і вялікі HTML. Важна таксама адрозніваць час зборкі старонкі ад чакання яе знешніх даных.

Цяжкая апрацоўка: памяць і файл маюць розныя межы

Для пераўтварэння выявы або разбору вялікага дакумента часта патрэбны і працэсар, і працоўная памяць. Калі алгарытм трымае ў памяці ўвесь зыходны файл разам з прамежкавым вынікам, мяжа ізалятара Workers можа стаць першай перашкодай, нават калі сам адказ невялікі. У Vercel запас памяці большы, затое абмежаванне HTTP-цела можа спрацаваць яшчэ да пачатку апрацоўкі або пры вяртанні выніку.

Адсюль вынікаюць розныя архітэктурныя рашэнні. У Workers патокавае чытанне і запіс памяншаюць патрэбу захоўваць увесь файл у памяці, але не скарачаюць колькасць неабходных вылічэнняў. Для Vercel вялікі файл варта перадаваць у сховішча міма цела функцыі, а самой функцыі пакінуць кіраванне апрацоўкай і кароткі адказ. Гэта не скасоўвае выдаткаў на вылічэнні: цяжкая задача можа ўпірацца ў час працы нават пры дастатковай памяці.

Кошт: выклікі, CPU і заняты час памяці

У тарыфах Cloudflare Workers платны план мае мінімальны кошт $5 на акаўнт за месяц; Standard уключае 10 млн запытаў і 30 млн мс CPU за месяц, пасля чаго дадатковы мільён запытаў каштуе $0,30, а дадатковы мільён мілісекунд CPU — $0,02. Бясплатны план мае дзённую квоту запытаў. Для частага лёгкага API у выдатках можа пераважаць колькасць выклікаў, а для рэдкай, але цяжкай працы — расход працэсара. Гэта розныя профілі нават пры аднолькавай месячнай наведвальнасці сайта.

Для Fluid compute правілы аплаты Vercel Functions вылучаюць выклікі, актыўны CPU-час і час вылучанай памяці; Hobby уключае 1 млн выклікаў, 4 гадзіны актыўнага CPU і 360 ГБ-гадзін памяці за месяц. На Pro рэсурсы аплачваюцца паводле выкарыстання з улікам крэдыту плана, а стаўкі на CPU і памяць залежаць ад рэгіёна. Калі функцыя чакае базу, аплата актыўнага CPU прыпыняецца, але вылучаная памяць працягвае ўлічвацца да завяршэння працы экземпляра. Таму адзін кошт за мільён выклікаў не апісвае ўвесь рахунак.

Cold start: што сапраўды паказвае вымярэнне

У тэсце халодных стартаў аўтар разгарнуў дынамічны праект Next.js на бясплатных планах, пазначаў першы запыт да экземпляра і за 48 гадзін атрымаў 3044 запыты пасля паўзы паміж серыямі. Для API ён вымяраў час да першага байта, а для старонак — час да інтэрактыўнасці DOM. У гэтай канфігурацыі ў Cloudflare уплыў халоднага старту быў меншы, а API на Vercel часцей абслугоўваліся новым экземплярам. Тэст адлюстроўвае рэдкі трафік з амерыканскіх вузлоў і не мадэлюе вялікую колькасць адначасовых запытаў.

Гэты вынік нельга перанесці як гатовы час адказу для беларускага карыстальніка ці іншай праграмы. Каб ацаніць свой праект, трэба пазначыць запуск экземпляра, супаставіць першы і наступныя запыты таго ж маршруту і адначасова запісаць карыстальніцкую метрыку: для API час да першага байта, для SSR — момант, калі старонка становіцца прыдатнай да выкарыстання. Супастаўленне пры аднолькавых маршрутах, рэгіёнах і частаце запытаў дапамагае аддзяліць запуск ад рэндэрынгу і сеткі. Калі ўсе рэсурсныя межы выкананы, такая вымераная затрымка ўжо можа змяніць выбар платформы.

Чытайце таксама:

Падзяліцца:

Падпішыцеся на нашу рассылку

Атрымлівайце свежыя навіны пра Web3, ШІ і крыптавалюты проста на пошту.

0