@nevesomostjke

Правильно я планирую развернуть сеть из серверов?

Здравствуйте.
Есть скрипт, на PHP, который парсит данные 9 различных сайтов. Далее заносит полученные данные в базу SQLite. А затем пользователь открывает сайт и смотрит данные из базы.
Есть возможность скрипт разбить на части, скажем на 3 скрипта, чтобы он парсил по 3 сайта каждый. Среднее выполнения скрипта на одном сервере когда он парсит разом 9 сайтов ~4.1 секунды. Для меня это долго. Справочно: данные которые подругражаются с сайтов не более 1мб. В сумме 9мб максимум.
Итак.
Есть 5 серверов под управлением Windows Server. Названия условные.
s1
s2
s3
main
database

Они соединены в локальную сеть между собой и каждый имеет публичный IP.
Моя идея следующая:
Скрипт парсинга разбить на части. Тоесть, s1 будет получать данные с трех сайтов s2 с трех сайтов и s3 соответственно с трех сайтов.
Полученные данные они будут заносить в базу SQLite на сервер database.
А сервер main, где собственно и размещен сайт, уже получать данные с сервера database и выдавать пользователю.

Теперь вопрос.
Какое ваше мнение касательно данной идеи? Бред?
Может нет смысла заморачиваться из за 9мб, и использовать какую-то потоковую загрузку на одном сервере? Если да, что можете порекомендовать?
  • Вопрос задан
  • 590 просмотров
Решения вопроса 1
@neol
Скорее всего (не видя код сложно сказать точно) корень вашей проблемы в том, что данные с сайтов получаются последовательно. В таком случае вам достаточно будет выполнять запросы параллельно с помощью https://docs.guzzlephp.org/en/stable/quickstart.ht... или https://www.php.net/manual/ru/function.curl-multi-...
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
sergey-gornostaev
@sergey-gornostaev
Седой и строгий
Очевидно использование SQLite не по назначению, эта СУБД не предназначена для конкурентного и сетевого доступа.
Ответ написан
@FernandoErrNando
Не совсем понятно, почему именно для вас 4,1 секунды - это долго, какие вообще требования закладываются? Как вариант предлагаю рассмотреть след. конфигурацию:

Разбить скрипт на 2: Первый будет делать запрос на ваши сайты, получать ответ и сохранять в спец. таблицу. Второй будет брать новые данные из этой таблицы, запускать нужный обработчик, разбирать сохраненный ответ и обновлять нужные вам данные в бд. В общем классические очереди (гуглить по словам php queue, php jobs)

Преимущества:
1. Разделены получение и обработка данных
2. Каждую часть скрипта можно отдельно модифицировать (например, получение через параллельные запросы)
3. Обработчиков очереди можно делать столько сколько вам нужно
4. При увеличении кол-ва сайтов время выполнения одного запроса не изменится.
Ответ написан
Ваш ответ на вопрос

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

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