>PHP 프레임워크 >Laravel >Baidu 크롤러에 저항하기 위해 Laravel-s를 사용한 경험을 기록하세요.

Baidu 크롤러에 저항하기 위해 Laravel-s를 사용한 경험을 기록하세요.

藏色散人
藏色散人앞으로
2020-08-22 13:21:443411검색

튜토리얼 칼럼에는 Laravel-S를 사용하여 Baidu 크롤러에 저항한 경험이 기록되어 있습니다. 필요한 친구들에게 도움이 되기를 바랍니다!

Baidu 크롤러에 저항하기 위해 Laravel-s를 사용한 경험을 기록하세요.

Laravel-s란 무엇입니까

LaravelS는 Swoole을 Laravel 또는 Lumen에 빠르게 통합하여 더 나은 성능을 제공하는 글루 프로젝트입니다. Laravel을 사용하십시오- s

Baidu 애플릿이 시작된 후 Baidu 크롤러의 높은 qps(동시성)로 인해 CPU가 완전히 로드되고 서버가 충돌했습니다. 서버는 4코어, 8G 메모리 및 5M 광대역으로 구성되었습니다. 이때 무엇을 해야 할까요?


php-fpm 매개변수를 조정하고 정적 모드로 설정하세요. 정적 모드가 동적 모드보다 성능이 더 좋습니다. 예를 들어 하위 프로세스 수를 255개 이상으로 설정한 경우 숫자가 높을수록 동시성 양이 많아지고 숫자가 높을수록 더 많은 메모리를 차지하게 됩니다. 결론적으로 어느 정도 효과적이지만 높은 동시성에서는 쓸모가 없습니다.

바이두에 피드백을 보내 크롤러 크롤링 빈도를 조정하세요. 결론은 잠깐만 요, 원추리도 이미 춥지만 피드백을 드리는 게 더 좋을 것 같아요.

로드 밸런싱. 다른 서버가 부담을 공유하도록 하세요. 서버가 충분하고 동일한 코드가 배포되어야 하며, 원래 다른 서버가 담당하는 비즈니스가 영향을 받을 수 없다는 것이 전제입니다. 또는 특정 클라우드에서 N개의 서버를 임시로 신청하지만 크롤러가 언제 오고 언제 갈지 알 수 없는 것은 현실적이지 않습니다.

  • 다음 단계는 기사의 주제로, Laravel-s를 사용하여 http 응답 속도를 높이는 것입니다.

  • Laravel-s의 가속 효과는 어느 정도인가요?
  • 당시 전체 기간에 대한 구체적인 qps 값에 대한 통계가 없었기 때문에, 정확한 결론을 도출하는 방법은 비교를 위해 기계 부하 전후를 기준으로만 조정할 수 있습니다.
  • 배포하기 전에 cpu가 완전히 로드되었고 머신이 N번 다운되어 마비되었습니다. 외부 네트워크 대역폭이 가득 차고(5M) CPU는 배포 직후 20+로 떨어집니다. 일시적으로 광대역을 15M로 업그레이드한 후 cpu60%에 도달합니다. , 외부 네트워크 대역폭은 여전히 ​​완전히 점유되어 있습니다(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.phpmysql새 빈 프로젝트를 생성합니다. 비즈니스 로직은 캡처된 페이지 api만 처리하며 프로젝트 포트 번호는 6501

🎜laravel-s를 배포하고 api 및 ab 스트레스를 테스트합니다. test🎜🎜🎜🎜line 이전 프로젝트는 크롤러가 크롤링한 페이지 경로를 127.0.0.1:6501🎜🎜🎜
'options'   => [
 // 开启持久连接
 \PDO::ATTR_PERSISTENT => true,],
🎜🎜과 같은 새 프로젝트로 프록시합니다. 몇 가지 참고 사항: 🎜 🎜🎜🎜🎜 conf/laravels .php에서 기본적으로 활성화되는 worker 수는 cpu 코어 수의 두 배입니다. 🎜🎜🎜🎜laravlesswoole에서 실행되며 메모리에 있습니다. 코드를 변경할 때마다 laravel-s를 다시 시작해야 합니다. 🎜🎜🎜🎜2번 항목의 이유로 데이터베이스 연결을 해제할 수 없으며, laravel 연결 해제 및 재연결을 활성화해야 합니다(>laravle5.1). conf/database.phpmysql 구성에 🎜🎜🎜rrreee를 추가하세요.

위 내용은 Baidu 크롤러에 저항하기 위해 Laravel-s를 사용한 경험을 기록하세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 learnku.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제