Задать вопрос
  • Какой можно поставить дистрибутив линукс на Thinkpad-e330?

    @Vitsliputsli
    Дмитрий, а в чем польза то? обычное издевательство, автор пишет что не осилил установку Debian, а в Ubuntu проблемы, которые не может решить, а ему советуют, как схватить еще больше проблем. И, конечно, же советуют только на основе 2 слов "надежные" и "хорошие". Чем они надежнее вообще неизвестно. А хорошие... Gentoo, который практически никому не нужен, и уж точно для домашнего использования, ну разве что понтоваться. Slackware, который много лет не мог осилить контроль зависимостей и утверждал, что это фича. Ну а LFS вообще не дистрибутив.
    Написано
  • Как использовать docker secrets в bash скриптах?

    @Vitsliputsli
    Hardoman,
    Нет смысла защищать секреты внутри контейнеров, как уже было сказано, если есть доступ к контейнеру, их в любом случае раскроют

    А если установить пользователя в контейнере не root, а секрет лежит в директории root без доступа для чтения?
    Написано
  • Имеет ли смысл реализация REST API через RabbitMQ?

    @Vitsliputsli
    Borisawa, архитектура вещь сложная, любой архитектор всегда смотрит субъективно, поэтому хорошая практика обсуждение архитектуры между несколькими лицами. Мое мнение не важно, смотрите на саму информацию и на сколько она вам подходит. Ну т.е. для 1 небольшой очереди действительно может быть избыточным, но вдруг это только первый шаг и у вас там глобальные планы по расширению проекта, тогда разумеется стоит сразу закладываться на более сложное, но универсальное решение.
    Написано
  • Имеет ли смысл реализация REST API через RabbitMQ?

    @Vitsliputsli
    Borisawa,

    Vitsliputsli, в принципе, всё что вы сказали коррелирует с тем, как мы хотим организоваться. Тогда подитожу:
    1) Клиент шлёт запрос через API-шлюз, запрос попадает в FastAPI-приложение;
    2) Приложение назначает запросу id и размещает его как сообщение в заранее объявленной durable-очереди RabbitMQ и ждет по нему ответа;
    3) Сервис-обработчик прослушивает эту очередь, скачивает сообщение, работает с ним, а затем отправляет json с данными и кодом ответа;
    4) Приложение обнаруживает, что сообщение обработалось и возвращает клиенту его содержимое;
    5) Если всё завершилось ожидаемым сценарием, приложение закрывает сообщение с флагом "ack".
    Сейчас у меня такая картина шины данных с брокером. Надеюсь, у вас тоже.

    В принципе да, вы описали вариант простой очереди, т.е. у вас очередь заданий, и воркер(ы) которые эту очередь разбирают. Для такого варианта я скорее всего не стал бы подключать брокер (если его в архитектуре не было), а реализовал бы очередь в БД (по уже названным причинам, лишняя точка отказа и т.д.).
    Но, если в п.3 сервис-обработчик не один (не в смысле 1 масштабирован в несколько, а в смысле обработчики осуществляющие разную бизнес-работу), т.е. обработчик сделал свое и отправил следующему, следующий дальше и т.д. Т.е. когда не 1 очередь, а пересылка между разными сервисами, тогда нужен брокер.
    Написано
  • Имеет ли смысл реализация REST API через RabbitMQ?

    @Vitsliputsli
    Borisawa,
    сейчас почти все сервисы работают как прямые интеграции, т.е. креды прописаны в каждом сервисе и запись напрямую в боевые БД.

    А с шиной они будут общаться только с ней, соответственно конфигурировать проще, и независимость сервисов выше. А если все сервисы общаются со всеми, и их много, то это еще больше склоняет чашу в сторону общей шины.

    Правильно ли я вас понимаю - задача в том, чтобы назначить условный id (например либой uuid) сообщению (которое является post / get запросом клиента), а после этого "скачать" результат исполнения этой очереди и отдать его клиенту? В таком случае http-соединение не порвётся, так? Чувствуется, что время ожидания вырастет, но врядли это критично, если данные станут реально персистентны.

    Да, типа того. Прям подробно не скажу, нет сейчас под рукой такой системы, но логично что процесс, который принял запрос, размещая его в брокере указывает себя как отправителя. И когда сообщение будет обработано всеми необходимыми сервисами, конечное сообщение будет в адресате иметь этот адрес отправителя (да, какойто условный id).
    Т.е. пока идет обработка, процесс работающий с http висит на связи с брокером и ждет предназначенное ему сообщение. Нет никаких причин соединению отваливаться, разве что по таймауту, но это вопрос скорости работы сервисов.
    Время ожидания вырастет, но вряд ли критично, можете сами прикинуть, на основе кол-ва пересылок (т.е. кол-ва сервисов) и сетевого лага между ними. Если они в одном ДЦ, то это немного. Затраты накладные на брокер тоже будут небольшие. Другое дело, что брокер будет обрабатывать весь трафик, и там должна быть достаточная машина. Это может быть проблемой, если трафик очень большой.
    И еще, обратите внимание на момент, как будете управлять сообщениями, т.е. хореография или оркестрация. Этот выбор потом поменять очень сложно, поэтому выбирать нужно ответственно.
    Написано
  • Имеет ли смысл реализация REST API через RabbitMQ?

    @Vitsliputsli
    сергей кузьмин,
    Vitsliputsli, Это будет точкой отказа для всех сервисов
    it is common practice for an API Gateway to be load balanced, although the API Gateway itself can sometimes provide some basic load balancing capabilities for backend services.

    Можно подробнее. А то непонятно причем здесь балансировка API Gateway.
    Написано
  • Имеет ли смысл реализация REST API через RabbitMQ?

    @Vitsliputsli
    1) Это будет точкой отказа для всех сервисов;
    2) Нельзя реализовать ответ для http-запроса, ведь брокер разделяет процесс и не предназначен для синхронных запросов (так мне кажется).

    1) разумеется, но другие плюсы могут перевешивать этот минус.
    2) почему нет? типичная схема: клиент отправляет запрос по http и ждет, сервер валидирует запрос и кидает сообщение в брокер, оно там многократно крутится по разным сервисам, затем формируется сообщение для сервера работающего с http, он его забирает и формирует ответ по http.

    Мой вопрос: следует ли реализовывать передачу данных по REST API через RabbitMQ в данном случае?

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

    @Vitsliputsli
    nata32,
    неправильно потому что при таком варианте выдается количество правильно а дальше только один товар

    В sql обычно запрос кол-ва строк и запрос самих этих строк выполняется отдельно.
    Если данные забирает приложение, то можно просто забрать данные и посчитать кол-во строк уже в нем.
    Написано
  • Как подсчитать количество строк в sql запросе?

    @Vitsliputsli
    nata32,
    SELECT DISTINCT COUNT(p.text)

    SELECT COUNT(DISTINCT p.text)

    Лучше всего вопросы задавать как тейст-кейсы: делаю вот это, ожидаю получить вот это, а получаю вот это. Фраза "работает неправильно" бесполезна, без указания что есть правильно.
    Что касается "черновика" дело не только в sql-инъекциях, по запросу абсолютно непонятно что это, почему в полях с названием text лежат id, что такое id для координат, почему count это sum и т.д. А соответственно нельзя решить каким действительно должен быть запрос. Ну а если это неважно, то лучше убрать все лишнее и оставить только то, что касается вопроса.
    Написано
  • Почему opensearch создает кучу процессов?

    @Vitsliputsli
    Вроде и не критично, но непонятно зачем
    Можно это исправить?

    Не стоит "исправлять" что либо, что существует "непонятно зачем". Тем более, если нет объективных причин (некрасивая картинка - это не объективная причина).
    Если все равно хочется, то посмотрите настройки thread_pool, во всяком случае в Эластике там настраивается.
    Написано
  • Как обработать 2 одновременных запроса со стороннего сервера?

    @Vitsliputsli
    Вечно Крайний, я так и не понял, как это сложное решение вам помогло, если мы, как и без всего этого, на 2ой запрос отправляем ошибку, т.е. в поведении ничего не изменилось.

    Как оказалось что если отдать ему по второму запросу не 200 ОК, то сервер клиента обрубает оба соединения и не ждет когда я отдам по первому запросу данные

    Поэтому логичнее было бы сделать обычное кеширование - класть в redis (а можно вообще взять shared variables и не нужна тогда никакая БД) результат работы внутреннего запроса. Т.е. второй запрос видит, что ключ создан - значит запрос уже выполняется, но значение пустое, значит второй ждет пока значение не будет перезаписано. В итоге, на все дублирующие запросы будет отправлен валидный ответ, а внутренний запрос всего один.
    Написано
  • Как улучшить код?

    @Vitsliputsli
    pLavrenov,

    Vitsliputsli, надо не изменять исходные данные а подготавливать новые. и $data вообще не должен быть массивом а обьектом реквеста, сейчас data абсолютно не контролируемый массив

    Уж точно не объектом реквеста. Реквест и данные модели Post в бд вещи разные.
    Но здесь оперирование не объектами, и изменяются не данные реквеста или данные отправленные на сохранение, изменяются некие внутренние данные метода (у них даже название без смысла). Понятно когда нельзя изменять объект для какихто внутренних манипуляция приводя искомый объект в невалидное состояние. Но здесь то чисто внутренние данные, как раз для такого использования. Зачем здесь тратить память?
    Написано
  • Как улучшить код?

    @Vitsliputsli
    fasewyby,

    DbExeption пишет в логи и уведомляет юзера о проблемах с БД

    Тем более стоит подумать о single responsibility. Манипуляции с данными в бд и уведомление пользователя прям разные вещи, я бы держал их в разных местах.

    В $image либо путь к картинке либо null

    Понятно, что там чтото есть, но в сравнении этого не видно. Меньше неявных преобразований - проще читать и меньше ошибок. Т.е. фраза
    is_null($image)
    Однозначна, проверяем тип, null или нет.
    Фраза $image это сокращение от (bool)$image, т.е. чтобы ни было в переменной это кастанули в bool, т.е. null, пустая строка, 0 или может что еще, причем сразу ощущение что вероятно не все из этого подразумевалось.
    Написано
  • Как улучшить код?

    @Vitsliputsli
    5) Вместо unset -> Arr::only

    Почему нужно использовать этот хелпер? С учетом, что автору нужно удалить, а не забрать 1 ключ из массива.
    Написано
  • Как улучшить код?

    @Vitsliputsli
    tukreb,
    Да не показатель, ведь именно Ларавел хвастается тем, что может запустить сайт 1 строчкой, тем самым позволяя гавнокодить по полной.
    Симофни же отобьёт руки так, что гавнокодить придётся сломанными руками.

    Да без разницы, кто чем хвастается. Все прекрасно знают, что Симфони это другой уровень. Но, работают обычно с тем что есть и редко можно взять и все поменять, так что претензии к Ларе не в огород автора вопроса.
    Написано
  • Как улучшить код?

    @Vitsliputsli
    То что сразу на поверхности:
    1) Exception здесь не нужен, вы положение по трейсу сможете определить, если конечно его залогируете. А сейчас это только запутает - вы ловите Exception, а выкидываете DbException, хотя не факт что ошибка будет в db.
    2) if ($image) - в условии пишите, что конкретно проверяете, а не что получится если неизвестно что кастануть в bool. Например is_null($image) или что у вас там по смыслу.
    3) Удалять файл, конечно, лучше после удаления записи из БД.
    4) "Как избавиться от дублирования?" - 4 короткие строчки это мелочи, даже не стоит заморачиваться.
    Написано
  • Как улучшить код?

    @Vitsliputsli
    tukreb,
    В Симфони с его Доктриной у вас сразу все операции с БД будут в транзакциях и их не нужно вызывать вручную (за исключением специфический случаев), да и вообще код этот сократится до пары строк.

    Симфони отличная штука, но "не нужно вызывать вручную" транзакции вообще не аргумент, что с того что это скрыто? А кол-во строк не показатель хорошего кода, совсем не показатель.
    Написано
  • Лишние переводы строк в ответе сервера (echo)?

    @Vitsliputsli
    ProjectSoft,
    Абсолютно нормальное поведение получения исходной строки от всех не символьных пробелов, переносов, etc ..
    Ну сами подумайте, а если бы были ни только переносы, но и пробелы, не переносимый пробел, ... Нужна вам такая строка?

    Нет, это абсолютно ненормальное поведение. Свой собственный сервер должен присылать точный ответ, а не чтото похожее. Нельзя допускать чтобы сервер слал чтото случайно и затыкать это дополнительной обработкой.
    Написано
  • Как отключить возможность запуска командной строки на экране блокировки windows 11?

    @Vitsliputsli
    Ziptar,

    Vitsliputsli, мой хороший, если ты достаточно глуп, чтобы думать, что кто-то не понимает твои примитивные как веник попытки сарказмировать, то я, опять же, не понимаю что ты здесь вообще забыл.
    А хамить начал ты, мой хороший. Причём твоё хамство непрерывным потоком льётся, и ты всё никак успокоиться не можешь.

    А ты точно понимаешь где находишься? Здесь сарказм совсем не обязателен. И все же как любое сомнение в способностях тебя выкидывает опять на эвфемизмы, а тут вообще о себе в третьем лице...
    Подскажи, где это хамить начал я?
    Написано
  • Как отключить возможность запуска командной строки на экране блокировки windows 11?

    @Vitsliputsli
    Ziptar,

    Vitsliputsli, кто сказал, что я за тебя переживаю? Я просто констатирую: истерика здесь у тебя, а вовсе не у меня. А что до "хамоватого зануды" - я хамоватый зануда, всё верно. Но ты то просто бессмысленный хам.

    Это называется сарказм, с этим видно у тебя также плохо, как с анализом фактов.
    А соразмерный ответ на хамство это нормально, защищаться это нормально. Причем полезно всем, т.к. у поставленного на место хама гонора меньше становится.
    Написано