我有多个python工作者,它们会爬网某些网站,解析数据并将其存储在Postgres数据库中。
我不清楚如何构建代码以优化服务器资源(在微服务上部署kubernetes上的多个Pod)。假设请求没有速率限制。
出于演示目的,我创建了一个示例代码,该示例代码获取了前10k个网站,并将其存储在数据库中-然后从Bing抓取搜索结果(也将它们存储)。可以扩展到100万个网站。
Celery
正在使用池gevent
,因为工作进程具有许多网络I / O。
我还添加了psycogreen
来修补postgres以避免瓶颈。
为了避免达到Postgres最大连接数,我添加了pgbouncer
作为数据库代理。
代码位于: https://github.com/melalj/celery-worker-demo/
入口是./app/entrypoint.sh
,主代码逻辑在./app/worker.py
似乎还有改进代码的空间,如何跟踪瓶颈(我怀疑是db或beautifulsoup,在使用gevent时似乎是个谜)-以及如何对其进行优化?
当我运行代码并触发+ 10K拉动时。工人在几次拉扯后上吊,偶尔摔倒:
(psycopg2.OperationalError) server closed the connection unexpectedly
关于如何调整数据库资源以支持此类任务的任何建议?