상사가 항상 자바 프로그래머를 모집하라고 하면 어떻게 해야 하나요...?
그(늙은이)는 외부의 다른 진영의 엔지니어들과 너무 많은 이야기를 나눈 후 항상 나에게 와서 묻곤 했고, 당신은 항상 PHP(프레임워크)를 사용하고 있지만,
하지만 앞으로는 우리 웹 사이트 로드가 올라갑니다... PHP가 성능 측면에서 처리할 수 없거나 보안이 jsp(실제로는 java)만큼 좋지 않은 경우 어떻게 해야 합니까?
바빠서 이만 말할게... (지금 생각해보면 좀 단순하고 투박한 것 같은데...?)
내(원본) ) 답변은 다음과 같습니다.
귀하께서 제기하신 질문은 잘못된 제안입니다. 성능(부하)은 전혀 문제가 되지 않기 때문입니다...
이유는 매우 간단합니다. 장사는 O2O 장사인데 성능이 좋아지면(부하가 온다) 오프라인 고객들도 와야 한다는 뜻인데...
그렇다면 (만약) 우리가 바보가 아니라면 (우리가 특별히 바보가 아니라면) 현금 흐름이 가능해야 합니다...
제가 시사하는 바는: 사업을 시작하면 돈이 있어야 하고 PHP를 사용해도 충분한 하드웨어 장비를 구입할 수 있어야 한다는 것입니다. 부하가 높은 온라인 운영...
이제 곰곰히 생각해보니 좀 더 엄밀하게 생각해 봐야 할 것 같습니다...
이제 PHP의 성능과 부하 문제를 분석해 보겠습니다... ( 특히 자바캠프의 솔루션과 비교해 보세요) )
우선
모든 컴퓨터 언어 중 PHP 언어의 순위 변화를 살펴보겠습니다
"TIOBE 프로그래밍 언어 순위"에 따르면(목록은 통계적으로 제한이 있지만 여전히 좋은 참고 자료입니다) 2010년에 PHP는 세계 프로그래밍 언어 중 3위를 차지했습니다. PC 인터넷 시대에 웹 분야에서는 PHP 언어가 가장 강력한 언어라고 볼 수 있습니다.
한때 PHP 프로그래머들 사이에 떠도는 농담이 있었습니다.
어떤 여자: 이 포럼의 모든 사람을 만들 수 있습니다. 싸우면 같이 밥 먹을게
PHP 프로그래머: PHP는 세계 최고의 언어입니다!
어떤 포럼이 온갖 말다툼으로 폭발했다...
어떤 여자: 내가 설득했으니까 가자!
PHP 프로그래머: 오늘은 아닙니다. PHP가 최고의 언어임에 틀림없다고 설득해야 합니다.
자, 본론으로 들어가겠습니다. 언어 자체는 좋거나 나쁘지 않습니다. 단지 사용되는 시나리오에서 다양한 문제를 해결할 뿐입니다. 인터넷 시대는 모바일 인터넷이 등장하면서 불과 4년 만에 모바일 기술의 발전이 전 세계를 휩쓸었습니다. 동시에 다양한 언어가 등장하고 있으며 한때 영광이었던 PHP는 원래 프로그래밍 언어 목록(2014년 12월 목록)에서 6위로 떨어졌습니다. 그 결과, PHP를 욕하는 목소리가 속속 등장했습니다.
그런데 Niao 형제(PHP 언어 개발자 중 한 명인 Hui Xinchen)가 2014년 Qcon에서 데이터를 공유하여 세계 100만 위 안에 들었습니다. 웹사이트 중 81.3%가 PHP를 웹 서버 스크립트 언어로 사용하고 있는데, 이는 2013년 같은 기간의 78.3%와 비교됩니다. 즉, 웹 서비스에서 PHP의 사용은 줄어들지 않았지만, 모바일 인터넷 물결에서는 다른 언어 기술 응용 프로그램이 많이 추가되어 희석되었습니다.
최근 PHP7과 HHVM의 성능 비교가 뜨거운 논란을 불러일으키고 있습니다. 어느 쪽이 PHP 성능 향상의 미래인지 모두가 논의하고 주목하고 있습니다.
HHVM(HipHop Virtual Machine)의 유래
HHVM은 JIT 컴파일 등의 기술을 활용해 PHP 코드의 실행 성능을 획기적으로 향상시키는 오픈소스 PHP 가상머신이다. 현재 네이티브 PHP 코드 버전의 실행 성능이 5~10배 향상될 수 있다는 소문이 있습니다.
HHVM은 Facebook에서 시작되었습니다. Facebook의 초기 코드 중 상당수는 PHP를 사용하여 개발되었습니다. 그러나 비즈니스가 급속히 발전하면서 PHP 실행 효율성이 점점 더 분명한 문제가 되었습니다. 페이스북은 실행 효율성을 최적화하기 위해 2008년부터 PHP 실행 엔진인 HipHop을 사용하기 시작했습니다. 이는 원래 페이스북의 대용량 PHP 코드를 C++로 변환하여 성능을 향상하고 리소스를 절약할 수 있도록 설계되었습니다. HipHop을 사용한 PHP 코드의 성능이 여러 번 향상되었습니다. 이후 페이스북은 힙합 플랫폼을 오픈소스화해 점차적으로 현재의 HHVM으로 발전시켰다.
1. PHP는 왜 느린가요?
PHP는 C/C++ 수준 언어보다 느립니다. 사실 PHP 언어는 원래 컴퓨팅 집약적인 애플리케이션 시나리오를 해결하도록 설계되지 않았습니다. PHP는 개발 효율성을 높이기 위해 실행 효율성을 희생한다는 것을 대략적으로 이해할 수 있습니다.
우리는 PHP의 가장 큰 특징이 약한 유형 기능이라는 것을 알고 있습니다. 즉, 변수를 마음대로 정의한 다음 이를 다양한 유형의 데이터에 마음대로 할당할 수 있다는 것입니다. C 언어에서 int 정수를 예로 들어보겠습니다.
int num = 200; // 일반적으로 4바이트
그러나 PHP가 동일한 변수를 정의하는 경우 실제 해당 저장 구조는 다음과 같습니다. :
이 구조는 C 변수보다 훨씬 많은 메모리를 차지합니다. PHP에서는 다음과 같이 정의됩니다.
$a = 200;/ /이 변수는 실제로 C 변수에 비해 저장 공간을 몇 배나 차지합니다.
사실 PHP의 경우 어떤 종류의 데이터가 저장되든 위에서 언급한 '킬링(killing)' 구조를 이용해 구현됩니다. PHP 프로그래머의 변수 유형 "침입"과 호환되기 위해 PHP는 개발자에게는 친숙했지만 실행 엔진에는 잔인했습니다. 단일 변수의 메모리 소비는 아직 명확하지 않을 수 있습니다. PHP 배열을 사용하면 복잡성이 기하급수적으로 증가합니다(배열 구현은 HashTable입니다). 그런 다음 Zend 엔진이 실행되면 이러한 PHP 코드는 opcode(PHP의 중간 바이트 코드, 형식이 어셈블리와 다소 유사)로 컴파일되고 Zend 엔진에 의해 한 줄씩 해석되고 실행됩니다.
문자열 연결 작업이든 단순한 배열 수정 등이든 거의 "PHP 프로그래머의 한 마디만 하면 Zend 엔진이 무너진다"는 리듬에 가깝습니다. 따라서 동일한 작업에 대해 PHP는 C보다 CPU, 메모리 등 시스템 리소스를 더 많이 소비합니다. 또한 자동 메모리 재활용, 변수 유형 판단 등이 있어 시스템 리소스 소비가 증가합니다.
예를 들어, 순수 PHP에 구현된 빠른 정렬 기능과 기본 정렬 기능을 사용하여 10,000개의 정수를 정렬하여 시간이 많이 걸리는 비교 결과는 다음과 같습니다.
기본 정렬에는 3.44ms가 걸리는 반면, 우리가 직접 구현한 PHP 함수 정렬에는 68.79ms가 걸립니다. 우리는 둘 사이의 실행 효율성에 큰 차이가 있음을 발견했습니다. 내 테스트 방법은 전체 PHP 스크립트의 시작부터 끝까지의 시간이 아닌 함수가 실행되기 전후의 시간 간격을 계산하는 것입니다. PHP 스크립트 시작 및 종료 프로세스 자체에는 일련의 초기화 및 정리 작업이 포함되며, 이 작업에도 많은 시간이 소요됩니다.
일반적으로 PHP 실행 효율성 순위는 다음과 같습니다.
정상에서 상황에 따라, 특히 웹 시스템 트래픽이 상대적으로 큰 시나리오에서는 복잡한 논리 계산이 포함된 기능을 구현하기 위해 PHP를 사용하지 않는 것이 좋습니다. 따라서 PHP 프로그래머는 PHP의 다양한 기본 기능과 다양한 확장에 대해 비교적 폭넓게 이해해야 합니다. 특정 기능 구현 시나리오에서는 이를 구현하기 위해 복잡한 PHP 코드 스택을 직접 작성하는 대신 더 많은 기본 솔루션(기본 인터페이스 또는 확장)을 찾아야 합니다. 기능의 종류.
PHP 확장 개발 능력이 충분하다면 이러한 유형의 비즈니스 기능을 PHP 확장으로 다시 작성하면 코드 실행 효율성도 크게 향상됩니다. 이것은 매우 좋은 방법이며 PHP 최적화에도 널리 사용됩니다. 그러나 자체 작성 PHP 비즈니스 개발의 단점도 분명합니다.
실제로 일선 인터넷 기업들 사이에서는 PHP 확장을 추가하는 것이 아니라 C/C++로 독립적으로 서비스 서버를 작성하고 PHP가 서비스 서버와 통신하는 것이 더 일반적인 해결책입니다. 소켓을 통해 비즈니스 처리는 PHP 자체를 비즈니스와 결합하지 않습니다.
그러나 웹 서비스의 성능 병목 현상의 대부분은 네트워크 전송 및 기타 서비스 서버(예: MySQL 등)의 시간 소모에 있습니다. PHP 실행에 소요되는 시간은 극히 일부분입니다. 전체적인 시간이 많이 소요되므로 비즈니스 관점에서 보면 그 영향이 명확하지 않을 수 있습니다.
2. HHVM이 PHP 실행 성능을 향상시키는 방법
HHVM이 PHP 성능을 향상시키는 방법은 Zend 엔진을 교체하여 PHP 중간 바이트코드(HHVM이 자체 형식의 중간 바이트코드를 생성함)를 생성하는 것입니다. JIT를 통해 실행을 위해 기계어 코드로 변환됩니다(Just In Time, Just-In-Time 컴파일은 소프트웨어 최적화 기술로, 바이트코드가 실행 중일 때 기계어 코드로 컴파일된다는 의미). Zend 엔진의 기본 접근 방식은 먼저 이를 opcode로 컴파일한 다음 하나씩 실행하는 것입니다. 일반적으로 각 명령은 C 언어 수준 함수에 해당합니다. 다수의 반복되는 opcode(순수 PHP로 작성된 코드 및 함수)를 생성하면 Zend는 이러한 C 코드를 하나씩 여러 번 실행합니다. JIT가 하는 일은 한 단계 더 나아가 런타임에 반복적으로 실행되는 다수의 바이트코드를 기계어 코드로 컴파일하여 실행 효율성을 높이는 것입니다. 일반적으로 JIT를 트리거하는 조건은 코드나 함수가 여러 번 호출된다는 것입니다.
일반적인 PHP 코드는 변수의 유형을 고정할 수 없기 때문에 유형을 결정하는 별도의 논리 코드를 추가해야 합니다. 이 PHP 코드는 CPU 실행에 도움이 되지 않습니다. 그리고 최적화. 따라서 HHVM은 일반적으로 변수 유형을 수정하고 가상 머신의 컴파일 및 실행을 용이하게 하기 위해 Hack 작성 방법(특정 기능과 호환되도록 추가된 추가 기술 코드)이 포함된 PHP 코드를 "협력"해야 합니다. PHP는 모든 유형을 하나의 형식으로 수용하는 것을 추구하는 반면 Hack은 특정 유형으로 수용되는 모든 것을 표시할 수 있습니다.
PHP 코드 Hack 작성 예:
위 예에서는 PHP 코드가 주로 변수 유형으로 추가됩니다. Hack 글쓰기의 전체적인 방향은 기존의 '동적' 글쓰기 방식을 '정적' 글쓰기 방식으로 변경하여 HHVM과 협력하는 것입니다.
HHVM은 높은 성능으로 많은 주목을 받았고, 일부 1위 인터넷 기업들도 이를 따라잡기 시작했다. 순수 언어 실행 성능 테스트 결과로 볼 때, HHVM은 개발 중인 PHP7 버전보다 훨씬 앞서 있습니다.
그러나 특정 비즈니스 시나리오의 관점에서 볼 때 HHVM과 PHP7의 격차는 그리 크지 않습니다. WordPress 오픈 소스 블로그 홈페이지를 테스트 시나리오로 사용합니다. , 그들은 현재 격차가 크지 않습니다.
그러나 PHP7은 아직 개발 중입니다. 사용 가능한 기술 솔루션으로 판단하면 현재 HHVM이 약간 더 좋습니다. 그러나 HHVM의 배포 및 적용에는 몇 가지 문제가 있습니다.
HHVM은 결국 비교적 새로운 오픈소스 프로젝트라 아직은 시간이 좀 걸립니다. 성숙하다.
PHP7의 성능 혁신
이번 버전에서는 PHP가 오랫동안 비판을 받아온 성능 문제가 대폭 개선되었습니다. 해당 버전에는 PHP6가 없다고 하는데, 이후에는 혼란을 피하기 위해 대부분의 기능이 PHP7에서 구현될 예정입니다. (몇 년 전에는 PHP6에 관한 책도 읽었습니다.)
1. PHP7 소개
2015년 10월까지는 PHP7의 정식 버전이 출시되지 않을 수도 있지만, 테스트 버전은 내년 6월 출시 후 3~4개월간 품질보증을 거친다.
PHP 커뮤니티의 프로젝트 계획은 다음과 같습니다.
아직 개발 중인 프로젝트이므로 표에서 기능 설명을 볼 수 있는 것은 모두 상대적으로 모호합니다. 확실히 더 많은 기능이 있지만 아직 발표되지 않았습니다. 다음은 PHP 커뮤니티에서 가져온 것입니다. PHP7은 개발 중인 프로젝트이므로 정확하지 않을 수 있지만 살펴보는 데 방해가 되는 것은 아닙니다.
위 기능 중 가장 기대되는 것은 PHPng의 성능 최적화입니다. PHP 커뮤니티에서 일부 성능 속도 테스트 데이터를 공개했습니다. 데이터 관점에서 보면 PHPng의 실행 성능은 프로젝트 초기에 비해 거의 두 배 향상되었습니다. 이 결과는 이미 매우 좋습니다. 더욱이 가장 중요한 것은 아직 완료되지 않은 PHP7 최적화 계획이 많다는 것입니다. 모든 것이 완료되면 더 높은 성능의 PHP7을 볼 수 있을 것이라고 믿습니다.
이 속도 테스트 데이터는 PHP 커뮤니티(wiki.php.net/phpng)에서 가져온 것이며, 데이터의 일부가 가로채어졌습니다.
현재 PHP5.6 버전에서는 10월 PHPNG의 성능 향상이 매우 뚜렷했습니다:
간단한 번역:
PHP와 비슷한 실행 속도를 제공합니다. 약한 타입 논란
PHP에는 논란의 여지가 많은 기능이 있지만, 언어 버전이 출시되고 개선되면서 기능과 특징에 대한 비판이 줄어들기 시작했습니다. 그러나 PHP의 "약한 유형" 기능은 분명히 더 논란의 여지가 있었습니다. HHVM이 Hack을 통해 "약한 유형" 기능을 직접 "제거"했다는 사실에서 HHVM이 "약한 유형" 기능을 좋아하지 않는다는 것을 알 수 있습니다. 그러나 많은 PHP 프로그래머의 눈에는 이것이 PHP의 중요한 장점 중 하나입니다. PHP의 변수는 캐주얼하고 우아하게 설계되었으며 모든 것을 수용할 수 있습니다. 언어가 더 단순해 보이지 않나요?
실제로 일부 사람들은 이것이 심각한 문제라고 생각하며 "약한 타이핑"에 대한 비판은 다음과 같습니다.
그들은 둘 중 어느 것도 "당신이 보는 것이 당신이 얻는 것"이라는 단순성을 따르지 않으며 엄격한 문법을 가진 언어가 더 효율적이고 "이해"하기 쉽다고 믿습니다.
Javascript와 같은 언어도 이 문제에 대해 동일한 기능을 수행하기 때문에 비슷한 비판을 받았습니다. 그러나 언어가 결국 대규모로 사용된다면 그 언어에는 반드시 그 이유가 있을 것입니다. PHP는 웹 서비스 개발을 위해 선택되는 스크립팅 언어가 되었고, Javascript가 웹 프론트엔드 분야를 직접적으로 지배하게 되었습니다. 개발자들이 이를 선택했다는 것은 우연이 아닙니다. 프로그래밍 언어는 인간과 기계 사이의 다리이며, 궁극적으로 추구하는 것은 “누구나 프로그래밍할 수 있다”라는 원대한 목표를 달성하는 것입니다.
언어 개발의 역사를 통틀어 우리는 0과 1이라는 기계어에서 시작하여 어셈블리 언어, C 언어, 동적 스크립팅 언어 PHP로 발전했습니다. 실행 효율성은 기하급수적으로 감소하지만 학습 임계값도 기하급수적으로 감소합니다. PHP 언어는 C의 메모리 관리 및 포인터의 복잡성을 보호할 뿐만 아니라 변수 유형의 복잡성도 더욱 보호합니다. 프로젝트 개발의 효율성을 높이고 학습의 문턱을 낮추는 동시에 일정량의 실행 성능을 희생합니다. 그런 다음 HHVM의 Hack은 변수의 복잡성을 다시 도입하면서 "원시로의 복귀" 느낌을 줍니다. 물론, 서로 다른 언어는 서로 다른 시나리오의 문제를 해결하므로 일반화할 수 없습니다.
요약
HHVM의 PHP 성능 향상이 인상적이며, 열심히 일하는 PHP7이 매우 기대됩니다. 둘 다 훌륭한 오픈 소스 프로젝트이며 지속적으로 발전하고 발전하고 있습니다. 현재로서는 PHP7의 공식 버전이 출시되려면 아직 시간이 많이 걸리기 때문에 현재 성능 최적화 솔루션으로 선택하는 것은 당연히 HHVM입니다. 그러나 개인적으로 저는 PHP7이 PHP 코드와 이전 버전과 더 호환되기 때문에 더 낙관적입니다. 둘 사이에 성능 차이가 크지 않다면 더 간단한 것을 선택하겠습니다.
참고 자료:
위 내용은 컨텐츠 측면을 포함하여 고성능을 달성하기 위해 HHVM을 사용하여 PHP Food 및 Clothing Parent 3-php를 소개했습니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.