🤯 1.9 миллиардов входов в месяц: как Node.js выдержал адскую нагрузку
Тут опытом поделились на Reddit. Просто вдумайтесь в эти цифры - 1.9 миллиарда входов на сайт в месяц! Что он там такое делал страшное, с таким количеством человек или это боты... Оказалось, разработчик тестировал, сможет ли Node.js выдержать такую безумную нагрузку.
Проблема оказалась в bcrypt - синхронное хеширование паролей напрочь блокировало event loop. При высокой нагрузке латенси взлетала до небес, а throughput падал ниже плинтуса. Пришлось выносить всю тяжёлую работу в отдельный микросервис в Kubernetes.
Что спасло ситуацию:
• Вынос bcrypt в отдельный микросервис
• Горизонтальное масштабирование в Kubernetes
• Мониторинг через OpenTelemetry
• Сохранение основного API на Node.js
А вы сталкивались с подобными проблемами масштабирования? Делитесь в комментах - стоит ли мучиться с Node.js для таких задач или сразу переходить на Go/Rust? 🤔 Если что, наш стек .net core.
Вот тут детали https://www.reddit.com/r/node/comments/1ohqivj/nodejs_scalability_challenge_how_i_designed_an/
Нашим ребятам послал. Сказали - умное :)
Русский ИТ бизнес
Русский ИТ бизнес 👨
Подписаться

Комментарии (0)
Ах да, 1.9 млрд запросов за месяц, это примерно 733 RPS, что уже не кажется таким крутым, хотя для ноды наверно это достижение.
Оставайтесь на дотнете, для него 733 RPS - мелочь.
При работе с БД postgresql падает до 6000 rps.
При подключении redis снова 70k rps.
С енкриптами не игрался. ХЗ.
Для будущих проектов рассматриваю как раз go/rust. Пока больше в сторону go смотрю - проще, но rust больше хочется использовать.
Go,Rust будет в разы дороже чем оптимизировать Node.js.
18 000RPS, это уже что-то очень не дешёвое. 😁 5сли у вас точно столько будет и вы уверенны в этом, то лучше С++ или Rust. 😁
Вообще там от дофига чего зависит! Такие нагрузки не так то и просто держать!
У Википедии около 2500.😁 Это что было понимание масштабов. 😂
Или nestjs + fastify
Expressjs упирается в 14000-16000 rps
На таких нагрузках уже другие решения.. 😁
Python Flask async который, ну он в 16000 упирается.. Есди на pypy перекинуть (не скажу про полную поддержку его там) то это будет на много больше. 😁
Но это сам Flask! Возьмите либы и будет 8-12к..😁 Django точно держит 7500 без pypy, на нем она +/- в четыре раза быстрее, но тут 100% поддержка pypy.
Тесты это фигня! Там хватает где упереться даже в Rust и тесты такое не покажут. 😁
Django может и обработает 7500, но в связке с rest framework будет сильно медленнее.
Это миллионы пользователей в день
При таком проекте бабок столько, что можно не думать на чем должно работать. За тебя уже будут думать.
Разница в производительности такая, что где питону надо 5-7 инстансов, rust на одном тащит.
deno vs bun vs node
https://www.youtube.com/watch?v=DpDHPoStZZ8
но Максим, как честный писатель, пошел дальше и решил раскрыть, зачем же нужны эмоции затмевающие разум. Оказывается node.js это просто говно. Однопоточное причем.