자유게시판

제목 hiphop php 컴파일러
글쓴이 iche 작성시각 2010/02/03 16:36:53
댓글 : 6 추천 : 0 스크랩 : 0 조회수 : 18025   RSS

오늘 페이스북 오픈소스 팀에서 hiphop 이라는 php컴파일러를 내놓았습니다.

페이스북은 php로 만들어진 사이트고 엄청난 트래픽을 발생시키는 사이트라

퍼포먼스에 대한 향상을 위해서  스크립팅 랭귀지의 약점을 극복하고자 이 php 컴파일러를 만들었다고 하네요

엄밀하게 말해서 컴파일러라기보다는 스크립팅언어를 데이타 타입이 엄격한 컴파일러 언어로 바꾸어주는

변환기라는 표현을 하더군요  기존소스에 대한 변형없이 사용할수있다고 하는데

무척기대되고 서버의 cpu나 메모리 향상에 크게 기여했다고 하네요 벤치 마킹 결과 50%정도.. 절감효과가

있었다고하는데.. .

http://developers.facebook.com/news.php?blog=1&story=358
 다음글 [가입인사] 반갑습니다 :) (4)
 이전글 코드이그나이터가 짱이네요 ㅡ.ㅡ; (3)

댓글

변종원(웅파) / 2010/02/03 17:45:49 / 추천 0
재미있는 물건이 나왔네요. codeigniter도 될까해서 찾아봤더니 codeigniter도 php로 만들어졌는데 뭐가 문제냐는 답글이 있더군요. ㅋㅋㅋ
최용운 / 2010/02/03 18:12:38 / 추천 0
이야 facebook팀 멋집니다. 
헛발이 / 2010/02/03 19:06:38 / 추천 0

이런짓(?)하면 안되지만..
누군가 일본사이트에도 번역되어 올라와 있길래.. 일본어를 다시 한글로 번역해 봤습니다.
조금이나마 도움이 되고자...ㅋㅋ

http://developers.facebook.com/news.php?blog=1&story=358
http://blog.candycane.jp/archives/275

Facebook에 대해 중요한 일의 하나가 개발 스피드가 빠른 일입니다.과거 6년간에 걸쳐서, PHP가 제공하는 고속의 개발 페이스에 의해서 대부분을 완수해 왔습니다.프로그램 언어로서 보면, PHP는 심플합니다.간단하게 습득해, 간단하게 써, 간단하게 읽어, 간단하게 디버그 할 수가 있습니다.우리는 다른 언어보다 빨리 엔지니어를 획득해, 거기에 따라보다 빠른 이노베이션(innovation)를 할 수 있습니다.

오늘, 나는 2년에 걸쳐 작업해 온 야스하루등 해 작은 팀의 프로젝트를 공유하는 것에 흥분하고 있습니다.
HipHop for PHP.HipHop에 의해 우리는 페이지에 따라서는, Web 서버상에서 약 50퍼센트의 CPU 사용량을 삭감할 수 있었습니다.CPU의 사용량의 적음은, 서버 대수의 삭감으로 연결되어, 그것은 보다 적은 오버헤드를 의미합니다.이 프로젝트는, Facebook상에서 다대한 영향을 미쳤습니다.우리는 HipHop가 웹에 큰 이익을 가져온다고 느껴 오늘 밤 오픈 소스로서 릴리스 해 PHP에 의한 대규모 WEB 사이트의 슬캘링에 새로운 방향성이 제시된다고 기대합니다.아직도 완전하지 않은 HipHop에서도 신 글자없는 듯한 결과를 남기고 있어 베타판이어도 기분 좋은 것이겠지요.

HipHop for PHP는 기술적으로는 컴파일러가 아닙니다.오히려, 원시 코드의 변환기입니다.HipHop는 당신의 PHP의 원시 코드를 C++에 최적화된 형태에 기계적으로 변환합니다.그리고 g++로 컴파일 됩니다.HipHop는 의미적으로 동등의 방법으로 원시 코드를 실행합니다만, 몇개의 보기 드물게 사용되는 기능(eval 등)을 희생으로서 퍼포먼스를 향상시킵니다.HipHop 코드 변환기는, PHP 런타임의 재실장이며, 또 많은 퍼포먼스 향상을 위한 PHP extension를 고쳐 쓴 것입니다.

스크립트 언어로서의 슬캘링 PHP

PHP의 루트는, Perl나 Python, Ruby와 같은 스크립트 언어로, 모든 프로그래머의 생산성의 면에서 큰 이점이 있어, 신속하고 계속적인 개발을 가능하게 합니다.이것은 C++나 같은 전통적인 컴파일 언어나 Java와 같은 중간 언어와 비교했을 경우입니다 .한편, 스크립트 언어는 일반적으로 CPU 및 메모리의 사용에 관해서 효율적이 아닌 것이 알려져 있습니다.이 때문에, 월간 4000억 이상의 페이지뷰로 PHP를 베이스로 한 Facebook를 스케일 한다고 하는 일은 도전적인 일이었습니다.

이러한 비효율성에 대처하는 1개의 일반적인 해결법은 PHP 어플리케이션의 복잡한 부분을 PHP extension로서 C++로 고쳐 쓰는 일입니다.이것에 의해 PHP는 프론트엔드의 HTML와 C++의 논리를 이어 맞추는 풀과 같은 언어에 크게 변화합니다.기술적인 관점은 잘 됩니다만, 어플리케이션에 종사할 수가 있는 엔지니어의 수를 극적으로 줄여 버리는 일이 됩니다.C++를 배우는 일은 PHP extension를 쓰기 위한 최초의 한 걸음에 지나지 않습니다.다음에 Zend API를 이해하지 않으면 안됩니다.우리의 엔지니어링 팀은 100만 유저 당 1명으로 비교적 작은 것입니다만, 우리의 코드 베이스의 일부를 다른 것보다 아크세시불로 할 수는 없다고 생각했습니다.

대부분의 페이지가 로그인한 유저에 의해서 커스터마이즈 되는 Facebook의 슬캘링은 특히 도전적입니다.당신의 홈 페이지를 표시할 때는 모든 당신의 친구의 룩 올라갈 필요가 있어, 관련하는 갱신을 검색해, (멀티 피드로 불리고 있는 커스텀 서비스), 고객의 프라이버시 설정에 근거해 필터링 해, 코멘트나 사진등이 풍부한 데이터를 보충합니다.그러한 풍부한 데이터가, 사람들이 Facebook의 사랑하고 있는 부분입니다.이것들 모든 것이 1초 이하로 행해집니다.HipHop에 의해서 최종적으로 PHP로서 조립할 수 있는 논리를, 신속하고 계속적으로 쓸 수가 있습니다.또 이 논리는 C++나 Erlang나 Java, Python로 쓰여진 연구 최종 단계 서비스, 뉴스 피드, 검색, 채팅 서비스 및 다른 코어 부분등과 제휴하고 있습니다.

2007년에는, 이러한 문제를 해결하기 위한 , 몇개의 다른 방법을 고안 해 그 중 몇개의 실장을 시도했습니다.공통의 개선안은 Facebook를 다른 언어로 고쳐 쓰는 일이었습니다.그렇지만, 사이트 개발의 복잡함과 속도를 달성하기 위해서 얼마인가의 시간이 걸린다고 생각되었습니다.우리는 PHP 내부의 Zend 엔진도 고쳐 써 그러한 패치를 기부했습니다만, 최종적으로 필요로 해 퍼포먼스 향상에는 이르지 않았습니다.HipHop의 이익은 우리의 개발 스피드가 거의 변하지 않는 것입니다.

HipHop의 탄생

몇년전의 hackathon로의 하룻밤에(시청률 최고 시간대의 핵), PHP를 C++로 변환하는 코드를 쓰기 시작했습니다.상당한 구문이 비슷한 C++는, CPU와 메모리 사용량에 관해서는 PHP를 크게 견디고 있습니다.PHP 자체도 C로 쓰여져 있습니다.우리는 이 정도의 양의 코드를 고쳐 쓰는 것이 불가능한 일은 알고 있었습니다만, 만약 프로그램적으로 이것을 실시하는 시스템을 구축하면 어떻게 될 것이라고 생각했습니다.

PHP의 퍼포먼스를 개선하기 위한 새로운 방법을 찾아내는 일은 새로운 컨셉이 아닙니다.실행시에는, Zend Engine는 당신의 PHP 소스를 작동코드로 변환해, 그 후, Zend의 가상 머신을 개입시켜 실행됩니다.APC와 eAccelerator의 것은, 이 출력을 캐쉬해 PHP로 제공되는 대다수의 웨브사이트로 사용됩니다.또 Zend Server는, 작동코드의 최적화와 캐쉬를 개입시켜 PHP를 고속화하는 상용 제품입니다.그 대신에, 우리는 PHP의 원시 코드를 직접 C++로 변환한 후에 네이티브의 머신 코드로 변환하는 것을 생각했습니다.PHP를 컴파일 하는 일도 새로운 아이디어가 아닙니다.Roadsend와 phc는 PHP를 C에 컴파일 해, Quercus는 PHP를 Java에 컴파일 해, Phalanger 는 PHP를.Net에 컴파일 합니다.

말할 필요도 없이, 한 번의 hackathon만으로는 끝나지 않았습니다.8개월 후, 나는 빠르고 컴파일 된 코드를 실행하는 것이 가능한 것을 나타내는데 충분한 코드를 얻었습니다.우리는 프로젝트의 스피드업에 이언·프록터와 민하이·얀을 프로젝트의 스피드업을 위해 멤버에 가세했습니다.우리는, 계속 되는 10개월을 모든 코딩에, 다음의 6개월을 실전 서버상에서의 테스트에 소비했습니다.우리는 릴리스로부터 6개월의 시점에서, Web 트래픽의 90%이상의 HipHop를 사용해 제공하고 있으면 일을 자랑으로 생각합니다.

HipHop의 동작

프로젝트의 주된 과제는, PHP와 C++의 사이의 갭을 묻는 것이었습니다.PHP는 동적인 약한 형태부를 가지는 스크립트 언어입니다.C++는 정적형부의 컴파일 된 언어입니다.한편, PHP는 마법과 같이 동적인 기능을 기술할 수 있어 대부분의 PHP는 비교적 간단합니다.if(…){…} else {..}(은)는 function foo($x) { include $x; } 보다 바람직합니다.이것은, 우리가 퍼포먼스를 벌고 있는 곳(중)입니다.우리의 생성한 코드는 변수나 함수의 정적 바인딩을 언제라도 사용 가능합니다.또, 변수의 대부분에 형태 추정을 이용해 메모리를 절약합니다.

변환 프로세스는 3개의 주된 순서가 포함됩니다:

  1. 수집한 정보로부터 무엇이 선언되어 무엇에 의존하고 있을까의 정적 분석
  2. C++의 특정의 타입을, 스칼라, 문자열, 배열, 클래스, 오브젝트, 및 변형형으로부터 선택하는 형태 추정
  3. 대부분의 부분의 PHP의 스테이트먼트와 식을 C++의 스테이트먼트와 식에 직접 대응된 코드 생성
     

또 우리는 HPHPi 도 실험적인 interpreter로서 설계해 개발했습니다.HPHPi를 사용하면, PHP의 원시 코드를 실행전에 컴파일 할 필요는 없습니다.이것은 저희들이 힙합 자체의 버그를 캐치 하는 일과 기술자가 코드를 쓰는 방법을 변경하지 않고 PHP 코드를 쓸 수 있도록(듯이) 합니다.

전체적으로는 HipHop는 C++의 퍼포먼스상의 메리트를 활용하면서, PHP의 좋은 면을 유지할 수 있습니다.합계에서는 우리 30만행의 코드와와 5000이상의 유닛 테스트를 썼습니다.오늘 밤 GitHub상에서, 모두가 PHP 라이센스아래에서 릴리스 됩니다.

오늘 밤의 즐거움

오늘 밤, 우리는 HipHop의 심부에 뛰어드는 개발자의 작은 모임을 스트리밍 합니다.보시고 싶은 경우는 태평양 시간19:30에 재차 이쪽의 페이지를 봐 주세요.

오늘 밤, 많은 질문이 있다고 생각합니다만, HipHop wiki를 봐 주세요.(링크를 잠시 후에 공개할 생각입니다) 혹은, HipHop의 개발자 메일링 리스트에 참가해 주세요.또 향후 수개월, FOSDEM , SCALE , PHP UK, ConFoo, TEX X, OSCON등의 이벤트로, 그리고 HipHop for PHP에 대하고 강연을 합니다.우리는 매우 번성한 오픈 소스 프로젝트에 여러분과 함께 Hip Hop가 진화하는 것에 흥분하고 있습니다.

최용운 / 2010/02/03 20:40:35 / 추천 0
헛발이님 감사합니다.~
변종원(웅파) / 2010/02/03 21:39:28 / 추천 0

앗. 헛발이님 감사합니다.

양승현 / 2010/02/08 12:55:46 / 추천 0
좋은정보 감사합니다. php속도가 빨라진다면야 두손들어 환영하죠..