Вопрос производительности NodeJS - однопоточный - PullRequest
1 голос
/ 19 июня 2019

Нужны некоторые предложения о том, как обрабатывать операции в NodeJ. Я пытался что-то искать, но нигде не мог его найти, поэтому решил опубликовать его здесь, чтобы получить отзывы экспертов.

Мы создали платформу электронной коммерции, используя NextJS и NodeJS.

Мне все еще нужно пройти тестирование и выполнить нагрузочный тест, подтверждающий, как мы выполняем, но я немного обеспокоен всеми заявлениями и заявлениями о том, что nodejs не является многопоточным языком, а является ограничителем показа и бла бла бла Так что я здесь, чтобы получить ваше предложение / отзыв о том, что мы делаем, хорошо или нет. Вот что у меня есть:

  • Микросервис аутентификации: для аутентификации запросов и определения, имеет ли пользователь доступ к определенному модулю

  • платежный микросервис: для приема платежей и возвратов.

  • Сервис покупок
  • MySQL и Sequelize

Я попытаюсь объяснить мой вопрос на примере «обработки заказа». Поэтому, когда я получаю запрос на подтверждение заказа, это то, что я делаю, чтобы подтвердить подлинность запроса и подтвердить, являются ли данные полными доказательствами.

Подтвердите, что запрос аутентифицирован через токен jwt

Сделайте запрос к пользователю auth и подтвердите, что пользователь является действительным пользователем и имеет доступ к модулю заказа.

Проверка цены товаров через базу данных (поскольку я предполагаю, что полезная нагрузка может быть взломана и могут быть отправлены неправильные цены)

Убедитесь, что скидка подтверждена правильно из базы данных

Убедитесь, что купон действителен, а скидка действительна или нет

Проверка правильности отправленных бонусных баллов - отправлен запрос в сервис пользователя

Нашим платежным шлюзом является Razor Pay. Здесь мы подтверждаем, является ли отправленный идентификатор платежа действительным идентификатором платежа, а сумма, полученная от пользователя, соответствует общей сумме, которую необходимо снять.

Так что это длинный список проверок, которые мы делаем в NodeJS прямо сейчас.

Это супер быстро по одному запросу. Я определенно настроюсь, когда мы углубимся в нагрузочное тестирование .... но моя текущая дилемма сейчас заключается в том, выбрали ли мы правильный подход или нет. Достаточно ли хорош NodeJS для такого рода выполнения. Я ожидаю не более 200+ одновременных пользователей в течение 6-7 месяцев, так что я не слишком беспокоюсь о производительности. Я могу делать кластеризацию и докеринг для повышения производительности. Я хочу знать, сделал ли я правильный выбор для этого в NodeJS. Это не очень интенсивный процессор, только несколько циклов for и некоторые запросы к базе данных.

Должен ли я сохранить это в Node или перенести этот код алгоритма в другой сервис, написанный на другом языке, например C ++, или, возможно, на python.

Большое время запутался прямо сейчас. Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 19 июня 2019

Node.js может быть однопоточным, но это должно быть хорошо для того, что вы делаете. Он хорошо подходит для горизонтального масштабирования / кластеризации, и здесь уже есть множество узловых модулей, чтобы помочь вам с этим.

https://medium.com/iquii/good-practices-for-high-performance-and-scalable-node-js-applications-part-1-3-bb06b6204197

Кроме того, Node.js является асинхронным и может обрабатывать параллельные запросы.

Я также включил более старую ссылку о том, как масштабировать node.js, в которой указано, сколько пользователей может поддерживать каждый метод масштабирования. Короче говоря, вы можете использовать вертикальное масштабирование, горизонтальное масштабирование, микросервисы (которые, как вы уже видели) и автоматизацию, чтобы легко масштабировать ваше приложение. Node.js должен работать нормально.

https://adrianmejia.com/how-to-scale-a-nodejs-app-based-on-number-of-users/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...