Node протык Bun протык Deno: супарацыены з мнагімі маршрутамі перамагаюць табліцы з адным показнікам RPS
Мульты-маршрутныя змаганні Node.js проты Bun проты Deno: чыстая працездатнасць ёсць рэальной, але знанне аператыўных аспектаў, правыя на выконанне, памяць і маршруты, залежныя ад БД, вялікі вплыв маюць на выбор архітэктуры.
Крыніцы: I Rebuilt the Same API on Node.js, Bun, and Deno. The Surprising Difference Wasn’t Throughput
Крытычныя показнікі маюць больш чым адзін шлях
Табліцы RPS простага HTTP паказалі, што адна гонка ўжо завершылася: Bun заўсёды па-пераду, Deno — на другай пазіцыі, Node — ахвотней. Для прыняцця рашэнняў па архітэктуры трэба больш чым толькі адзін сінтэтычны шлях.
export async function handle(request: Request): Promise<Response> {
const url = new URL(request.url);
if (url.pathname === "/health") {
return Response.json({ status: "ok" });
}
if (url.pathname.startsWith("/v1/accounts/")) {
const account = await accounts.find(url.pathname.split("/").pop()!);
if (!account) {
return Response.json({ error: "not_found" }, { status: 404 });
}
return Response.json(account);
}
return Response.json({ error: "not_found" }, { status: 404 });
}
// Bun
Bun.serve({ fetch: handle, port: 3000 });
// Deno
Deno.serve({ port: 3000 }, handle);
deno serve \
--allow-net=0.0.0.0:3000,postgres.internal,redis.internal \
--allow-env=DATABASE_URL,REDIS_URL,OTEL_EXPORTER_OTLP_ENDPOINT \
--allow-read=./config \
main.ts
Чыстая праўерхнёсць была рэальной, але яна больш не вплывала на выбор архітэктуры
Праўерхнёсць мае значэнне на рубежы крывых затрат. Большасць бізнес-API стаюць обмежаныя базамі дадзеных, механізмамі аўтэнтыфікацыі і операцыямі з вводам/выводам задоўга перш чым досягаюцца максімальныя показнікі RPS пад час працы.
Node быў найменш цікавым варыянтам для працы, што было нават компліментам
Гравітасія екосыстэмы Node, знанне ў практычнай експлуатацыі і праўдападны працэс развяртання даўна заставляюць яго выграваць проты іншых стандартных платформ. Нуднасць — гэта прызнак, калі час на адпаведальнае выкананне задач маўмеры.
Bun быў найшвыжэй, калі мог быць сабой
Bun выдзейнаецца са своімі API і інструментамі. Адкрыце падтрымкі для Node раз'яўляе яго прынтэльсцво; трэба часова ацэніць прыпускі, якія базуюцца на структуры Bun.
Deno прыключыў правыя на выкананне і метрыку да дызайну прыемлі
Модэль праваў Deno і стандартная бібліятэка перакладаюць пытанні безпекі і назірання за працэю ў самы момент выканання — а не толькі як дадатковы элементы мідлвэра.
У пытанні памяці розлік быў мінімальны
Распадзел памяці, працэсы сортавання і выкарыстоўваная памяць пад рэалістычным навантажэнням маюць большое значэнне, чым максімальная колькасць запытоў за секунду. Тыя, хто праграе ў пытанні памяці, праграюць і ў вартасцы выканання ў кантэйнерах.
Простасць аператыўнага керавання залежыць ад таго, што у вас ужэ ёсць
Калі організацыя ужо выкарыстоўвае Node на Kubernetes з развітымі панелямі монітарынгу, змена рунтайма будзе каштоўна для всіх. Калі ж праект новы і акцэнт ставіцца на працу на перыметры, Bun/Deno заслуговуюць на параболічныя тэсты з мнагапутэвымі крытэрыямі: JSON API, multipart, WebSocket і обработчыкі, зв'язаныя з БД.
Заключэнне
Паверніце той самы API на разных срэдах выканання, кабы з’ясаваць ўсі плюсы і мінусы — а не кабы выбраць «вінаватага» на адным тэсце на навантажэння праз HTTP. Выберыце срэду выканання, якая падходзіць вашым операцыйным працэсам, правам і рэальным узькім местам.
Паблікуйце інструменты для тэставання разам з выводамі статты. Скрыншоты RPS, якія немагчыма перадаць знову, не павінны вплываць на стратэгію платформы.
У крытэрыях оцэнкі функцый/сервісаў уключыце таксонамія запуску і працу праз CLI, а не толькі стабільны RPS.
Сачыце за проблемамі сумеснасці: натыўныя дадаткі, імпорты з node: і бібліятэкі для тэставання, якія выкарыстоўваюць глобалныя зместы Node.
Для кожной асяроддзя выканання задокументавайце модэль працэса працы ў працоўнай серэдзе (кластэр, супервізор, ізоляцыя), якую вы насправдэ запускаце.
Расчытайце косты тэставання у енжынерскіх дзёнах; перавага ў RPS у 4 разы, якая вымагае перапісву алгорытмаў автаналіза і CI, не ёсць безкоштовной павышэнням працэсуальнасці.
Калі вы справды вікорыстоўваеце калькі сервераў, трэба падтрымваць «канарэйскую» версію, якая ў кожную ноч працоўвае дваццаць самых популярных маршрутаў на кожным рантайме.
Публікуйце інструменты для тэставання разам з выводамі, якія ўзьміце з статты. Скрыншоты RPS, якія немагчыма паўтарыць, не должны вплываць на стратэгію платформы.
У карточцы ацэнкі функцый/edge трэба включыць показатры холаднага запуску і працы праз CLI DX, а не толькі показатры RPS у стацыонарным стане.
Сачыце за проблемамі сумеснасці: натыўныя дадаткі, элементы node: imports, а таксама бібліятэкі для тэставання, якія выкарыстоўваюць глобальныя зменныкі Node.
Для кожнага рантайма неабходна задокументаваць мадэль працэсу працы ў працэсе (кластэр, супервізор, ізоляцыя), якая будзе выкорыстоўвана на практыцы.
Оценіце выкарыстоўваны час у енжынерных днях; павышэнне RPS у 4 разы, якое вымагае перапісву частакі аўтэнтыфікацыі і працэса CI, не ўважаецца безкоштовным павышэнням працэсуў.
Калі вы справды вікорыстоўваеце калькі сервераў, трэба падтрымваць «канарэйскую» версію, якая ў кожную ноч працоўвае дваццаць самых популярных маршрутаў на кожным рантайме.
Публікуйце інструмент для аналізу з рэштатамі статыкі. Кадры экрана з непавторанымі показнікамі RPS не должны вплываць на стратэгію платформы.
У карточцы ацэнкі для функцый/edge неабходна ўключыць даныя пра запуск з нуля і работу праз CLI DX, а не толькі показнікі RPS у стацыярным стане.
Сачыце за прыемнасцю: натыўныя дадаткі, элементы node: imports, а таксама бібліятэкі для тэставання, якія выкарыстоўваюць глобальныя элементы Node.
Для кожнага рэантайму задокументавайце мадэль працэса выканання ў прымэтных умовах (кластар, супервайзар, ізоляцыя), якая будзе выкорыстоўвана практычна.
Ацэніце выкарыстоўванне рэсурсаў у енжынерскія дзены; павышэнне показніка RPS у 4 разы, якое вымагае перапісву частакі аўтэнтыфікацыі і працэса CI, не ўважаецца безкоштовным павышэнням прыемнасці.
Калі вы справжньа вікорыстоўваеце калькі разных срэд, трэба падтрымваць канарскі прыклад прыемнасці, які ў кожную ноч працоўвае двадзесят самых популярных маршрутаў у кожным рэантайме.
Публікуйце інструмент для аналізу з рэштатамі статыкі. Кадры экрана з непавторанымі показнікамі RPS не должны вплываць на стратэгію платформы.
У карточцы аналізу для функцый/edge неабяжно уключыць показнікі холаднага запуску і DX праз CLI, а не толькі показнік RPS у стацыярным стане.
Сачыце за сумяшчаннемадзельных элементаў: натыўных дапаможнікаў, элементаў node: imports і бібліятэк для тэставання, якія выкарыстоўваюць глобальныя зместы Node.
Для кожнага рэантайму задокументавайце мадэль працы ў рэальных умовах (кластар, супервайзар, ізоляцыя), якая будзе выкорыстоўвана пад час розповсюджэння.
Аккуратна вырахавайце косты за выкарыстоўвання рэантайму ў енжынерскія дзены; павышэнне RPS у 4 разы, якое вымагае перапісву частакі аўтэнтыфікацыі і працэса CI, не ўважаецца безкоштовным павышэнням працяздатнасі.
Калі вы справжньяя мульты-хоум-сістэма, ўтром кожны дзень запускайце «канарэйскага птаха» сумяшчання, які адрабоўвае 20 найбольш популярных маршрутаў на кожным рэантайме.
Паблікуйце інструменты для тэставання разам з выводамі статты. Скрыншоты показніка RPS, якія немагчыма перадаць знову, не павінны вяліць у выборы стратэгіі платформы.
У карточцы аналізу для функцый/edge неабяжно уключыць показнікі холаднага запуску і DX праз CLI, а не толькі показнік RPS у стацыярным стане.
Сачыце за сумяшнасцю з аддонамі: натыўнымі дапаможніцамі, элементамі node: imports, а таксама бібліятэкамі тэставання, якія выкарыстоўваюць глобалныя зместы Node.
Для кожнага рантайму задокументавайце модэль працэса вырабоцтва (кластэр, supervisor, ізоляцыя), якая будзе насправдэ прыменялася пад час розповсюджэння.
Аблікавайце косты працы ў енжынер-дзёнах; падвайчанне RPS за рахунак 4 разы, якое вымагае перапісву функцый аўтэнтыфікацыі і CI, не ўважаецца безкоштовным падыгрышам у выдатнасці.
Калі вы справжньяя мульты-хоум-сістэма, трывожце канарэйскую версію для перакантролю, якая ў кожны вечар запускае дваццаць найбольш популярных маршрутаў на кожным рантайме.
Публікуйце інструменты для замера выдатнасці разам з заключэннямі статты. Скрыншоты RPS, якія немагчыма перадаць знову, не павінны вяліць стратэгію платформы.
У карточку ацэнкі для функцый/edge уключайце показнікі холаднага запуску і працы CLI, а не толькі показнік RPS у стацыонарным стане.
Сачыце за сумяшнасцю з аддонамі: натыўнымі дапаможніцамі, элементамі node: imports, а таксама бібліятэкамі тэставання, якія выкарыстоўваюць глобалныя зместы Node.
Для кожнага рантайму неабяжна дакументацыя пра модэль працэсу вырабатчыка (кластар, супервайзар, ізоляцыі), які вы насправдэўна будзеце вікорыстоваць.
Расчысляйце косты за выкарыстоўванне інжынерных дзён; павышэння RPS у 4 разы, якое вымагае перапісву функцый аўтэнтыфікацыі і CI, не ўважаецца безкоштовным павышэнням працоўных характарыстыкаў.
Калі вы справжнія мульты-хоум-розрахунок, трэба ўтрымваць канарыю сумяшчання, якая ўвечары запускае дваццаць найбольш популярных маршрутаў у кожны рантайм.
Публікуйце інструменты для тэставання разам з выводамі статты. Скрыншоты RPS, якія немагчыма перадаць знову, не павінны вплываць на стратэгію платформы.
У карточку ацэнкі для функцый/edge трэба включыць показнікі холаднага запуску і працы праз CLI, а не толькі показнік RPS у стацыонарным стане.
Сачыце за проблемамі сумяшчання: натыўныя дадаткі, элементы node: imports і бібліятэкі для тэставання, якія выкарыстоўваюць глобалныя зместы Node.
Для кожнага рантайму неабяжна дакументацыя пра модэль працэсу вырабатчыка (кластар, супервайзар, ізоляцыі), які вы насправдэўна будзеце вікорыстоваць.
Калькулюйце выкалкі змагання ў енжынерскія дзены; перамога з RPS у 4 разы, якая вымагае перапісву функцый аўтэнтыфікацыі і CI, не ўзначае безкоштовную выдатковасць.
Калі вы справжнія мульты-хоум-сістэмы, ўтрымвайце канарэйскі праект для праверкі сумяжнасці, які ў кожную ноч працоўвае дваццаць самых популярных маршрутаў.
Публікуйце інструменты для тэставання разам з выводамі статты. Скрыншоты RPS, якія немагчыма паўтарыць, не должны вплываць на стратэгію платформы.
У карточку ацэнкі функцый/edge уключайце показатыкі холаднага запуску і працы праз CLI, а не толькі показатык RPS у стацыярным стане.
Сачыце за проблемамі сумяжнасці: натыўныя дадаткі, элементы node: imports і бібліятэкі для тэставання, якія выкарыстоўваюць глобалныя зместы Node.
Для кожнага рантайму задокументавайце модэль працы ў працоўнай сістэме (кластар, супервайзар, ізоляцыя), якая насправдэ будзе вікорыстоўвана.
Калькулюйце выкалкі змагання ў енжынерскія дзены; перамога з RPS у 4 разы, якая вымагае перапісву функцый аўтэнтыфікацыі і CI, не ўзначае безкоштовную выдатковасць.
Калі вы справжнія альтэрнатыўныя платформы, кожную ноччу трэба запускаць тэставальнага прыемніка сумярэчнасці, які адрабатвае дваццаць найпопулярнейшых маршрутаў у кожным часе запуску.
Публікуюце інструмент для тэставання разам з выводамі з статты. Скрыншоты RPS, якія немагчыма перадаць знову, не павінны вплываць на стратэгію платформы.
У карточку рэйтынгу функцыяў/edge трэба включыць показнікі холаднага запуску і працы праз CLI DX, а не толькі показнік стабільнага RPS.
У тэстах на канлеты маршрутаў павінны быць уключаны аўтэнтыфікованыя запіты JSON POST, межы завантажэння файлоў і тэставальныя сценарыі з вікорыстаннем ORM — там, дзе часы запуску пачынаюць разлікавацца пасля простых запітоў тыпу GET.
Важныя ёсць дыяграмы навыкаў каманды: успех з вікорыстаннем Bun, які заставляе палову спэцыялістаў працаваць з незнайомым інструментам тэставання, ўсё равна лягае воспамінанням пра адкладзеныя перыяды недзецькай працы.
Следзіце за структурамі TLS і HTTP/2; мікротэсты на чыстам HTTP не врачаюць расходуў на завершэнне запытоў у сетчатай архітэктуры.
Размеры образаў кантэйнераў і рэзультаты сканавання на наявнасць CVE разлічаюцца залежна ад базовых образаў часоў запуску — адпаведныя каманды будуць вазаваць гэты факт разам з показнікам RPS.
Тэсты кантракта ў співпрацы з OpenAPI дапамагаюць захаваць адкроўленасць практык працы, калі працоўнікі пераводзяцца межы портам.
Фіксуецца пазначка p99 латэнцыі пад навантажэнням, а не толькі медыянная значэнне RPS; планавальнікі маскуюць разныя формы працы сістэмы.
Калі вы вжываеце правілы Deno, перакладзіце кожнае з ніх у дакумент архітэктурнага рашэння, каб будучыя сервісы не таямна расшырывалі можлівасці сандбокса.
Слою сумеснасці Bun з npm патрэбны чыстае спісак разрэшэнняў/заборон для пакетаў, якія вы не будзеце запускаць у прымэтным рэжыме.
Node застаецца базовым стандартам сумеснасці: іншыя рашэння трэба мерыць як адхіленьні ад Node на вашых рэальных маршрутах.
Перазьвярцайце гэта рашэння кожны чатыры месцы; показнікі працы сістэмы зменяюцца, адночасна як і вашы вузькія месцы.
Бенчмаркі з калькуляцыяй на адносна многа маршрутаў должны включаць аўтэнтыфікованыя запіты JSON POST, межы завантажэння файлаў і тэставанне працы ORM — тыя месцы, дзе рашэння працы сістэмы разлічаюцца пасля простых запітаў тыпу GET.
Графікі зямлі калеквасцоў каманды маюць значэнне: успех Bun, які заставляе палову персоналу працаваць з незнайомымі інструментамі тэставання, ўлучаецца у адкладзеныя перыяды недзеўнасці.
Следзіце за структурамі TLS і HTTP/2; мікротэсты на звычным HTTP не врачаюць косты завершэння заданняў у сетчатай структуры.
Размер абразу кантэйнера і рэзультаты сканавання на наявнасць CVE разлічаюцца залежна ад базовых абразоў часу выканання — адпаведныя спецыялісты будуць узважваць гэта разам з показнікамі RPS.
Тэсты на адпаведнасць з OpenAPI дапамагаюць захаваць чыстасць выканання, калі працоўнікі апрацоўкі дадзеных перыходзяць з аднаго порту на іншы.
Фіксуйце значэння п99 латэнцыі пад навантажэнням, а не толькі медыяну показніку RPS; схематызаторы маскуюць разныя формы паведання сістэмы.
Калі вы вжываеце правілы Deno, перакладзіце кожнае з яных у дакумент з архітэктурнымі рашэннямі, каб будучыя сервісы не таямна расшырывалі межы «песчанай ямкі».
Слой сумэснасці Bun з npm вымагае чысткага спіску дазволеных/забраных пакетаў, якія вы не будзеце запускаць у прымэтнай асяроддзі.
Node застаецца базовым стандартам сумяшчальнасці: меркуйце іншыя раштрыкі як дэлты ад Node на вашых рэальных маршрутах.
Перазьвярцайце гэта рашыненне кожны чатар; показнікі выконвання зменяюцца, але і вашы «узкія месцы» таксама.
Бенчмаркі для калькы разных маршрутаў должны включаць аўтэнтыфікованыя JSON POST-запыты, межы заваносу файлаў і траекторыю работы ORM — тыя месцы, дзе показнікі выконвання разлічаюцца пасля простых GET-запытов.
Графікі кваліфікацыі каманды маюць значэнне: успех Bun, які заставляе палову спаведамальнікаў працаваць з незнаёмымі інструментамі тэставання, ўлучаецца як адкладзеныя перыяды недзеяльнасці.
Следзіце за структурамі TLS і HTTP/2; мікробенчмаркі на звычным HTTP не врачаюць косты завершэння запытоў у сетчатай структуры.
Размер картакі контэйнера і рызыкі, выяўленыя прагледам CVE, разлічаюцца залежна ад базовых картакі выконвання — адпаведныя спецыялісты будуць лічыць гэта разам з показнікам RPS.
Тэсты на адпаведнасць з OpenAPI падтрымліваюць чыстасцу выканання, калі працоўнікі апрацоўкі запытоў пераходзяць между разнымі портамі.
Запісвайце значэнне п99 латэнсу ў сітуацыі конкурэнціі, а не толькі медыяну RPS; схематызаторы маскуюць разныя формы паведання сістэмы пад навантажэнням.
Калі вы вжываеце правыя модэлі Deno, перакладзіце кожнае з разрэшэнняў у дакумент пра архітэктурныя рашэнні, каб будучыя сервісы не таямна расшырывалі можлівасці сандбокса.
Слою сумэжнасці npm у Bun неабходны явны спіс пакетаў, якія не будуць запускацца ў працоўнай асяроддзі, з пазначэнням дазволеных/забраныях.
Node застаецца базовым стандартам сумэжнасці: іншыя рашэнні трэба мераваць як разлікі ад Node на вашых рэальных маршрутах.