Нужен совет по правильной структуре/архитектуре сервиса

jenia

Новичок
1. Есть контентный сайт. Работает на CMS Drupal. Работает нормально, ничего оптимизировать не нужно.
2. Для сайта был дописан раздел - агрегатор цен. Для хранения цен используется MongoDB.
3. Каждый магазин или поставщик обычно имеет 10-20 тыс. товаров в каждой торговой точке. В итоге, максимальное количество записей в базе MongoDB может достигнуть 200 млн. Всё храниться в одной таблице, просто расставлены индексы в нужных полях. Сомневаюсь, что данных когда-либо будет так много, как я написал. Возможно их будет значительно меньше.

Проблемы:
1. Уже сейчас, когда добавлено всего 10 магазинов/поставщиков, я вижу, что даже просто парсинг и приведение данных от магазина к нужному формату съедает немало ресурсов сервера. Если поставщиков добавится в агрегатор больше, то нужно как-то решать проблему того, что парсинг мешает работе сайта. Как я писал выше, сервер справляется с нагрузкой (даже с большим запасом) если его не отвлекать задачами парсинга и добавления данных в MongoDB.
2. Добавление в MongoDB тоже использует ресурсы сервера, а соответственно может приводить к перебоям в работе сайта.

Мне кажется, что решением первой и второй проблемы было бы разведение сайта, парсера и БД MongoDB по разным серверам (отдельный сервер для БД, отдельный для парсера и отдельный для сайта). Пока что всё нормально работает, но, если добавить ещё 10 магазинов, то начнутся перебои в работе сайта.

Плюс этого решения: в случае увеличения количества магазинов, не нужно постоянно обновлять web-сервер сайта. Нужно будет только обновлять сервера, на которых расположены MongoDB и парсер. На веб-сервере не всё так легко можно перенести на новый сервер (на этом сервере не один сайт находится, много настроек оптимизирующих работу и т. д.), а вот MongoDB и парсер можно легко переносить.

Минус этого решения: более сложная архитектура, а, соответственно, более сложная программная реализация.

Не мог бы кто-то подсказать что-то по этому вопросу?
 

Adelf

Administrator
Команда форума
Просто ради интересу, а что за сервер?
 

jenia

Новичок
Просто ради интересу, а что за сервер?
2 x Intel Hexa-Core Xeon X5650, 32 GB памяти, SSD диски.

Обратите внимание, что моя задача стоит не в том, чтобы сэкономить на сервере или серверах, а в том, чтобы не заказывать новый сервер, на котором находится сайт, каждый раз, когда количество магазинов в агрегаторе превысит определённое критическое число. Легче обновлять сервер парсера и БД, так как перенос делать легче.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
я не знаю как вы меня понимаете - телепатия, к сожалению, не моя сильная черта
 

jenia

Новичок
я не знаю как вы меня понимаете - телепатия, к сожалению, не моя сильная черта
Мне не совсем понятно, запостив в тему ссылку, вы подтверждаете, что вариант, который я предложил правильный или наоборот, пытаетесь сказать, что мой вариант не правильный и я должен использовать сервис-ориентированную архитектуру (я думал, что я как раз её и предложил).
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
ссылка на wiki - это ответ на вопрос, который вы задали в первом сообщении

никаких вариантов я не подтверждал и ничего не пытался, у вас Синдром поиска глубинного смысла

если на этом форуме вас интересует, или, наоборот, не интересует личное мнение участников по какому-либо вопросу, пожалуйста, напишите об этом прямо, используя слова в их словарном значении
 
Последнее редактирование:

jenia

Новичок
ссылка на wiki - это ответ на вопрос в первом сообщении

никаких вариантов я не подтверждал и ничего не пытался, у вас Синдром поиска глубинного смысла

если вас интересует чье-либо мнение на этом форуме по какому-либо вопросу, пожалуйста, напишите вопрос, используя слова в их словарном значении
Спасибо за ответ! Не могли бы вы не отвечать больше не мои вопросы, если вам не трудно? Я вас всё равно не могу понять, так что в этом просто нет смысла.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
безусловно, переношу бессмысленную тему в соответстующий раздел
 

jenia

Новичок
безусловно, переношу в соответстующий раздел
А зачем же было переносить в корзину? Я разве что-то нарушил в правилах форума? Мне всё ещё интересно мнение пользователей, просто не ваше, так как я просто не способен именно вас понять.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
мне кажется, что жизнеописание обычных проектов в эпистолярном стиле (для передачи чувств и переживаний автора) - это нестандартный формат сообщений, который не соответствует формату технического форума

возможно, я неправ, и если кто-то из команды решит, что эту ветку можно развить, предлагаю почистить ее, переместить, например, в теорию, и общаться - я не против
 

jenia

Новичок
мне кажется, что жизнеописание обычных проектов в эпистолярном стиле (для передачи чувств и переживаний автора) - это нестандартный формат сообщений, который не соответствует формату технического форума

возможно, я неправ, и если кто-то из команды решит, что эту ветку можно развить, предлагаю переместить ее, например, в теорию, и общаться - я не против
Я не хочу с вами спорить. Можно ли удалить сообщения не касающиеся темы описанной в первом сообщении и всё таки оставить её в каком-то разделе, а не в корзине? Если я не ошибаюсь, всё, что описано в первом сообщении всё таки соответствует формату форума. Если так нельзя, то могу ли я пересоздать тему в том же или другом разделе?
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
да, попробуйте создать новую тему, и сформулируйте технический вопрос, на который можно ответить однозначно - например, написать "да", число или ссылку на материал
 

fixxxer

К.О.
Партнер клуба
прежде чем что-то делать, надо понять, что именно тормозит, чуточку поточнее чем "тормозит парсинг"
 

jenia

Новичок
прежде чем что-то делать, надо понять, что именно тормозит, чуточку поточнее чем "тормозит парсинг"
При парсинге слишком сильно загружается процессор. После парсинга процессор тоже загружается, так как происходит добавление в БД MongoDB. Наверное можно ограничить выделяемые ресурсы для скрипта, чтобы он не грузил процессор так сильно. Вопрос только в том, нужно это делать или лучше просто вынести парсер и БД на отдельные сервера.
 

MiksIr

miksir@home:~$
Прям все ядра загружаются? Такой клевый многотредовый парсер?
 

jenia

Новичок
Прям все ядра загружаются? Такой клевый многотредовый парсер?
Не могу точно ответить на этот вопрос. Вероятнее всего, что нет, не все ядра. Я смотрел загрузку используя команду top, которая показывала 100%, но это, наверное, не точные данные учитывая, что ядер несколько.
 

AmdY

Пью пиво
Команда форума
Так посмотрите какой процесс съедает ресурсы. Не думаю что это монга, может у вас 100500 процессов парсинга запущено одновременно и стоит просто втыкнуть очередь, ограничить количество одновременных процессов. Но тут не надо гадать, надо смотреть в топ какой процесс и какие ресурсы ест. Пли измерьте количество одновременных запросов и скорость ответов монги и всё всё остальное, что можете замерять и что даст информацию о проблеме.

А так @grigori прав, технической информации нет.
 

jenia

Новичок
Так посмотрите какой процесс съедает ресурсы. Не думаю что это монга, может у вас 100500 процессов парсинга запущено одновременно и стоит просто втыкнуть очередь, ограничить количество одновременных процессов. Но тут не надо гадать, надо смотреть в топ какой процесс и какие ресурсы ест. Пли измерьте количество одновременных запросов и скорость ответов монги и всё всё остальное, что можете замерять и что даст информацию о проблеме.

А так @grigori прав, технической информации нет.
Я специально не приводил техническую информацию, так как вопрос не в том, как сделать, чтобы оно работало быстро, а как обеспечить масштабируемость в случае, если завтра будет значительно больше информации для парсинга и добавления в БД.
 
Сверху