我有多个python工作者,它们会爬网某些网站,解析数据并将它们存储在Postgres数据库中。
我还不清楚如何设计代码来优化服务器资源(在微服务上部署kubernetes上的多个Pod)。假设请求没有速率限制。
出于演示目的,我创建了一个示例代码,该示例代码获取了前10k个网站,并将其存储在数据库中-然后从Bing抓取搜索结果(并存储它们)。可以扩展到1M网站。
Celery
正在使用池gevent
,因为工作进程具有许多网络I / O。我还为补丁postgres添加了psycogreen
,以避免出现瓶颈。为了避免达到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
关于如何调整数据库资源以支持此类任务的任何建议?
你得出任何结论@melalj吗?