WarDrome Sci-fi MMORPG
WarDrome Sci-fi MMORPG

Il testo integrale in italiano della presentazione di HipHop-PHP

HipHop-PHP Loho
Uno dei valori chiave di Facebook è quello di muoversi in fretta.
Negli ultimi sei anni, siamo stati in grado di realizzare un servizio molto rapido al ritmo di sviluppo che PHP offre.
Come linguaggio di programmazione, PHP è semplice.
Semplice da imparare, semplice da scrivere, semplice da leggere e semplice per eseguire il debug.
Siamo in grado di ottenere nuovi ingegneri competenti sulla piattaforma di Facebook molto più rapidamente con PHP che con altri linguaggi , ciò ci permette di innovare più rapidamente.
Oggi sono felice di condividere il progetto di un piccolo gruppo di persone straordinarie con cui ho lavorato per due anni; HipHop per PHP.
Con HipHop abbiamo ridotto l’utilizzo della CPU sui nostri server Web in media di circa il cinquanta per cento, a seconda della pagina.
Meno CPU significa un numero inferiore di server, il che significa meno overhead.
Questo progetto ha avuto un impatto enorme su Facebook.


Speriamo che il Web in generale possa beneficiare di HipHop, così stiamo rilasciandolo come open source, questa sera, nella speranza che esso comporti una nuova attenzione verso l’ottimizzazione di siti web complessi con PHP.
HipHop ci ha mostrato risultati incredibili, ma non è certamente completa e sarà meglio usarla in versione beta all’inizio.

HipHop per PHP non è tecnicamente un compilatore.
Piuttosto si tratta di un “trasformatore” di codice sorgente.
HipHop trasforma il codice sorgente di programmazione PHP altamente ottimizzato in C++ e poi usa g++ per compilarlo.
HipHop esegue il codice sorgente in modo semanticamente equivalenti (abbiamo sacrificato alcune caratteristiche usate raramente – come eval () -) in cambio di prestazioni migliorate.
HipHop comprende un trasformatore di codice, una nuova implementazione del sistema di runtime di PHP, e una riscrittura di verie comuni estensioni PHP per sfruttare queste ottimizzazioni delle prestazioni.

Scaling di PHP come linguaggio di scripting

Le origini di PHP sono quelle di un linguaggio di scripting, come Perl, Python e Ruby, che rendono grandi benefici in termini di produttività dei programmatori e la possibilità di agire velocemente sui prodotti. Diversa cosa è rispetto ai più tradizionali linguaggi compilati come il C++ e linguaggi interpretati come Java.
D’altro canto, i linguaggi di scripting sono conosciuti per essere molto meno performanti quando si tratta di CPU e di occupazione della memoria.
A causa di questo, è stato impegnativo scalare Facebook per oltre 400 miliardi di pagine php viste ogni mese.

Un modo comune per affrontare queste inefficienze è riscrivere le parti più complesse della vostra applicazione PHP direttamente in C++, come estensioni PHP. Questo trasforma in gran parte il PHP in collante tra il codice HTML e la logica dell’applicazione in C++.
Da un punto di vista tecnico questo funziona bene, ma riduce drasticamente il numero di ingegneri che sono in grado di lavorare su l’intera applicazione. L’apprendimento del C++ è solo il primo passo per scrivere estensioni PHP, il secondo è capire le API Zend.
Dato che la nostra squadra di programmazione è relativamente piccola – ci sono oltre un milione di utenti per ogni ingegnere – non possiamo permetterci di fare parte della nostra codebase meno accessibile rispetto ad altri.

Scalare Facebook è particolarmente difficile perché quasi ogni visualizzazione della pagina è di un utente connesso con una esperienza personalizzata.
Quando si visualizza la home page abbiamo bisogno di cercare tutti i tuoi amici, interrogare gli aggiornamenti più rilevanti (da un servizio personalizzato che abbiamo costruito chiamato Multifeed), filtrare i risultati in base alle impostazioni di privacy, quindi riempire le storie con i commenti , foto, piace, e tutti i gadgets che la gente ama su Facebook.
Tutto questo in poco meno di un secondo.
HipHop ci permette di scrivere la logica che fa l’assemblaggio finale della pagina in PHP e lavorare velocemente mentre ci si basa su servizi custom back-end in C++, Erlang, Java, Python o al servizio del feed di notizie, di ricerca, chat, e le altre parti centrali del sito.

Fino dal 2007 abbiamo pensato a diversi modi per risolvere questi problemi e abbiamo anche provato l’attuazione di un paio di soluzioni.
Il suggerimento comune è quello di riscrivere Facebook in un’altro linguaggio, ma data la complessità e la velocità di sviluppo del sito questo richiederebbe un enorme tempo. Abbiamo riscritto alcuni aspetti dello Zend Engine – PHP – e contribuito a novità nel progetto PHP, ma alla fine non abbiamo visto il tipo di aumento delle prestazioni che sono necessarie. Le prestazioni di HipHop sono necessarie per la nostra velocità di sviluppo.

Hacking Up HipHop

Una notte in un Hackmeeting pochi anni fa, ho iniziato a provare a trasformare in C++ parte di codice PHP.
I due linguaggi sono abbastanza simili sintatticamente e il C++ sorpassa drasticamente PHP quando si tratta di utilizzo della CPU e della memoria.
Anche il PHP stesso è scritto in C.
Noi sapevamo che era impossibile riscrivere con successo un intero codebase di queste dimensioni a mano, quindi ci chiedemmo cosa sarebbe accaduto se avessimo costruito un sistema a livello di codice.

Trovare nuovi modi per migliorare le prestazioni PHP non è un concetto nuovo.
In fase di esecuzione il motore Zend trasforma il sorgente PHP in pocodes che vengono poi eseguiti dalla Zend Virtual Machine.
Progetti open source come APC cache ed eAccelerator usano questo output e sono utilizzati dalla maggior parte dei siti web con PHP.
C’è anche Zend Server, un prodotto commerciale che rende più veloce PHP tramite l’ottimizzazione del codice operativo e caching.
Noi invece, abbiamo riflettuto sulla trasformazione del codice PHP direttamente in C++, che può poi poi essere trasformato in codice macchina nativo.
Anche compilare PHP non è un’idea nuova, i progetti open source come Roadsend e PHC per compilare il PHP a C, Quercus che compila PHP a Java, Phalanger etc.

Inutile dire che dopo quella Hackmeeting è servito molto tempo. Otto mesi dopo, ho avuto il codice sufficiente a dimostrare che è effettivamente possibile correre più veloce con il codice compilato. Al progetto allora si aggiunsero Iain Proctor e Minghui Yang premettendo al team di accelerare il ritmo del progetto.
Abbiamo trascorso i dieci mesi seguenti per finire tutto il codice e i sei mesi successivi a fare test sui server di produzione.
Siamo orgogliosi di dire che a questo punto, stiamo servendo oltre il 90% del nostro traffico Web utilizzando HipHop, tutto solo sei mesi dopo la distribuzione.

Come lavora HipHop

La sfida principale del progetto è colmare il divario tra PHP e C++. PHP è un linguaggio di scripting con la dinamica della tipizzazione debole.
C++ è un linguaggio compilato con tipizzazione statica. Anche se il PHP permette di avere caratteristiche dinamiche, la maggior parte del PHP è relativamente semplice. E ‘più probabile che si veda if (…) {…} else {..} che non function foo($x) { include $x; }
Questo è dove guadagnamo in prestazioni.
Ove possibile, il nostro codice generato utilizza una tipizzazione statica vincolante per le funzioni e le variabili.
Abbiamo anche utilizzare l’inferenza di tipo per scegliere il tipo più specifico possibile per le nostre variabili, e quindi salvare la memoria.

Il processo di trasformazione comprende tre fasi principali:

1. Analisi statica dove raccogliere informazioni su chi dichiara che cosa e le varie dipendenze,
2. Inferenza di tipo in cui abbiamo scelto il tipo più specifico tra i tipi scalari di C++ , stringhe, array, classi, oggetti etc.
3. Generazione di codice, che per la maggior parte è una corrispondenza diretta dalle dichiarazioni PHP e le espressioni di C++.

steps

Abbiamo anche sviluppato HPHPi, che è un interprete sperimentale progettato per lo sviluppo. Quando si utilizza HPHPi non hai bisogno di compilare il codice sorgente PHP prima di eseguirlo. E’ utile per la cattura dei bug in HipHop e offre ai tecnici un modo per utilizzare HipHop senza cambiare il modo in cui scrivono PHP.

Rendere HipHop globale ci permette di mantenere gli aspetti migliori di PHP sfruttando i benefici delle prestazioni di C++.
In totale, abbiamo scritto più di 300.000 linee di codice e più di 5.000 unità di test.
Tutto questo sarà pubblicato questa sera sul GitHub sotto la licenza open source PHP.

Per saperne di più questa sera

Questa sera stiamo ospitando un piccolo gruppo di sviluppatori in immersione profonda in HipHop per PHP e sarà in streaming un Tech Talk dal vivo.
Tornate qui (sul sito di fb) circa alle 7:30 ora del Pacifico, se desiderate vederlo.

Sono sicuro che ci saranno un sacco di domande, a partire da questa sera, date un’occhiata al HipHop wiki o iscrivetevi alla mailing list degli sviluppatori HipHop.
Ci troverete anche a FOSDEM, SCALE, PHP UK, ConFoo, TEK X, e OSCON nei prossimi mesi a parlare di HipHop per PHP.
Siamo molto entusiasti di evolvere HipHop in un progetto open source fiorente insieme a tutti voi.

Per il video andate qui : Comunicato su facebook

Leave a comment

Your comment

Connect with Facebook