Qual è l'architettura di Spotify?
L'architettura del backend di Spotify è fortemente orientata ai servizi. Il backend è composto da circa un centinaio di servizi, la maggior parte dei quali abbastanza piccoli e semplici. I servizi sono scritti in Python o Java con poche eccezioni. I servizi comunicano principalmente usando il nostro protocollo chiamato Hermes, che è basato sui messaggi e costruito su ZeroMQ e Protobuf. I servizi più vecchi usano ancora HTTP e payload XML/JSON. Lo stoccaggio è principalmente PostgreSQL, Cassandra o vari indici statici. Quest'ultimo è usato principalmente dai vari servizi di contenuto, ad esempio per la ricerca o i metadati. I file audio sono memorizzati in Amazon S3 e memorizzati nella cache nel nostro backend o utilizzando CDN per una bassa latenza.
I vari client mantengono una connessione persistente a un servizio di backend chiamato "accesspoint". Funziona fondamentalmente come un router di messaggi su steroidi, gestendo la comunicazione con i servizi necessari. Il protocollo tra i client e l'accesspoint è proprietario.
I client per desktop, cellulari e la nostra libreria incorporabile, libspotify, condividono tutti una base di codice comune. Ogni cliente poi costruisce su questo nucleo per fornire interfacce utente e altre adozioni specifiche della piattaforma. Il codice base condiviso è scritto in C++ e le adozioni della piattaforma nei linguaggi nativi della piattaforma, per esempio ObjC su iOS. Inoltre, molte viste e applicazioni nel client desktop sono ora implementate come applicazioni web, utilizzando un'istanza incorporata di Chromium.
L'audio viene recuperato dalla cache locale, peer-to-peer o dal nostro storage. La nostra soluzione P2P è stata descritta in dettaglio in vari articoli di Gunnar Kreitz (articoli).
L'infrastruttura è fortemente basata su Debian e sul software open source in generale.