튜토리얼 칼럼에는 Laravel-S를 사용하여 Baidu 크롤러에 저항한 경험이 기록되어 있습니다. 필요한 친구들에게 도움이 되기를 바랍니다!
Laravel-s란 무엇입니까LaravelS는 Swoole을 Laravel 또는 Lumen에 빠르게 통합하여 더 나은 성능을 제공하는 글루 프로젝트입니다. Laravel을 사용하십시오- s
Baidu 애플릿이 시작된 후 Baidu 크롤러의 높은 qps(동시성)로 인해 CPU가 완전히 로드되고 서버가 충돌했습니다. 서버는 4코어, 8G 메모리 및 5M 광대역으로 구성되었습니다. 이때 무엇을 해야 할까요?
php-fpm 매개변수를 조정하고 정적 모드로 설정하세요. 정적 모드가 동적 모드보다 성능이 더 좋습니다. 예를 들어 하위 프로세스 수를 255개 이상으로 설정한 경우 숫자가 높을수록 동시성 양이 많아지고 숫자가 높을수록 더 많은 메모리를 차지하게 됩니다. 결론적으로 어느 정도 효과적이지만 높은 동시성에서는 쓸모가 없습니다.
바이두에 피드백을 보내 크롤러 크롤링 빈도를 조정하세요. 결론은 잠깐만 요, 원추리도 이미 춥지만 피드백을 드리는 게 더 좋을 것 같아요.
로드 밸런싱. 다른 서버가 부담을 공유하도록 하세요. 서버가 충분하고 동일한 코드가 배포되어야 하며, 원래 다른 서버가 담당하는 비즈니스가 영향을 받을 수 없다는 것이 전제입니다. 또는 특정 클라우드에서 N개의 서버를 임시로 신청하지만 크롤러가 언제 오고 언제 갈지 알 수 없는 것은 현실적이지 않습니다.qps
값에 대한 통계가 없었기 때문에, 정확한 결론을 도출하는 방법은 비교를 위해 기계 부하 전후를 기준으로만 조정할 수 있습니다. cpu
가 완전히 로드되었고 머신이 N번 다운되어 마비되었습니다. 외부 네트워크 대역폭이 가득 차고(5M) CPU는 배포 직후 20+
로 떨어집니다. 일시적으로 광대역을 15M로 업그레이드한 후 cpu
는 60%에 도달합니다.
, 외부 네트워크 대역폭은 여전히 완전히 점유되어 있습니다(Baidu 크롤러는 실제 작업이라고만 말할 수 있으며 원하는 만큼의 대역폭을 얻을 수 있습니다). 결론적으로 최소 5배 이상의 성능 향상을 가져옵니다.
특정 배포크롤러가 크롤링한 페이지는 페이지의 일부일 뿐이므로 온라인 프로젝트를 laravel-s
로 변환하는 것은 실용적이지 않습니다. 크롤링된 페이지를 분리하여 별도로 laravel-s
에 배포하면 됩니다.
qps
具体值,所以没办法得出准确的结论,只能根据调整前后的机器负载做对比。
部署前,cpu
满载,机器宕机N次,瘫痪状态。外网出宽带占满(5M),部署后cpu立即降到20+
, 临时升级宽带15M后,cpu
达到 60%
,外网宽带仍被占满(只能说百度爬虫是真作啊,多少宽带你就来多少啊)。结论,至少带来5倍的性能提升。
具体部署
爬虫所爬取的页面只是一部分,所以并不是将线上项目改造成laravel-s
,也不现实。我们只需要将爬取的页面分离出来,单独部署到laravel-s
。
新建空项目,业务逻辑只处理抓取的页面api
,项目端口号如 6501
部署 laravel-s ,测试api 及 ab压测
线上项目将爬虫爬取的页面路径代理到新建项目,如127.0.0.1:6501
location ~ ^/v1/test.* { proxy_pass http://127.0.0.1:6501; proxy_set_header Host $host;}
注意的几点:
在 conf/laravels.php
中,默认开启 worker
数量是 cpu
核数的两倍。
laravles
是运行在 swoole
,在内存中,每次更改代码,需重启 laravel-s
。
由于第2条的原因,数据库连接得不到释放,需开启 laravel
的断开重连(>laravle5.1)。在 conf/database.php
中 mysql
새 빈 프로젝트를 생성합니다. 비즈니스 로직은 캡처된 페이지 api
만 처리하며 프로젝트 포트 번호는 6501
127.0.0.1:6501
🎜🎜🎜'options' => [ // 开启持久连接 \PDO::ATTR_PERSISTENT => true,],
conf/laravels .php
에서 기본적으로 활성화되는 worker
수는 cpu
코어 수의 두 배입니다. 🎜🎜🎜🎜laravles
는 swoole
에서 실행되며 메모리에 있습니다. 코드를 변경할 때마다 laravel-s
를 다시 시작해야 합니다. 🎜🎜🎜🎜2번 항목의 이유로 데이터베이스 연결을 해제할 수 없으며, laravel
연결 해제 및 재연결을 활성화해야 합니다(>laravle5.1). conf/database.php
의 mysql
구성에 🎜🎜🎜rrreee를 추가하세요.위 내용은 Baidu 크롤러에 저항하기 위해 Laravel-s를 사용한 경험을 기록하세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!