Per cosa è utile Scala?
Scala è il linguaggio di scelta per i sistemi distribuiti scalabili, e la nuova generazione di flussi e strumenti Big Data. Consideriamo due esempi chiave: Twitter stack e Apache Spark. Ognuno è rappresentato da un keynote a Scala By The Bay 2014, la conferenza annuale di SF Scala, tenutasi l'8-9 agosto di quest'anno (2014).
Twitter è una società webscala che fornisce aggiornamenti in tempo reale con messaggi e connessioni sul grafo sociale. È costruito su una solida base Scala. Finagle, il livello di servizio, collega i componenti, e i futures di Scala forniscono un'astrazione asincrona componibile per i servizi. La programmazione funzionale rende sicuro e facile ragionare sulla gestione e la propagazione degli errori, che è inevitabile in una tale architettura. Apache Mesos fornisce una base cluster per i servizi. Sono tutti strumentati, rendendo più facile il debug dei cicli caldi e la comprensione delle prestazioni del flusso complessivo.
Play Framework e Akka forniscono una piattaforma distribuita simile allo stack di Twitter, e permettono la programmazione reattiva con la retroazione fino in fondo. È il modo più veloce per costruire applicazioni web che scalano dal primo giorno.
Nel backend di analisi, Scalding (software) è un fantastico DSL per Hadoop, Summingbird (Twitter Engineering: Quali sono alcuni buoni usi di Summingbird?) è un'ulteriore astrazione per scrivere lavori Map/Reduce che sembrano normali programmi Scala per varie piattaforme.
Questo ci porta al mio punto chiave: Scala è il linguaggio ideale per scrivere programmi map/reduce nel piccolo e nel grande. Il suo approccio di programmazione funzionale ti guida ad usare map, flatMap e fold su un singolo nodo, e si estende naturalmente a multicores e clusters.
Apache Spark dimostra il punto -- possiamo pensarlo come collezioni distribuite in Scala, un approccio che sostengo in spark.recipes. L'API per Spark corrisponde strettamente all'API per le collezioni Scala. Una volta che si impara a programmare in Scala -- e lo si può fare nel REPL, in modo interattivo -- si può naturalmente procedere a farlo in scala con Spark. Spark è il fondamento di tutta una serie di sistemi, come Shark per l'SQL in tempo reale su scala Hive, BlinkDB per il campionamento veloce, MLLib per una facile libreria ML, e GraphX per l'analisi dei grafici interoperabile con Spark e Shark e il resto.
Se state appena iniziando con Big Data e Hadoop, potete saltare in testa alla fila imparando Scala e Spark e imparare un approccio migliore al Map/Reduce fin dall'inizio. Se avete bisogno di costruire un'architettura scalabile orientata ai servizi, lo stack Twitter e Play/Akka vi porteranno lì con la programmazione reattiva e gli strumenti di cluster consolidati. Qualsiasi backend, qualsiasi flusso di analisi, incluso lo streaming in tempo reale, sarà più facile da ragionare, progettare, scrivere e mantenere in Scala. Gli ingegneri Scala sono tra i migliori che ci siano.
Se avete bisogno di costruire un sistema scalabile e/o un'azienda che vi permetta di servire API e analizzare i dati in tempo reale, Scala è dotato di una serie di strumenti open-source, di comunità e di talenti ingegneristici che vi porteranno lì più velocemente di qualsiasi altro ecosistema.