Запланированное обновление данных в работниках кластера - PullRequest
0 голосов
/ 24 октября 2018

Я пойду прямо к делу.Итак, у меня есть JSON (около 20 МБ), который обновляется ежедневно и который я должен загрузить с другого сервера и поставить на мой.А затем я планирую создать API, который бы возвращал некоторые данные из этого JSON по какому-либо поисковому запросу ('... / search? Query = someRandomQuery').

И я думаю использовать кластер с работниками для моего случая.Я новичок в Node JS и кластерах, поэтому я думаю, что будет лучшим подходом, чтобы заставить все это работать.

Сейчас я думаю, что все это должно работать так:

  1. Я запускаю свое приложение.
  2. Загрузчик сначала загружает этот файл и помещает его в какую-то папку на моем сервере.
  3. Затем я устанавливаю загрузчик, чтобы обновлять мой файл один раз в день.
  4. Как только файл загружается / обновляется на моем сервере, я отправляю некоторое сообщение своим работникам.
  5. Как только работники получают сообщение о том, что файл готов, каждый из работников загружает весь этот JSON в память.Также работники будут иметь некоторую функцию поиска, которая будет искать внутри этих «данных памяти» и возвращать некоторые результаты для пользователей.И это в значительной степени так.

То, что я планирую использовать, таково: https://nodejs.org/api/cluster.html

И мой главный вопрос - каков наилучший подход для достижения нужного мне результата??

Я предполагаю, что для обновления данных JSON внутри рабочих мастер должен отправить всем им сообщение о том, что «файл обновлен, обновите данные», а затем рабочие обновят целые данные, которые хранятся в их памяти.Это правильно?Но как насчет мастера?Должен ли я поместить всю логику файла загрузки / обновления в мастер?Или я могу загрузить / обновить данные JSON в отдельном процессе и уведомить мастера о том, что данные загружаются / обновляются, чтобы мастер мог отправлять сообщения работникам?Возможно ли это и будет ли это правильным способом?Или мой подход совсем не правильный?

И не уверен, стоит ли упоминать, но все это «основано» на «экспрессе» (https://expressjs.com/)., что также вызывает у меня вопрос, должен ли я инициализировать всю экспресс-вещь в каждомрабочий, или этого достаточно, чтобы где-то его инициализировать только один раз?

Любые комментарии приветствуются, спасибо:)

...