Создать процесс, общий обработчик для всех сайтов

127
23 июня 2021, 02:40

Ubuntu 16.04. Имеется php-скрипт: самописный сборщик статистики посещения моего сайта. Суть его работы в следующем: на каждый запрос к моему сайту формируется строка в БД, в которой фиксируются параметры запроса. Для каждого сайта свой сборщик статистики.

Так как сайтов на сервере много и посещений каждого сайта не мало, появляется необходимость как-то оптимизировать работу сборщиков статистики.

Идея такая: в памяти висит какой-то процесс (желательно на php). Все мои сборщики статистики (со всех сайтов) отправляют ему данные. Каждые 30 секунд или когда накопиться, например, 1000 записей, процесс записывает их в базу данных. Как это можно сделать?

Answer 1

Все мои сборщики статистики (со всех сайтов) отправляют ему данные. Каждые 30 секунд или когда накопиться, например, 1000 записей, процесс записывает их в базу данных. Как это можно сделать?

Через crontab запускать процесс записи с нужной периодичностью. Руководство: man crontab

Да - и не нужно, чтоб процесс какой висел - просто Ваши сборщики пусть записывают в файл, построчно, например, а отттуда брать массивом и раскладывать для записи в базу - и просто запускать cronom скрипт, который будет делать это. Нисчего не висит, все красиво, оптимально и элегантно.

Answer 2

В целом, всё довольно просто:

  1. Пишем скрипт, который умеет ждать коннекта на порт и парсить то что ему приходит
  2. Приходящие данные скрипт должен уметь кешировать, при необходимости - усреднять и так далее
  3. Пишется systemd service unit, который будет демонизировать скрипт

Дьявол, как всегда, в мелочах. Во первых, если надо оптимизировать, то это явно не php. Нужен, хотя бы golang или python. Во вторых, нужно понять где бутылочное горлышко, действительно ли это именно БД? В третьих, если это реляционная БД, то переход на nosql может существенно ускорить работу с данными.

Ну а вообще, предлагаю использовать стек prometheus("бд") + grafana(dashboards, "графики") + node_exporter/telegraf (сборщики метрик) (про установку можно почитать, например, тут). Этот стек позволит не только не задумываться о том, как хранить данные, но и позволяет гибко настраивать графики. А сборщики метрик не только имеют "из коробки" довольно большое количество вариантов собираемых метрик, но и позволяют легко себя расширять.

READ ALSO
Cron не выполняет кусок кода

Cron не выполняет кусок кода

Файл с кодом парсера Excel файла

103
Почему json_encode преобразует UTF-8 символы

Почему json_encode преобразует UTF-8 символы

Столкнулся с любопытным вопросомПо умолчанию json_encode шифрует utf8 символы в \u* и чтобы это отключить необходимо использовать опцию JSON_UNESCAPED_UNICODE

199
Cron не создаёт файл в каталоге

Cron не создаёт файл в каталоге

Выполняется файл php, в нем есть некий код и в конце он должен создать файл, но не создаёт, крон срабатывает и код выполняется но файл создать...

90