@Ivanoff-i

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

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

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

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

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

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

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

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

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

Похожие вопросы