La programmazione

I server Web di Facebook supportano il linguaggio di programmazione PHP; esso infatti permette di creare pagine dinamiche grazie l’ausilio dei database esterni e grazie al passaggio dei dati fra le pagine stesse. Dunque il livello web, quello più alto dell’intero sistema, è popolato dalle applicazioni scritte in questo linguaggio.

Come ben sappiamo PHP non è l’unico linguaggio lato server disponibile per sviluppare pagine web; nonostante ciò, Facebook si è ad esso affidato perché rappresenta il linguaggio leader tra quelli open source per lo sviluppo sul web. È un linguaggio di scripting completo, sofisticato e flessibile; è compatibile con qualsiasi server Web e può girare su qualsiasi sistema operativo, come Windows, Unix/Linux, Mac, ma anche AS/400, Novell, OS/2 e altri ancora. La sua principale caratteristica è quella di consentire l’interazione con qualsiasi tipo di database, come SQLite, MySQL, PostgreSQL, SQL Server, Oracle, SyBase, Access e molti altri. Inoltre PHP risulta del tutto semplice da imparare e questa caratteristica permette la crescente produttività dei servizi offerti dal social network. Presenta, per di più, un robusto supporto alla programmazione ad oggetti.

Scendiamo ora di livello. Il vero è proprio nucleo del sistema Facebook è scritto con i linguaggi C++, Java, Python e Ruby. La scelta di utilizzare quattro linguaggi di programmazione del tutto differenti tra loro, ha spinto la compagnia Facebook a creare un nuovo framework: Thrift. Questo, infatti, nasce da esigenze ben precise, come:

  • l’interoperabilità tra un certo numero di linguaggi (appunto Java, C++, PHP, Python e altri) a vantaggio dell’intero sistema;
  • la generazione in automatico del codice di “traduzione” tra i formati d’interscambio e quelli nativi;
  • il volersi svincolare dall’aggiornamento in contemporanea di tutti i sistemi;
  • il desiderio di concentrarsi sulla logica di business piuttosto che sui dettagli d’infrastruttura.

Per accelerare i tempi e per soddisfare prima possibile le necessità appena viste, Facebook ha deciso di rendere il framework open source.

Thrift permette a Facebook di costruire servizi scalabili di back-end in modo efficiente, consentendo così agli ingegneri di utilizzare l’approccio “Divide et Impera” (o “Divide and Conquer”) per dividere un problema generale in più sottoproblemi, con lo scopo di gestirli più facilmente. In questo modo, gli sviluppatori possono concentrarsi sul codice dell’applicazione, senza preoccuparsi del “livello di socket”.

Infatti, Thrift consente di definire sia i tipi di dati, che le interfacce di servizio, in un solo file scritto in lingua neutrale.

Facebook impiega Thrift in numerosi sistemi, come: la ricerca, il logging, la gestione degli annunci pubblicitari e la applicazioni mobili.

Per quanto riguarda il servizio di ricerca, Facebook utilizza Thrift sia come protocollo di base, sia come livello di trasporto. La generazione del codice multi-lingua è adatto alla ricerca perché consente lo sviluppo di applicazioni in un linguaggio efficace a lato server (C++) e permette alle applicazioni web di Facebook, scritte in PHP, di effettuare le chiamate al servizio di ricerca di Thrift utilizzando le librerie PHP.

Inoltre esiste anche una grande varietà di ricerca statistica che genera del codice Python. Thrift viene utilizzato da IDL (Interface Description Language), ovvero un linguaggio con cui Facebook intende descrivere le sue interfacce. IDL è la soluzione ideale per l’analisi dei dati, per la visualizzazione e per lo sviluppo di applicazioni software. Esso è in grado di combinare la tecnologia e gli strumenti necessari per la creazione di ambienti moderni ed estensibili, con l’obbiettivo primario di risparmiare tempo. Inoltre IDL richiede meno codice e anche meno competenze di programmazione per sviluppare potenti applicazioni software con interfacce userfriendly.

Dal momento che l’ambiente di sviluppo software di IDL (chiamato Workbench IDL) si basa sul popolare framework open-source Eclipse, allora risulta essere davvero una soluzione cross-platform85.

L’interfaccia che Facebook mette a disposizione per consentire alle nostre applicazioni di dialogare con il cuore del sistema si basa su un’architettura di tipo REST.

Come abbiamo già detto, questa tecnica prevede un semplice scambio di informazioni tra i server e i client tramite protocollo HTTP. Entrando nel dettaglio, Facebook mette a disposizione un API REST Server, che è sempre in ascolto di richieste HTTP di tipo POST. Questo particolare server risponde con stringhe in formato XML che possono quindi essere interpretate dal client.