Задать вопрос
  • Зачем вообще использовать брокеры очередей?

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

    В вопросе описана так-себе реализация с поллингом очереди. Различие без-очереди и с-очередью — в направлении инициативы:
    • без очередей «рабочий» опрашивает базу снова и снова: «есть чё?». Это как из браузера ajax'ом пинговать сервер раз в секунду в поиске сообщений. Работает, но такое себе..
    • с очередью инициатор процесса – брокер. Это брокер передаёт очередную задачу на исполнение первому освободившемуся «рабочему».

    spoiler
    Про потерю данных при падении — че-т страшилка, далёкая от продакшена. Драйвером очереди может быть и Redis (со своей персистентностью) и MySQL какой-нибудь, и другие. Имхо костыльно пихать в очередь всего лишь id записи в БД, которую надо обработать – чтобы рабочий, взявший задачу, заново собирал данные. Это не кошерно и калорийно.

    Лучше класть в очередь самодостаточную задачу. Например, сериализовать модель. Чтобы рабочий, получивший задачу, уже не обращался к базе – а только наполнял темплейт письма данными из полученной модели и отправлял послание. И в БД проставлял статус «отправлено»
    Ответ написан
    Комментировать
  • Зачем вообще использовать брокеры очередей?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    В первую очередь брокеры нужны для балансировки нагрузки и увеличения надежности и скорости работы системы в целом.

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

    В случае работы с сайтом у вас будет 1 воркер, который будет просто сканировать таблицы на поиск неуведомленных пользователей. Если у вас будет 2 воркера, надо делать систему блокировок и т.д. Т.е. мы упираемся в проблему масштабирования. Для решения задачи разной скорости уведомлений, вы построите систему приоритетов или будете делать разные таблицы с разными воркерами. Это все будет работать, но нагрузка на базу будет серьезной и она будет увеличиваться с ростом пользовательской базы. Опять вы упретесь в тормоза.
    Опять же есть письма, которые должны быть доставлены немедленно, вроде подтверждений аккаунта, смены пароля и т.д. Еще одна таблица? Дополнительный приоритет? Может так произойти, что вы некоторые пользователи вообще никогда не получат писем и уведомлений. Прийдется придумывать способ контроля.
    Я уж не говорю о куче кастомных воркеров под каждую ситуацию. И их будет с десяток, не меньше.

    Очереди решают, т.к. можно сделать их несколько и на для каждой настроить определенное количество абсолютно одинаковых воркеров. Пример с поллингом отвратителен и сейчас никто так не делает, а с очередями делают так.
    У вас может быть цепочка из нескольких воркеров, когда результат работы одного помещается в очередь.
    Например, когда надо сначала достать данные из нескольких разных медленных систем, отрендерить в шаблон, а потом отправить письмо. Сборка, рендеринг и отправка - три разные компонента, последние два из которых, можно активно переиспользовать для других целей изменяя лишь конфигурацию времени исполнения.
    При таком подходе проще развивать кодовую базу, исправлять ошибки, т.к. они изолированы в одном месте, а не разбросаны по всей системе. И да, косяк в "горячем" модуле вы заметите немедленно. А самое прикольное то, что ваш косяк, пользователи и не заметят, для них это будет выглядеть как простая задержка, а у вас будет время на то, чтобы исправить ошибку. Сообщения посидят в очереди и все.
    Но это еще не все, ваши воркеры могут быть написаны на разных языках программирования. Например пользователь может загружать фото на сайт на PHP, объекты распознаваться на Python, видео рендериться на Rust, а отправка писем может быть на Go. И такой подход может подойти для сложных систем с распределенными командами и различным уровнем компетенция в применяемых технологиях. Специалистов превосходно владеющих всеми приведенными технологиями просто единицы, и поверьте, они решают задачи совершенно другого уровня.
    Ответ написан
    Комментировать
  • Python для системного администратора, сколько?

    opium
    @opium
    Просто люблю качественно работать
    Так вы книгу то сперва прочитайте и сразу все вопросы сами по себе отпадут
    Ответ написан
    Комментировать
  • Python для системного администратора, сколько?

    saboteur_kiev
    @saboteur_kiev Куратор тега Карьера в IT
    software engineer
    bash/python/javascript следует знать на уровне работы с данными.
    Чтобы ты мог прочитать/отпарсить текст, числа, json - это самое частое что приходится делать.

    Пример скрипта средней сложности для админа - забрать по урл (возможно с авторизацией) json с данными, распарсить и преобразовать в формат prometheus или sql запроса для инсерта в какую-нить базу.
    Если этот скрипт еще и с обработкой exception - то и совсем хорошо.

    Знание bash/powershell IMHO немного важнее, ибо там ты неразрывно связан с архитектурой и особенностями ОС, но питон универсален и хорош именно для прикладного, а не системного взаимодействия.
    Ответ написан
    Комментировать
  • Существует ли библиотека Zip с потоковой записью?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    Само сжатие делает zlib, оно потоковое.
    Остается только формировать структуру файла ZIP, это вполне можно делать "на лету".
    Ответ написан
    Комментировать
  • Существует ли библиотека Zip с потоковой записью?

    @Mercury13 Автор вопроса
    Программист на «си с крестами» и не только
    В конце концов перешёл на собственный порт MiniZip.
    Ответ написан
    Комментировать
  • Какие есть компиляторы для C#?

    Как отметил роман - есть Рослин, на котором сейчас основан csc, который идёт в комплекте с dotnet sdk - всё под лицензией MIT.
    Если не от МС, то есть ещё mono, у которого есть свой компилятор
    Ответ написан
    Комментировать
  • Какие есть компиляторы для C#?

    @rPman
    у mono project есть свой компилятор
    https://www.mono-project.com/docs/about-mono/langu...
    Ответ написан
    Комментировать
  • Как соединить два роутера на расстоянии 100 м?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Если есть возможность попробовать то попробуйте вот это
    https://www.citilink.ru/catalog/computers_and_note...
    Ответ написан
    1 комментарий
  • Как проверить Теорию 6 рукопожатий в БД с миллионами юзеров?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Поскольку это задача из теории графов - то и решать ее нужно на языках разработки и библиотеках поддержки графов. 1 млн узлов графа - это не много для современной памяти.

    Из java библиотек есть Guava, Jung, GraphT.
    Ответ написан
    Комментировать
  • Как проверить Теорию 6 рукопожатий в БД с миллионами юзеров?

    @DDwrt100
    Выбрать правильный инструмент. В данном случае выгрузить данные в графовую базу данных. И в ней обсчитывать подобную задачу.
    Ответ написан
    Комментировать
  • Как проверить Теорию 6 рукопожатий в БД с миллионами юзеров?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    По-моему, у Дональда Кнута рассматривалось решение этой задачи.
    Ответ написан
    Комментировать
  • Как проверить Теорию 6 рукопожатий в БД с миллионами юзеров?

    Книга Дауни А. - Изучение сложных систем с помощью Python - 2019
    Глава 3. Графы «Мир тесен»
    Ответ написан
    Комментировать
  • Почему человек узнал все обо мне по фейковой закрытой странице в вк? Как такое возможно?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    Да всё что угодно может быть.
    Он давно установил троян на твой комп.
    Либо твои друзья/подруги слили инфу, даже не подозревая этого. Либо умышленно.
    Ты сама наследила где только могла.
    Не забывай, что любую инфу можно купить в интернете.
    Новый телефон он может вообще не знать, ищи слив в другом месте
    Ответ написан
    Комментировать
  • Когда и где можно и нужно добавлять префиксы браузеров(-webkit- -moz- -ms-)?

    Lynn
    @Lynn
    nginx, js, css
    Используйте автопрефиксер.
    Пусть компьютер этим заморачивается https://github.com/postcss/autoprefixer
    Ответ написан
    Комментировать
  • Надёжный SSD и HDD диск?

    Sanes
    @Sanes
    Единичный случай, не показатель. Все ломаются.
    Ответ написан
    Комментировать
  • Как перебрать объекты с вложенностью?

    SilenceOfWinter
    @SilenceOfWinter
    та еще зажигалка...
    вызов функции из функции называется рекурсией
    Ответ написан
    Комментировать
  • Как удалять файлы в линукс не тормозя компьютер?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Если чистка файлов идёт на регулярной основе - то имеет смысл сделать эту папку диском и подключать через fstab. Для чистки - umount + mkfs + mount. Займет секунды.

    Ещё - обратить внимание на тип файловой системы. Например zfs удаляет медленно. Возможно стоит перейти на ext4.
    Ответ написан
    Комментировать
  • Как удалять файлы в линукс не тормозя компьютер?

    @MechanID
    Админ хостинг провайдера
    почитайте про команды nice и ionice
    Ответ написан
    2 комментария