BT

Disseminando conhecimento e inovação em desenvolvimento de software corporativo.

Contribuir

Tópicos

Escolha a região

Início Notícias Facebook anuncia o Apollo, um novo banco de dados NoSQL para armazenamento online de baixa latência

Facebook anuncia o Apollo, um novo banco de dados NoSQL para armazenamento online de baixa latência

Jeff Johnson, engenheiro de software do Facebook, em sua palestra no último QCon Nova York, anunciou o Apollo, um banco de dados NoSQL do Facebook similar ao Paxos. Escrito em C++ e construído sobre o RPC Apache Thrift 2, o Apollo é um sistema de storage (armazenamento) hierárquico onde todos os dados são divididos em shards (um tipo de particionamento de banco de dados), muito semelhante ao funcionamento do HBase. Johnson explicou que o ambiente alvo para o Apollo é em storage de baixa latência online, em particular utilizando armazenamento flash e processamento em memória.

Diferentemente de um banco de dados orientado a documentos ou um de chave valor, o Apollo trabalha com modificações em estruturas de dados, permitindo que seja representado mapas, filas, árvores, entre outras estruturas. As partes individuais do sistema de dados são bem pequenas, algo entre 1 byte e 1MB, e tamanho total de armazenamento vai de 1MB até 10+PB. O Apollo pode ser instalado em um mínimo de três servidores até ser composto de uma infraestrutura de milhares de nós.

Nós tivemos que desenvolver diversas funcionalidades, com objetivo de permitir que seja realizada a gravação e leitura de forma assíncrona do disco. Tivemos que lidar com situações em que os seguidores (followers) estão desatualizados devido a novas atualizações no servidor ou em outros diversos casos, como exemplo situações onde o disco é lento.

Uma estrutura de Storage é o segundo componente deste banco NoSQL. A gravação do primeiro storage é baseada no RocksDB, uma persistência de Key/Value (chave/valor) construído sobre o Google's LevelDB. Embora armazene Chave/Valor, o Facebook está usando esta tecnologia para simular outras estruturas de dados. O Apollo foi projetado para ser um storage agnóstico e o time também está trabalhando para adicionar suporte ao MySQL como mecanismo de storage alternativo.

O terceiro componente do Apollo é uma API de Cliente composta dos métodos read() e write(). Toda operação que o Apollo executa em Shard é atômica, assim ele suporta a criação de pré-condições e se estas estiverem satisfeitas, ela retorna o resultado da operação. Por exemplo:

 

read(conditions : {map(m1).contains(x)},

reads : {deque(d2).back()})

 

Este código significa que "se o mapa m1 contém o valor x então retorne o valor que está no final do deque d2". As operações podem ser combinadas e conter qualquer número de condições e qualquer número de leituras.

Escritas são muito semelhantes e, novamente, permitem que você expresse condições:

 

write(conditions : {ver(k1) == v}, reads : {},

writes : {val(k1) := x})

 

O quarto componentes de shard é o Fault Tolerant State Machines (FTSMs). Este componente é utilizado, principalmente, pelo código interno do sistema mas também podem ser utilizados pelo cliente. Cada FTSM é atrelado a um shard de modo que, por exemplo, em um shard de três máquinas todas elas irão executar o mesmo código simultaneamente. Eles são capazes de acessar o storage persistente que é local para cada máquina. Ainda mais importante é o fato que, caso um dos nós falhe, o código continua sendo executado em uma ordem adequada de execução nos demais nós.

Máquinas de estados são utilizadas para diversas aplicações, por exemplo para realizar o balanceamento de carga, migração de dados, criação e destruição de shards, além de coordenar as transações entre shards. As máquinas de estados podem sofrer efeitos colaterais externos, por exemplo, elas podem enviar requisições RPC para máquinas remotas, mas sempre que elas é realizado uma mudança no estado da persistência, elas precisam informar esta mudança para o Raft, de forma a obter a sincronização e aprovação dos demais servidores.

O Apollo não está sendo utilizado atualmente no ambiente de produção do Facebook, mas a empresa avalia a possibilidade de utilizá-lo para substituir algumas aplicações do memcached e Johnson deixou claro que o Facebook planeja efetuar um uso efetivo desta tecnologia.

De modo geral, nós estamos procurando aplicações de storage in-memory no Facebook, tanto aplicações novos quanto substituir sistemas legados, de forma a realizar uma comparação da performance em relação aos sistemas existentes.

A empresa também está procurando utilizar o Apollo como um sistema confiável de filas para o envio de mensagens do Facebook para iOS, Android e operadoras via SMS, e também potencialmente utilizá-lo para análises estatísticas mais eficientes.

O Apollo continua em desenvolvimento e ainda não se tornou open-source embora Jonhson afirme que essa é uma das intenções futuras do Facebook. A apresentação de Jonson está disponível para os participantes do QCon Nova York e será publicada em breve para todos leitores do InfoQ.

Avalie esse artigo

Relevância
Estilo/Redação

Conteúdo educacional

BT