Масштабирование веб-сайта с помощью node.js - PullRequest
0 голосов
/ 22 декабря 2011

Я разрабатываю веб-сайт для поиска доступных ресторанов доставки. Веб-сайт выполняет поиск на самых популярных порталах доставки и отображает результаты, собранные на одной странице.

Сайт размещен на Heroku с 4 динамо.

http://deliveria.net/#05409-002

Когда пользователь делает запрос на веб-сайте, он делает около 30 HTTP-запросов для получения результата.

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

Я пытался увеличить династию Героку:

 heroku scale web=10

И я не почувствовал ощутимой выгоды.

Каков наилучший подход для масштабирования такого рода приложений?

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

Текущий стек:

  • Heroku
  • Node.js
  • экспресс
  • модуль запроса
  • EJS
  • Толкатель
  • Redis

1 Ответ

1 голос
/ 22 декабря 2011

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

Попробуйте делегировать 30 http-запросов между доступными работниками. Может быть, Kue может помочь вам в этом аспекте (вы помещаете новые задания в очередь, и они выполняются один за другим рабочими). Так, например, если у вас 10 динамов на Heroku, используйте 9 для рабочих (которые выполняют эти 30 запросов http).

С точки зрения пользователя, важно знать, что приложение быстро реагирует на его поиск (и не производит на него впечатление «зависания»), поэтому, возможно, вы захотите обновить его, как только у вас есть предварительные результаты (например, 10 страниц получают из 30). Вы можете сделать это через WebSockets ( Socket.IO ) и даже показать хорошую графическую индикатор выполнения или что-то подобное.

...