Оптимальная настройка для питона (crawler + save db) на сельдерее - PullRequest
1 голос
/ 14 марта 2019

У меня есть несколько работников Python, которые сканируют определенные веб-сайты, анализируют данные и сохраняют их в базе данных Postgres.

Мне неясно, как сконструировать код для оптимизации ресурсов сервера (развернутых на микросервисах несколькими модулями).на Кубернетес).Предположим, что для запроса нет ограничения по скорости.

В демонстрационных целях я создал пример кода, который получает лучшие 10 000 веб-сайтов, сохраняет их на БД, а затем сканирует результаты поиска из Bing (и сохраняет их).также).Это может быть расширено до 1M веб-сайтов.

Celery использует пул gevent, поскольку у работника много сетевых операций ввода-вывода.Я добавил psycogreen для исправления postgres, чтобы избежать узких мест.Чтобы избежать достижения максимальных соединений Postgres, я добавил pgbouncer в качестве прокси-сервера базы данных.

Код находится по адресу: https://github.com/melalj/celery-worker-demo/

Точка входа - ./app/entrypoint.sh, а логика основного кода - в ./app/worker.py

В этой реализации есть 3 подвопроса:

Как задать размер / настроить переменные?

  • Рабочий параллелизм
  • SQLAlchemypool_size (обычно это берет на себя pgbouncer)
  • worker_prefetch_multiplier
  • broker_pool_limit
  • Количество реплик работника python (как это повлияет на загрузку базы данных)

Как оптимизировать код?

Кажется, что есть место для улучшения кода, как я могу отследить узкие места (я подозреваю, что это БД или BeautifulSoup, это кажется темной загадкой при использовании Gevent) -и как его оптимизировать?

База данных иногда неожиданно закрывается, почему?

Когда я запускаю код и запускаю с нажатием + 10K.Рабочий зависает после нескольких попыток и время от времени бросает: (psycopg2.OperationalError) server closed the connection unexpectedly Любые рекомендации о том, как определить размер ресурсов БД для поддержки таких задач?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...