Задать вопрос
  • Как понять, что все сообщения в очереди обработаны?

    Mausglov
    @Mausglov Автор вопроса
    Vitsliputsli,
    Если поставим инкрементацию кол-ва выполненных до финализации задачи в очереди, то при сбоях в воркере (если он упал после инкрементации, но до финализации задачи) кол-во выполненных может быть больше реального кол-ва задач, некрасиво, но работу не нарушит.

    Тут только 2 варианта последовательности действий воркера:
    1) увеличить свой счётчик, затем сообщить брокеру, что задача готова;
    2) сообщить брокеру, что задача готова, затем увеличить свой счётчик.
    На мой взгляд, второй вариант выглядит "более правильным". Но тогда возможна ситуация, когда сумма счётчиков будет меньше, чем количество выполненных задач.
    В менеджер можно добавить такой вариант: если сумма счётчиков не меняется в течение какого-то времени, то спросить у брокера количество задач в очереди. Если там ноль, то можно считать, что все задачи выполнены.

    Т.е. повторное выполнение той же самой задачи воркером никак не должно нам мешать.

    Это добавляет баллов второму варианту. В нём, если воркер упал до того, как сообщить брокеру, что задача выполнена, счётчик не увеличится.

    Главное проработать возможные ошибки, если воркер вылетел на середине задачи, а затем начал ее сначала.

    За это отвечает брокер - если по таймауту задача не подтверждена, она автоматически возвращается в очередь. Это была одна из причин, почему я выбрал beanstalk, а не Redis Pub/Sub ( у Redis сейчас заявлен новый механизм, Streams , но мне он показался сложнее )

    обычно цена со скидкой высчитывается "на лету"

    Обычно да. Но это Битрикс...
  • Как вывести основной раздел инфоблока и его элементы?

    по-хорошему, все эти подразделы не нужны. Нагрузка, размер колёс и всё остальное - это свойства элементов, в публичной части можно использовать штатный комплексный компонент каталога, в котором есть коробочный фильтр.
    А если нужны отдельные страницы с ЧПУ - например, "найнеры", то есть решение типа этого
  • Как в Drupal 10 массово проставить noindex для >1000 страниц?

    а что Вас сдерживает? для скрипта 1000 записей - мелочь
  • Как принять данные от JQuery.ajax на сервере php?

    EvgenyApMr, что-то мне подсказывает, что если сделать так:
    - $data = stripcslashes($_POST['form']['dataJSON']);
    + echo $_POST['form']['dataJSON']; die();
    $dataJS = json_decode($data, true);
    echo "res: ".$dataJS['day'];

    то никаких ненужных слешей Вы не увидите. Значит, и добавлять строчку со stripcslashes() было не нужно.
    (мою отладку потом, разумеется, тоже нужно убрать)
  • Как принять данные от JQuery.ajax на сервере php?

    EvgenyApMr, легко. Удалите строку с stripcslashes() в своём редакторе кода.
  • Регулярное выражение поиск по группам или нет?

    Виктор,
    добавление \K стирает то, что не в группе,

    Оно ничего не стирает, а делает сброс буфера. Так что это одноразовый приём.

    Автор вопроса, судя по всему, не использует это для каких-то преобразований, только для поиска и просмотра глазами.
  • Бизнес процесс и кастомные поля список. Как забрать выбранные значения из поля?

    я бы хранил результаты как поля в той сущности, над которой Вы запускаете БП. Например, у меня есть сущность "заявка" - элемент инфоблока, у этого инфоблока есть свойство "статус". Один БП отработал, поменяв значение свойства. Другой БП запустился - если значение свойства "статус" == X, то что-то сделал и поменял "статус" на новое значение.
    Но у меня вот так построено; может, Вам не подойдёт.
  • Почему пишет что нет сайта если он есть?

    я даже на ноутбуке не могу прочитать, что там на скриншоте изображено...
  • Почему возникает JSON error: Syntax error [4]?

    Александр, продублируйте в ответ к вопросу, пожалуйста.
  • Регулярное выражение поиск по группам или нет?

    Jimm24, решение от dodo512 прикольное, но для более сложных случаев посмотрите выдачу про "regex незахватывающие группы"
  • Как понять, что все сообщения в очереди обработаны?

    Mausglov
    @Mausglov Автор вопроса
    Что подразумевается под агрегатными задачами?

    скидки на товары. В каждой скидке свой перечень товаров, и если цены на какие-то товары из перечня поменялись, то скидку надо "пересчитать". ( сходу не скажу, почему). Из дизайна видно, что расточительно пересчитывать скидку после изменения каждого товара, который в неё входит; лучше дождаться всех изменений по товарам, и только после этого пересчитывать скидки.
  • Как понять, что все сообщения в очереди обработаны?

    Mausglov
    @Mausglov Автор вопроса
    Vitsliputsli,
    Также, из-за того что эти задания не предназначены определенному воркеру, то один воркер может обработать 2 задания-стопера

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

    Mausglov
    @Mausglov Автор вопроса
    Vitsliputsli,
    В варианте с заданием-стопером вы создаете зависимость между брокером и воркерами, брокер должен всегда точно знать сколько работает воркеров.

    Нет, брокер (beanstalkd) знает, сколько воркеров, но не умеет ставить задания. ( не буду дальше позориться и рассказывать устройство, и так вижу, что тут коряво вышло) . Но Вы правы, тут могла быть проблема из-за несоответствия количества воркеров и заданий-стопперов в очереди.

    Теперь вижу, что подход в целом неверный. Если я боюсь утечек памяти, надо было брать пример с Апача: Менеджер мониторит количество воркеров и запускает новые, если нужно, а воркер обрабатывает фиксированное число заданий ( тысячу, 10 тысяч ) и завершается. Если хочется принудельно завершить воркера, надо смотреть в сторону сигналов.
  • Как понять, что все сообщения в очереди обработаны?

    Mausglov
    @Mausglov Автор вопроса
    Vitsliputsli,
    Или, например, некий менеджер, который будет собирать информацию с воркеров

    Этот момент мне неясен. В моём представлении, это так:
    1) есть некое оперативное хранилище ( например, Redis )
    2) Паблишер туда пишет: "я поставил N заданий". И закончил работу.
    3) Каждый Воркер в то же хранилище пишет свой инкрементный счётчик, сколько заданий он сделал.
    4) Менеджер работает параллельно воркерам и считает сумму их счётчиков. Как только сумма сошлась с числом от паблишера, все задания обработаны.
    Так?
  • Переписать грамотнее и с помощью Laravel реально ли и каким лучше образом?

    Adamos, классический набор "title, meta description,h1, текст" никуда не делся. Микроразметка тоже важна. Мой опыт взаимодействия с сайтами на реактивных фреймворках таков:
    Во-первых, их было мало, по пальцам одной руки можно сосчитать.
    Во-вторых, внутри это выглядело так:
    • минимальная разметка head, одинаковая для всех страниц,
    • пустой body,
    • запуск приложения.

    Один из проектов потом точно смог в SSR, но страница оказалась забита то ли чудовищным количеством data-атрибутов, то ли монструозным Javascript - не помню подробностей, но показатели PageSpeed упали до плинтуса.
    Возможно, сейчас подобные проекты ещё на старте переводятся в режим "только консультации", поэтому я о них ничего и не слышу. А может, им неинтересно SEO.
  • Переписать грамотнее и с помощью Laravel реально ли и каким лучше образом?

    Adamos, я нигде не предлагал начинать с PHP 4 , посмотрите ещё раз.
    Ни одному сайту из сделанных мной за последние годы никакая SEO, за отсутствием публичной части, просто не требовалась.

    Это Ваш личный опыт. Мой полностью противоположный - магазины и сайты услуг.
  • Как подключиться из PHP к memcached с использованием socket?

    Евгений Николаев, а попробуйте PHP кодом посмотреть содержимое. /tmp Если там пусто - то это ещё может быть влияение privateTmp в systemd
  • Можно ли создать базу данных на одной таблице?

    Вы немножко промахнулись с датами :) JSON только появился в 2006-м. Первый релиз MongoDB был в 2009-м. Поддержка (довольно сырая) этого типа в MySQL появилась в 2015-м.

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

    Adamos,
    И после всей этой небыстрой эволюции сунуться в реальный мир и обнаружить, что динозавры к этому времени уже вымерли

    На то, что я предложил при выборе направления "бэкенд", и в том формате освоения, который я предложил, нужна неделя. Динозавры так быстро не вымирают :)
    А к тем, кто делает всё на реактивных фреймворках, приходит заказчик с SEO оптимизатором и заставляют переделывать. И только особо изворотливые могут убедить заказчика потратиться на отдельный сервер ради SSR .
    Я не сторонник обучения "давайте бросим в воду, есть шанс, что выплывет". Очень многие не выплывают, и собеседовать их - сплошное разочарование. Предпочитаю закладывать хороший фундамент, и только потом двигаться дальше.
  • Переписать грамотнее и с помощью Laravel реально ли и каким лучше образом?

    EpIvIaK,
    Говорили, что смешивать <?php?> html <?php?> html плохо

    Плохо, когда у Вас там (в php) логика. Например: на странице блок новостей, и когда разметка дошла до этого блока, Вы ставите открывающий php тег, по куче условий строите запрос к БД, достаёте новости, к новостям миниатюры... И через 1-2 страницы кода продолжаете строить разметку, как ни в чём не бывало. ( а посторонний человек уже забыл, где мы и для чего).
    Когда PHP используется как шаблонизатор - это не очень удобно, но нормально. Посмотрите на Smarty, один из старейших PHP шаблонизаторов ( до сих пор жив, кстати). Там очень многое выглядит как замена шила на мыло.