Baidu 크롤러에 저항하기 위해 Laravel-s를 사용한 경험을 기록하세요.
튜토리얼 칼럼에는 Laravel-S를 사용하여 Baidu 크롤러에 저항한 경험이 기록되어 있습니다. 필요한 친구들에게 도움이 되기를 바랍니다!
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로 업그레이드한 후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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Laravel 9 및 CodeIgniter 4의 최신 버전은 업데이트된 기능과 개선 사항을 제공합니다. Laravel9은 MVC 아키텍처를 채택하여 데이터베이스 마이그레이션, 인증, 템플릿 엔진 등의 기능을 제공합니다. CodeIgniter4는 HMVC 아키텍처를 사용하여 라우팅, ORM 및 캐싱을 제공합니다. 성능면에서는 Laravel9의 서비스 제공자 기반 디자인 패턴과 CodeIgniter4의 경량 프레임워크가 뛰어난 성능을 제공합니다. 실제 애플리케이션에서 Laravel9은 유연성과 강력한 기능이 필요한 복잡한 프로젝트에 적합한 반면, CodeIgniter4는 빠른 개발 및 소규모 애플리케이션에 적합합니다.

Laravel과 CodeIgniter의 데이터 처리 기능을 비교해 보세요. ORM: Laravel은 클래스-객체 관계형 매핑을 제공하는 EloquentORM을 사용하는 반면, CodeIgniter는 데이터베이스 모델을 PHP 클래스의 하위 클래스로 표현하기 위해 ActiveRecord를 사용합니다. 쿼리 빌더: Laravel에는 유연한 체인 쿼리 API가 있는 반면, CodeIgniter의 쿼리 빌더는 더 간단하고 배열 기반입니다. 데이터 검증: Laravel은 사용자 정의 검증 규칙을 지원하는 Validator 클래스를 제공하는 반면, CodeIgniter는 내장된 검증 기능이 적고 사용자 정의 규칙을 수동으로 코딩해야 합니다. 실제 사례: 사용자 등록 예시에서는 Lar를 보여줍니다.

초보자의 경우 CodeIgniter는 학습 곡선이 더 완만하고 기능이 적지만 기본적인 요구 사항을 충족합니다. Laravel은 더 넓은 기능 세트를 제공하지만 학습 곡선이 약간 더 가파릅니다. 성능면에서는 Laravel과 CodeIgniter 모두 좋은 성능을 보입니다. Laravel은 보다 광범위한 문서와 적극적인 커뮤니티 지원을 제공하는 반면 CodeIgniter는 더 간단하고 가벼우며 강력한 보안 기능을 갖추고 있습니다. 블로그 애플리케이션을 구축하는 실제 사례에서 Laravel의 EloquentORM은 데이터 조작을 단순화하는 반면 CodeIgniter는 더 많은 수동 구성이 필요합니다.

Laravel - Artisan Commands - Laravel 5.7은 새로운 명령을 처리하고 테스트하는 새로운 방법을 제공합니다. 여기에는 장인 명령을 테스트하는 새로운 기능이 포함되어 있으며 데모는 아래에 언급되어 있습니다.

대규모 프로젝트를 위한 프레임워크를 선택할 때 Laravel과 CodeIgniter는 각각 고유한 장점을 가지고 있습니다. Laravel은 엔터프라이즈급 애플리케이션을 위해 설계되었으며 모듈식 디자인, 종속성 주입 및 강력한 기능 세트를 제공합니다. CodeIgniter는 속도와 사용 편의성을 강조하여 중소 규모 프로젝트에 더 적합한 경량 프레임워크입니다. 요구 사항이 복잡하고 사용자 수가 많은 대규모 프로젝트의 경우 Laravel의 성능과 확장성이 더 적합합니다. 간단한 프로젝트나 리소스가 제한된 상황에서는 CodeIgniter의 가볍고 빠른 개발 기능이 더 이상적입니다.

소규모 프로젝트의 경우 Laravel은 강력한 기능과 보안이 필요한 대규모 프로젝트에 적합합니다. CodeIgniter는 가볍고 사용하기 쉬운 매우 작은 프로젝트에 적합합니다.

Laravel의 Blade와 CodeIgniter의 Twig 템플릿 엔진을 비교해 보면 프로젝트 요구 사항과 개인 선호도에 따라 선택하십시오. Blade는 MVC 구문을 기반으로 하므로 좋은 코드 구성과 템플릿 상속을 장려합니다. Twig는 유연한 구문, 강력한 필터, 확장된 지원 및 보안 샌드박스를 제공하는 타사 라이브러리입니다.

Laravel - Artisan Console - Laravel 프레임워크는 명령줄을 통한 상호 작용을 위한 세 가지 기본 도구인 Artisan, Ticker 및 REPL을 제공합니다. 이번 장에서는 Artisan에 대해 자세히 설명합니다.
