Русский ИТ бизнес
Русский ИТ бизнес
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/

Нашим ребятам послал. Сказали - умное :)

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

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

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

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

    Для будущих проектов рассматриваю как раз go/rust. Пока больше в сторону go смотрю - проще, но rust больше хочется использовать.
  • Раздражительный Барс
    Раздражительный Барс
    У 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.😁 Это что было понимание масштабов. 😂
    • Пухлый Воробей
      Пухлый Воробей
      Лучше Fastify
      Или nestjs + fastify

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

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


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