Русский ИТ бизнес 👨
Подписаться
Post media
🤯 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)

  • flwre
    Надо было на раст переписывать, глупые
  • dmsol
    Странный пост, не блокировать эвент луп - база, такое выносится на отдельные воркер треды, а тут аж целый микросервис. Тупой оверинжениринг и отсутствие понимания основ. Почему тогда просто не взять что-то типо Keycloak?

    Ах да, 1.9 млрд запросов за месяц, это примерно 733 RPS, что уже не кажется таким крутым, хотя для ноды наверно это достижение.

    Оставайтесь на дотнете, для него 733 RPS - мелочь.
  • dmitry236
    Макс, ну чё ты тащишь как сорока всё подряд, даже то в чём сам вообще ничего не понимаешь
    • dmsol
      В этом суть контента в паблике
      • dmitry236
        в этом суть парсера реддит, который Макс нам сюда настроил
  • vbelikov
    За год так вообще 23 триллиона :)
    • wtrixt
      все равно меньше чем госдолг сша
  • rusrich1
    Нода простые запросы обрабатывает со скоростью 70k rps.
    При работе с БД postgresql падает до 6000 rps.
    При подключении redis снова 70k rps.

    С енкриптами не игрался. ХЗ.

    Для будущих проектов рассматриваю как раз go/rust. Пока больше в сторону go смотрю - проще, но rust больше хочется использовать.
  • gari_potnyi
    У node.js около 10 000 RPS. У Rust 18 000. В node.js еще можно на процессы разбить и будет больше 10 000 RPS. C# около 14 000 RPS примерно как и у Go будет..
    Go,Rust будет в разы дороже чем оптимизировать Node.js.
    18 000RPS, это уже что-то очень не дешёвое. 😁 5сли у вас точно столько будет и вы уверенны в этом, то лучше С++ или Rust. 😁
    Вообще там от дофига чего зависит! Такие нагрузки не так то и просто держать!
    У Википедии около 2500.😁 Это что было понимание масштабов. 😂
    • rusrich1
      Лучше Fastify
      Или nestjs + fastify

      Expressjs упирается в 14000-16000 rps
      • wtrixt
        bun + hono
        • rusrich1
          Bun не пробовал, но читал, что не до конца зрелая штука
      • gari_potnyi
        Они все упираются примерно в это. Речь о приемоемом отклике. 😁
        На таких нагрузках уже другие решения.. 😁
        Python Flask async который, ну он в 16000 упирается.. Есди на pypy перекинуть (не скажу про полную поддержку его там) то это будет на много больше. 😁
        Но это сам Flask! Возьмите либы и будет 8-12к..😁 Django точно держит 7500 без pypy, на нем она +/- в четыре раза быстрее, но тут 100% поддержка pypy.
        Тесты это фигня! Там хватает где упереться даже в Rust и тесты такое не покажут. 😁
        • rusrich1
          Вы не ошиблись с нулем в 160000? Точно 160k? Это производительность go/rust фреймворков.
          Django может и обработает 7500, но в связке с rest framework будет сильно медленнее.
          • gari_potnyi
            Да, лишний ноль. 😁 Спасибо!
    • wtrixt
      так можно взять bun он в разы быстрее ноды (но если конечно мерить без БД, перед запросами к pg все равны)
  • rusrich1
    Если обрабатывать 1000 rps
    Это миллионы пользователей в день
    При таком проекте бабок столько, что можно не думать на чем должно работать. За тебя уже будут думать.
  • rusrich1
    Недавно на видео в Ютуб нарвался, где чел сравнивал FastAPI с Axum кажется.

    Разница в производительности такая, что где питону надо 5-7 инстансов, rust на одном тащит.
  • wtrixt
    Классный канал - рекомендую, там очень много различных сравнений бичмарков


    deno vs bun vs node
    https://www.youtube.com/watch?v=DpDHPoStZZ8
  • Ut4J6
    когда к скучной обвязке движка применяются эмоциональные эпитеты (адский, безумный) это само по себе выглядит как дешевая рекламная листовка на летнюю распродажу просроченных шуб.
    но Максим, как честный писатель, пошел дальше и решил раскрыть, зачем же нужны эмоции затмевающие разум. Оказывается node.js это просто говно. Однопоточное причем.