정보실

웹학교

정보실

php PHP 프레임 워크 테스트

본문

오랫동안, 나는 모든 맞춤형 프로젝트를 맞춤형 PHP 프레임 워크 (또는 오히려 라이브러리 세트)로 만들었다.

PHP 여행이 시작될 때 (2011 년),이 라이브러리를 작성하는 것은 언어를 배우는 데 좋은 연습 이었지만 최근에는 모든 종류의 한계에 부딪치기 시작했습니다.

  • 보안 문제
  • 에지 케이스에 대한 지속적인 패치 요구
  • 제품 구축에 중점을 두지 않고 간단한 기능 구축

이전에 작업 한 프레임 워크는 Zend Framework 1 및 Symfony 5뿐입니다.


https://pixelbot.co/php-frameworks-permormance-benchmark/ 


이전 프로젝트에서 비교적 로드가 많은 웹 사이트를 운영 한 경험이 있었습니다. 내가 본 최고 트래픽 수준은 하루 1,000 만 페이지 조회수와 최대 10,000 개의 동시 세션이었습니다. 백엔드에는 PHP 요청 (Linux, Nginx + php-fpm, MySQL, MongoDB, PHP7, Memcache)을 제공하는 7 개의 웹 노드가 있었습니다. 그리고 Zend Framework 1에 갇힌 것은 재미 있지 않았습니다.


다른 하나인 Symfony 5는 한 달 동안 작은 프로젝트를 시도했지만 내 취향에 따라 너무 많은 마술 같은 느낌이 들었습니다. 그리고 학습 곡선은 상당히 가파르다.


그래서 나는 모든 사람들의 느낌을 얻고 성능을 테스트하기 위해 PHP 프레임 워크의 현재 장면을 살펴보기로 결정했습니다 (다량의 트래픽을 다시 얻을 수 있을 만큼 운이 좋을 경우).


다음은 테스트 대상을 선택한 목록입니다.


목표 

다음 질문에 답하고 싶습니다.

  1. 저렴한 VPS에서 프레임 워크가 지속적으로 몇 개의 요청을 처리 할 수 ​​있습니까?
  2. 일반 PHP, 자체 작성 라이브러리 또는 일반 HTML과 비교하여 프레임 워크를 사용하는 경우 성능 오버 헤드는 무엇입니까?

결과 


프레임 워크가 비교적 저렴한 Digital Ocean 드롭 릿 (40 $, 전용 CPU, 2 코어, 4Gb 메모리)에서 일관되게 몇 개의 간단한 HTTP 요청을 제공 할 수 있습니까?


php-frameworks-test-requests-per-second.png 


“Hello world!” test
NameRequests
per second
Requests
per day
Latency
ms
HTML11,367982,127,52077
PHP 7.2.242,597224,406,72077
Fatfree 3.7.02,113182,544,48078
Phalcon 3.4.52,111182,409,12078
Slim 4.3.01,542133,248,96079
Yii 2.0.261,250108,002,88079
Slim (skeleton) 4.3.01,161100,347,84080
Symfony 5.0.140234,727,04082
Laravel 5.8.3532928,455,84083
Laravel 6.5.231827,502,56085
CakePHP 3.8.618515,973,92083
CodeIgniter 4.0.0-rc317314,906,88089
Zend (skeleton) 3.1.131089,365,76087

설정 

  • 2 개의 서버 : "웹"(SF1 지역) 및 "클라이언트"(NYC1 지역)
  • Nginx 1.14.0, PHP 7.2.24 (Php-fpm), 우분투 18.04.3.
  • 두 서버 모두 HTTP를 통한 서로의 연결 만 허용합니다.
  • "클라이언트"서버는 wrk (v4.1.0)를 사용하여 "웹"서버에 대한 연결을 열고 10 초마다 1 개의 연결을 추가합니다.
  • "웹"서버 PHP 사용량은 50 %로 제한됩니다 (나중에 자세히 설명)

규칙 

템플릿 엔진, ORM, 캐싱 등을 다루어야 할 근거가 많기 때문에 PHP 프레임 워크를 테스트하는 것은 복잡합니다. 프레임 워크 "이륙"비용을 테스트하는 방법 인 다양한 프레임 워크의 성능 오버 헤드를 테스트 하기 위한 이상적인 설정이라고 가정합니다.

  • 테스트 사례는 간단한 일반 텍스트 "Hello world!"응답입니다.
  • 템플릿 엔진이 없습니다.
  • ORM 없음
  • 컨트롤러 없음 (가능한 경우)
  • 프레임 워크 수준의 복잡성 (마이크로, 풀 스택)간에 차이가 없음
  • "배포"문서 섹션 (있는 경우)에 따라 모든 프레임 워크를 최적화 하려고 합니다. 일반적으로“composer install --optimize-autoloader --no-dev”를 실행하고 구성 캐싱을 위한 프레임 워크 명령을 실행합니다.

프레임 워크가 지속적으로 제공 할 수 있는 HTTP 요청 수에 관심이 있습니다.

  • 대기 시간이 크게 증가하지 않으면 (<10 %)
  • 오류 없음 (시간 초과, 연결 오류)
  • 서버 CPU의 50 % 이하 사용


프레임 워크 성능, CPU, 메모리에 대한 참고 사항 


프레임 워크에 대한 직관적이지 않은 사실은 모든 프레임 워크가 거의 동일한 대기 시간으로 거의 동일한 수의 요청을 처리 할 수 ​​있다는 것입니다.

무한한 양의 컴퓨팅 리소스가 있는 이상적인 세상에서 모든 프레임 워크가 거의 똑같이 수행됩니다.


한 프레임 워크가 다른 프레임 워크보다 본질적으로 느리다는 것은 아닙니다. 일부 프레임 워크는 더 많은 CPU 또는 더 많은 메모리를 소비하거나 디스크 또는 데이터베이스에서 더 많은 읽기를 수행하기 때문에 속도가 느립니다.


트래픽이 많은 웹 사이트에서의 경험을 통해 php-fpm + Nginx 실행을 처리 할 때 일반적으로 메모리가 아니라 걱정해야 하는 CPU입니다. 1 개의 CPU 코어와 4GB의 메모리 구성을 예로 들면, php-fpm + Nginx는 5 % 미만의 메모리 사용량으로 100 % CPU를 쉽게 사용할 수 있습니다.


그렇기 때문에 40 달러의 디지털 오션 드롭 릿을 선택합니다. 공유되지 않은 전용 CPU가있는 가장 저렴한 드롭 릿입니다.


실제로는 CPU를 최대로 사용하고 싶지 않습니다. 서버 응답 시간 (지연 시간)이 길어 지므로 끔찍합니다. 그리고 그것은 트래픽 급증에 대한 헤드 룸을 남기지 않습니다. 일반적으로 프로덕션 웹 노드의 경우 CPU 한계의 50 % 미만을 유지하는 것이 좋습니다.


이 테스트에서는 "웹"서버의 PHP 사용을 50 %로 제한하기로 결정했습니다.


태도 


나는 느리게 수행하는 프레임 워크가 더 나쁘다는 것을 암시하지 않습니다.

  • 결과에서 볼 수 있듯이 하루에 10,000,000 페이지 미만의 페이지 뷰를 제공하는 경우 모든 프레임 워크를 사용하는 것이 좋습니다.
  • 프레임 워크에서 무언가를 더 빨리 빌드할수록, 구문 설탕이 많을수록, 기능이 많을수록 복잡성이 커지고 느려집니다.

관찰 


Laravel 


Laravel은 유일하게 틀에서 느리고 오류가 발생하기 쉬운 유일한 프레임 워크입니다. 여러 시간 초과 오류와 대기 시간이 100ms 이상으로 급증하지 않고 초당 10 건의 요청을 처리 할 수 ​​없습니다.


그런 다음 느린 로그를 보고 Laravel이 세션 처리에 문제가 있음을 발견했습니다 (물론 세션 폴더에는 필요한 모든 권한과 사용자 / 그룹이 할당되어 있음).

SESSION_DRIVER의 구성 값을 "file"에서 "array"로 변경 한 후 Laravel 성능이 10 배 증가했습니다.


어쩌면 거기에서 중요한 것을 놓쳤을 수도 있으므로, 그 경우에 알려주십시오.


Phalcon 


팔콘은 짐승입니다. Zephir / C 확장으로 제공되는 유일한 프레임 워크입니다. 그리고 어떤 경우에는 일반 PHP보다 빠릅니다.


FatFree 


후행 슬래시 (예 : http://domain.com/fatfree/)가있는 요청을 수락 할 수없는 유일한 프레임 워크입니다. http://domain.com/fatfree 만 작동했습니다.



페이지 정보

조회 111회 ]  작성일19-12-21 11:37

웹학교