@Ivanoff-i

Как грамотно горизонтально масштабировать код?

Суть в следующем. Есть пользователи, которые могут создавать проекты. В каждом проекте они настраивают ключевые слова и места, откуда нужно получать данные. Задача - непрерывно собирать в реальном времени много данных извне по этим проектам пользователей. Многопоточно, разумеется. После этого их обрабатывать по ключевым словам регулярками, минус-словам и т.д., и отдавать в эти проекты пользователей отфильтрованными с подсветкой найденных ключей. Ключевых слов, минус-слов и мест, откуда нужно парсить данные в каждом проекте пользователя могут быть сотни. Нужно, чтобы все это работало максимально быстро.

Предполагается использование PHP7 и YII2 фреймворка.

Какие проблемы я вижу предварительно:
1. Высокая нагрузка на выполнение кода
2. Высокая нагрузка на запись в БД
3. Балансировка нагрузки

И, собственно, вопрос: какая архитектура, технологии и алгоритмы здесь будут наиболее эффективны?
  • Вопрос задан
  • 235 просмотров
Пригласить эксперта
Ответы на вопрос 1
Demetriy
@Demetriy
веб и мобильная разработка
Из того, что первым приходит в голову:
1) master и slave базы, slave постоянно синхронизируется с master, большая часть запросов на чтение к slave (там где возможно и там, где нету транзакций, в которых читаем и тут же пишем), в свою очередь пишем в master. Таким образом каждая база может быть специальным образом настроена в приоритет чтения\записи.

2) Механизм очередей: парсинг, обработка и прочее делаются не при запросе пользователя, а демонами (по крону), механизм такой:
1. Пользователь создает задачу, задача добавляется в очередь;
2. Демон, который работает постоянно или запускается периодически берет задание из очереди и выполняет, данный шаг может быть разбит на несколько, например один демон скачивает и добавляет в другую очередь, из которой уже второй демон извлекает нужные данные и т.п.

3) Посмотреть в сторону PostgreSQL, а не MySQL, она является более серьезной БД и, вероятно с частью задач справится лучше, чем мускуль.

Это все, непосредственно в коде, а так конечно возможны всякие балансеры, базы на разных серверах (основная база, базы статистики, базы необработанных данных)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы