top of page

Arquitetura

O Spotify funciona de forma a fornecer música sem problemas e sem atrasos. Na computação, a medida do atraso entre solicitar uma música e ouvi-la é chamada de latência. O Spotify quer manter a latência baixa para garantir que não haja um grande atraso entre a escolha de uma música e a audição no dispositivo.

O Spotify para fornecer um bom nível de qualidade aos seus utilizadores e estar ao nível dos seus concorrentes, apresenta um sistema complexo de forma a não haver interrupções. Para isso, é necessária uma tecnologia de codificação e compressão de informação adequada.

Então, como é que a música chega ao dispositivo?

O Spotify armazena toda a sua música nos seus servidores. Quando o utilizador começa a reproduzir uma música de streaming do Spotify, este realiza algumas ações:

  1. verifica se essa música existe em cache. Ao ter no cache, evita que tenha de fazer download novamente do conteúdo;

  2. procura por outros computadores próximos que usam o Spotify, que podem ter fragmentos das músicas armazenadas em seus caches;

  3. pesquisa a música nos seus servidores.

Esta abordagem é muito rápida e eficiente.

Essencialmente, o dispositivo torna-se um jogador igual em uma grande rede de muitos outros dispositivos que executam o Spotify. Nesta rede Peer-to-Peer (P2P, abreviadamente), os dispositivos comunicam-se entre si, fazendo upload (envio) e download (receber) de arquivos.

O Spotify também é suficientemente inteligente para iniciar a pré-busca do início da próxima música na playlist ou álbum, segundos antes de a música atual termine para garantir que o atraso entre uma música e a próxima seja pequeno.

algo.jpg

Armazenamento de informação

O Spotify utiliza a memória disponível do dispositivo por dois motivos:

  • para armazenar versões temporárias ou fragmentos das músicas que a pessoa ouve (em cache). Assim, quando o utilizador pressiona o “Play”, a música começa a tocar imediatamente, com poucas interrupções. Quando o cache está cheio, os mais antigos são sobrescritos;

  • para armazenar músicas que o utilizador Premium de modo a ouvir offline.

O modo como o Spotify funciona pode ter um impacto no espaço do disco rígido do dispositivo, bem como na conexão com a Internet.

Do ponto de vista do streaming, o Spotify utiliza o Apache Storm para potencializar casos de uso em tempo real, como novas recomendações de utilizadores, segmentação de anúncios e métricas de produtos. A maioria dos pipelines é bastante simples, aplicando eventos do Apache Kafka, executando uma simples filtragem, agregando e pesquisando meta-dados e, por fim, guarda a saída para o Apache Cassandra. A API Storm é de nível razoavelmente baixo, o que limita sua aplicação para pipelines complexos.

Por fim, em vez de confiar no que parece ser descrito como uma mistura de hardware de PC e equipamentos de rede, o Spotify terá todas as ferramentas e serviços que o Google oferece aos seus clientes de data center. Isso provavelmente também irá ajudar a economizar algum dinheiro para o Spotify e fazer com que a equipa fique mais focada no que realmente importa, o desenvolvimento da aplicação.

screen-shot-2015-01-05-at-12-57-31-pm.pn
Armazenamento de informação
46820685_343949783049150_181357674133192

Desde então, em 2015, mudou-se de Kafka para implementar a sua infra-estrutura de armazenamento de dados dos seus próprios servidores para a plataforma de nuvem do Google Cloud, de modo a facilitar as operações e o dimensionamento e foi dividido em duas partes: serviços e dados. Os três principais objetivos durante a mudança, foram minimizar a interrupção do desenvolvimento do produto, terminar o mais rápido possível para evitar o custo e a complexidade da execução em um ambiente híbrido e limpeza, garantindo que o Spotify não tivesse nenhum serviço persistente executando em seus data centres, isto é, os serviços de armazenamento, computação e rede disponíveis de utilizadores da cloud são de performance e qualidade tão altas, e custos tão baixos, quanto o que a abordagem tradicional oferece.

Codificação de Áudio

Codificação de Áudio

Este serviço dependendo da forma como o utilizador acede, apresenta dois codificadores diferentes.

Ogg Vorbis é uma tecnologia de codificação de áudio que faz compactação com perda de qualidade (lossy), de modo a reduzir intensamente o espaço virtual necessário para guardar os arquivos. Matematicamente, um áudio em Ogg Vorbis não é igual ao áudio de origem.

O Ogg Vorbis é potencialmente compatível com qualquer sistema e é bem documentado. A grande vantagem deste codificador é que este não possui patentes, como tal é gratuito. Para além disso é open source, o que possibilita os programadores de criarem as suas  implementações. Este codec codifica blocos de dados PCM de curta duração em pacotes de bits de dados comprimidos. Estes pacotes podem ser usados diretamente por mecanismos de transporte que possuem um método próprio de separação de pacotes. No caso de transferência de dados para armazenamento e transporte, Vorbis usa o formato de fluxo de dados do Ogg para disponibilizar sincronização, recaptura de sincronização após erros, marcadores durante a procura e informação suficiente para separar correctamente os pacotes de dados codificados para obter o pacote original. Tal como o MP3, este formato também inclui um campo de comentários completo e flexível para informação sobre o artista, a canção ou outro tipo de dados.

Uma desvantagem do Ogg Vorbis em relação ao MP3 é o facto de sua compressão ser quase duas vezes mais lenta.

Advanced Audio Coding (AAC) foi criado através da cooperação de várias companhias envolvidas no processamento de áudio (sistemas e equipamentos). É também um codificador para compressão com perda de dados de som digital. O AAC foi feito para ter melhor desempenho que o já conhecido anterior MP3. Fundamentalmente, a diferença nota-se mais com níveis de frequência de bit mais baixos (abaixo dos 128kps). Para valores superiores, o MP3, apesar de mais antigo, consegue atingir, ainda assim, resultados ao nível do que se faz com o AAC. O AAC é um algoritmo de codificação de sinais áudio de banda larga que usa, fundamentalmente, duas técnicas que reduzem bastante o número de informação necessária para representar áudio digital de alta qualidade:

  •  componentes do sinal que são perceptualmente indiscerníveis, são eliminados;

  •  eliminação de redundância no sinal codificado.

A grande diferença entre estes dois codificadores centra-se no facto de o AAC fazer parte do MPEG-4, e este estar agregado a patentes, enquanto o Ogg Vorbis não está associado a nenhuma patente, o que facilita o seu uso.

Caso o utilizador seja Premium, tem opção de escolher diferentes qualidades de codificadores de áudio enquanto que o utilizador gratuito está sujeito ao codificador padrão.

Se a aplicação for acedida através do computador, a qualidade padrão é Ogg Vorbis 160 kbit/s. Caso seja utilizador Premium pode ativar o streaming de alta qualidade, que usa o Ogg Vorbis 320 kbit/s.

Se o serviço for utilizado através por via Web, para um utilizador gratuito o codificador usado é o AAC (Advanced Audio Coding) 128 kbit/s enquanto para o Premium é utilizado o AAC 256 kbit/s.

No caso dos dispositivos móveis difere dependendo do sistema operativo entre iOS e Android.

iOs:

Pode escolher entre as seguintes configurações de qualidade de som, todas em formato Ogg Vorbis:

  • Baixa – Equivalente a aproximadamente 24 kbit/s.

  • Normal – Equivalente a aproximadamente 96 kbit/s.

  • Alta – Equivalente a aproximadamente 160 kbit/s.

  • Altíssima – Equivalente a aproximadamente 320 kbit/s.

  • Automática – Dependente da sua conexão de rede.

Android:

Pode escolher entre as seguintes configurações de qualidade de som:

  • Baixa – Equivalente a aproximadamente 24 kbit/s (formato HE-AACv2).

  • Normal – Equivalente a aproximadamente 96 kbit/s (formato Ogg Vorbis).

  • Alta – Equivalente a aproximadamente 160 kbit/s (formato Ogg Vorbis).

  • Altíssima – Equivalente a aproximadamente 320 kbit/s (formato Ogg Vorbis).

  • Automática – Dependente da sua conexão de rede.

A qualidade padrão para ouvir música do Spotify no Chromecast é AAC 128 kbit/s para utilizadores gratuitos e 256 kbit/s para Premium. O utilizador tem opção de definir configurações diferentes para ouvir online (transmissão) ou offline (downloads). Quanto maior a qualidade da transmissão, mais dados serão usados. Quanto maior a qualidade dos downloads, mais espaço em disco será usado.

Por fim, o serviço consome largura de banda de Internet do dispositivo para poder reproduzir música sem interrupções devidas ao armazenamento em buffer.

Fluxo de alta qualidade Ogg Vorbis de 320kbit/s do Spotify

Ruído da AAC devido à codificação com perdas

Ruído do Ogg Vorbis devido à codificação com perdas

bottom of page