Рубрики
Без рубрики

Оптимизация сельдерея для рабочих нагрузок

В этой статье объясняется мое путешествие, чтобы сделать сельдерей (распределенную вычислительную структуру), обрабатывая более 10 миллионов задач в день. Теги от сельдерея, питона, распределения, распределение, Redis.

Вступление

  • Продукт Кратко
  • Текущая архитектура
  • Проблема с данными Грузы и бессонные ночи
  • Решения попробовали
  • Пункт назначения

Продукт Кратко

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

Некоторые из источников данных, которые мы поддерживаем на сегодняшний день:

  • Фондовые новости из нескольких источников
  • Новостная лента
  • Твиттер
  • Reddit.
  • Новости Yahoo
  • Yahoo Finance.
  • Зарабатывать календари
  • Сообщить о регистрации
  • Финансы компании
  • Цены на акции

Текущая архитектура

Широкий взгляд

Проблема с данными Грузы и бессонные ночи

Все работало нормально с рабочими нагрузками в разработке, мы развернулись вокруг кластера 5 машин в кластере сельдерея (процессоры I7 с 16 концертами памяти каждый) с каждой машиной, работающей на некоторых работниках сельдерея.

Но это было спокойствие перед штормом. Поскольку мы планировали увеличить наши рабочие нагрузки и настроить больше задач, система начала исчезать и выходить из памяти очень часто. Теперь мы создали около 10 миллионов задач в день. Работники сельдерея не смогли обрабатывать задачи на этой скорости, и это наращивало задачи в очередях, которые замедлились на брокере Redis, так как теперь хранили большое количество задач, это было, в свою очередь, делая всю систему Из памяти и постепенно до остановки.

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

Решения попробовали

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

Итак, мы пропустили это решение и договорились охватить глубоко в проблему.

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

Таким образом, наша система застряла в бесконечной петле.

  • Redis отправляет задачи на высокой скорости, но потребители не могут потреблять при таком уровне.
  • Redis замедляет и понижает скорость, на которой он посылает задачи, и теперь потребители остаются простоя большую часть времени.

В обоих ситуациях общее имя, которое сомневалось, было Redis DB. При исследовании и изучении Redisdb мы обнаружили, что это однопотоковая система и выполняет все задачи в круглой робинской моде. Кроме того, он спасал задач, полученных системами в памяти, которая увеличила потребление памяти, а также в тяжелых нагрузках, что единственная нить была занята выполнением настойчивости и других задач, которые она замедляет процесс опроса, инициированных потребителями. Итак, мы обнаружили причины обоих проблем, которые мы столкнулись.

Чтобы обработать тяжелую рабочую нагрузку, один из вариантов должен был оскорбить сервер Redis в кластер. Итак, мы создали набор разделов Redis (можно увидеть учебники здесь ). Мы создали кластер из трех узлов с каждым узлом, обрабатывающим равное количество клавиш через Последовательная технология хеширования Отказ

Мы подключили этот кластер с приложением сельдерея, и рабочие были выбрасывают исключение « перенесено на сервер 192.168.12.12 »

На Googling мы обнаружили, что кластер Redis еще не поддерживается сельдереем. С одной стороны, мы думали, что у нас было решение, но с другой, что еще не поддерживается базовыми рамочными рамками:(

Теперь исследование снова началось, чтобы получить решение нашей проблемы, и мы подумали об использовании прокси-сервера перед кластером Redis Twemproxy Отказ Но на этот раз мы впервые решите проверить совместимость с нашими рамками и бумом …… Мы не можем быть более мудрее в том, чтобы принимать этот путь.

Прокси еще не поддерживался сельдереем.

Теперь разочарован этой проблемой несовместимости, мы пытались выяснить, что все вещи совместимы с рамками. Некоторые из совместимых брокеров были

  • SQS.
  • Редис
  • Кролик
  • Работник зоопарка

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

Имя Положение дел Мониторинг Дистанционное управление
Кролик Стабильный да да
Редис Стабильный да да
Amazon SQS. Стабильный Нет Нет
Работник зоопарка Экспериментальный Нет Нет

Redis – это то, что мы уже попробовали, поэтому мы пошли на второй вариант, который стабилен и обеспечивает больше возможностей I.E Rabbitmq.

Спойлер:

К настоящему времени мы знали, что RUBLITMQ является одним из лучших выборов для брокеров и используется широким разнообразием клиентов в производстве и Redis – лучший выбор с точки зрения Backend Review (промежуточные результаты, которые хранятся с задачей на цепях сельдерея и аккорды) Отказ

Мы сделали необходимые изменения в системе и пытались запустить систему.

Эта система времени почти вошла в безвозвратное состояние, потребляющее все память, и нам пришлось перезапустить серверы.

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

О Googleing мы обнаружили, что очереди были созданы для хранения результата промежуточных задач, и это потребляло слишком много места в памяти, поскольку все это хранение было в памяти.

Пункт назначения

Сбор всех подсказков от нашей разведки мы решили использовать как системы я Redis и Rabbitmq для работы, на которой они лучше.

Мы развернули Redis в результате Backend для хранения промежуточных результатов и Rabbitmq в качестве брокера для поддержания связи и передачи задач (запомните спойлер выше).

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

Надеюсь, это поможет кому-то пройти через одну и ту же проблему.

Благодарность

Мы взяли подсказки от документации из сельдерея, документации по Redis, Threads Stackoverflow, страницу выпуска GitHub Celery, тематические исследования Instagram и Trivago.

Оригинал: “https://dev.to/japneet121/optimizing-celery-for-workloads-57i9”