• Что за странные логи в nginx, контейнера docker?

    ky0
    @ky0 Куратор тега Nginx
    Миллиардер, филантроп, патологический лгун
    Если на сайте нет уязвимостей - беспокоиться не о чем. В чёрные списки ничего добавлять не стоит.
    Ответ написан
    3 комментария
  • Как во vue 3 сделать только рендер компонентов, без замены рут элемента?

    Vadiok
    @Vadiok
    Веб разработчик
    Да, возможно:
    import { createApp } from 'vue';
    
    createApp({
      components: {
        // Список компонентов, которые могут использоваться в шаблоне 
      },
    })
      .use(store)
      .mount('#app');


    Единственный момент - необходимо использовать при подключении сборку, которая поддерживает парсинг шаблонов. По умолчанию используется меньшая по размеру сборка без этой возможности, а за парсинг шаблонов отвечает vue-loader.

    Чтобы код выше работал можно подправить либо импорт на 'vue/dist/vue.esm-bundler.js'', либо добавить во vue.config.js секцию:

    const buildConfig = {
      // Может быть что-то выше
      configureWebpack: {
        resolve: {
          alias: {
            vue$: 'vue/dist/vue.esm-bundler.js',
          },
        },
      },
      // Может еще что-то
    };
    
    module.exports = buildConfig;
    Ответ написан
    2 комментария
  • Какая инфраструктура должна быть для 24/7 парсера обновляющего БД?

    @vitaly_il1
    DevOps Consulting
    Универсальный ответ - "зависит".
    Нужно сделать PoC, посмотреть на запросы, оптимизировать их. Потом оценить траффик в продакшен и сделать load test. По следам это оптимизировать и масштабировать.
    С точки зрения инфраструктуры - если много reads, то slave[s] очень помогут.
    С точки зрения архитектуры - засылка задач в очередь и вытаскивание из нее помогают сгладить пики.
    Ответ написан
    2 комментария
  • Какая инфраструктура должна быть для 24/7 парсера обновляющего БД?

    hrabry
    @hrabry
    Посмотри в сторону https://amphp.org/, там и http клиент есть вместо CURL. Я на нём сделал демона который работает 24/7, если появляются новые запросы он обрабатывает их асинхронно. Так же реализовал возможность ограничить максимальное кол-во одновременно исходящих соединений как для всего сервера так и для отдельных источников.
    У меня 1 демон с каналом связи 100мбит/c за час 4-8 млн. страниц парсит, хз много это или мало....
    Ответ написан
    Комментировать
  • Какая инфраструктура должна быть для 24/7 парсера обновляющего БД?

    romesses
    @romesses
    Backend инженер
    Можно построить архитектуру приложений так, что API будет работать преимущественно в режиме чтения с СУБД.
    А другой процесс-воркер будет получать задачи через очередь сообщений и интенсивно писать в СУБД.
    В API вместо блокирующего ответ клиенту парсинга нужно сразу слать задание в очередь сообщений. Тогда соединения не будут удерживаться подолгу, а почти сразу будут закрыты по отправке в очередь.
    Все, что шлется в API для добавления в очередь, можно возвращать ответ 202 (Accepted).
    Как только воркер выполнит задачу, он обновит результат парсинга в БД. А тем временем, при обращении по API информация будет считана с БД без каких-либо блокирующих операций.

    То есть небольшой апгрейд состоит в схеме:
    APIs (write) -> MQ -> Worker(s) -> DB
    APIs (read) <-> DB
    Так легко добавить любой компонент в случае большой нагрузки.

    Ну и, необходимо замерять нагрузку, чтобы знать где узкое горлышко.
    Ответ написан
    Комментировать
  • Из за чего возникает ошибка Internal server error при попытке отправить POST через CURL для оплаты частями от Privat Bank?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Окей.

    'partsCount' => 5,

    partsCount Integer notNull, min=2, max=25 Количество частей на которые делится сумма транзакции (Для заключения кредитного договора) Должно быть > 1.


    'amount' => 2,
    amount Да Double notNull, Min=300, Max=50 000 Окончательная сумма покупки

    Минимальная сумма 300, у вас 2.
    Далее, вы хотите чтобы 2 разделилось каким-то образом на 5?
    Правильно ли я понимаю, что вы хотите чтобы пользователь провел 5 транзакций по 40 копеек?

    Кроме того - у тебя еще и ошибка в сигнатуре:
    'signature' => base64_encode ( SHA1 ( '75bef16bfdce4d0e9c0ad5a19b9940df'.'4AAD1369CF734B64B70F'.'12211212121'.' 200'.' 5'.' PP'.'https://adsasd'.'https://saddsa'.' test1200'.' 75bef16bfdce4d0e9c0ad5a19b9940df' ))

    Если внимательно посмотришь - у тебя пробелы перед 200, 5 и PP стоят.
    Далее: у тебя есть параметр 'recipientId', который ты передаешь, но в хеш-сумме он остутствует, а по правилам должен быть. Либо убирай, либо добавляй в формирование.

    Поделаешь то что нужно и получишь другую ошибку:
    Array
    (
        [orderId] => 12211212121
        [signature] => +JYghcAp9oIQq3xR/Zn1PftEvQ8=
        [state] => FAIL
        [message] => bad value: Scheme not found for given store
        [storeId] => 4AAD1369CF734B64B70F
    )


    Но это все потому, что scheme - это Идентификатор схемы. Выделяется Банком. По умолчанию не передается.

    Удаляешь его и получаешь заветное:
    Array
    (
        [orderId] => 12211212121
        [signature] => S4cN/oBUIIJeHlcJgTTM+gcZddQ=
        [state] => FAIL
        [message] => bad value: Payment with sent orderId already exists
        [storeId] => 4AAD1369CF734B64B70F
    )


    А это потому, что кто-то уже прогнал твой запрос через api или через веб-морду. Меняешь orderid и получаешь заветное:
    Array
    (
        [orderId] => fdsa1
        [signature] => x2m4GaLFv3ptcxZLynRzwuy/t5g=
        [token] => ADFEDB2FB0C7485CB968148D4BFD6B5A
        [state] => SUCCESS
        [storeId] => 4AAD1369CF734B64B70F
    )
    Ответ написан
    1 комментарий