Visão geral do Cloud Bigtable

Cloud Bigtable é uma tabela preenchida de maneira esparsa que pode ser escalonada para bilhões de linhas e milhares de colunas, o que permite armazenar terabytes de dados ou até mesmo petabytes. Um único valor em cada linha é indexado. Esse valor é conhecido como a chave de linha. O Cloud Bigtable é ideal para armazenar grandes quantidades de dados de chave única com latência muito baixa. Conta com uma alta capacidade de operações de leituras e gravações em latência baixa, além de ser a fonte de dados ideal para operações MapReduce.

O Cloud Bigtable é exposto a aplicativos por meio de várias bibliotecas de cliente, inclusive uma extensão compatível para a biblioteca do Apache HBase para Java. Dessa maneira, ela se integra ao ecossistema do Apache existente de software do Big Data de código aberto.

Os servidores back-end eficientes do Cloud Bigtable oferecem diversas vantagens importantes em comparação com uma instalação autogerenciada do HBase:

  • Escalabilidade incrível. O Cloud Bigtable é escalonado na proporção direta do número de máquinas no cluster. Uma instalação autogerenciada do HBase tem um afunilamento projetado para limitar o desempenho após atingir um determinado patamar. O Cloud Bigtable não tem esse afunilamento, então é possível escalonar o cluster para lidar com mais leituras e gravações.
  • Administração simples. O Cloud Bigtable processa upgrades e reinicializações de maneira transparente, além de manter automaticamente alta durabilidade de dados. Para replicar os dados, basta adicionar um segundo cluster à instância, e a replicação começa automaticamente. Não se preocupe mais com o gerenciamento de mestres ou regiões. Basta projetar os esquemas de tabela, e o Cloud Bigtable processará o restante para você.
  • Redimensionamento de cluster sem inatividade. Aumente o tamanho de um cluster do Cloud Bigtable por algumas horas para processar uma carga grande e reduza novamente o tamanho do cluster, sem inatividade. Depois que você alterar o tamanho de um cluster, normalmente levará alguns minutos sob carga para o Cloud Bigtable equilibrar o desempenho em todos os nodes do cluster.

Indicações de uso

O Cloud Bigtable é ideal para aplicativos que precisam de capacidade e escalabilidade muito altas no processamento de dados de valor/chave não estruturados, em que cada valor tem geralmente até 10 MB. É um excelente mecanismo de armazenamento para operações MapReduce em lote, processamento/análise de stream e aplicativos de aprendizado de máquina.

Use o Cloud Bigtable para armazenar e consultar todos os tipos de dados a seguir:

  • dados de série temporal, como utilização da CPU e da memória ao longo do tempo em vários servidores
  • dados de marketing, como históricos de compras e preferências de clientes
  • dados financeiros, como históricos de transações, cotações de ações e taxas de câmbio
  • dados da Internet das coisas, como relatórios de utilização gerados por medidores de energia e aparelhos domésticos
  • dados do gráfico, como informações sobre como os usuários estão conectados uns aos outros.

Modelo de armazenamento do Cloud Bigtable

O Cloud Bigtable armazena dados em tabelas altamente escalonáveis, sendo que cada uma é um mapa de chave/valor classificado. A tabela é composta de linhas, sendo que cada uma geralmente descreve uma entidade única, e de colunas, que contêm os valores individuais das linhas. Cada linha é indexada por uma única chave de linha. As colunas inter-relacionadas, em geral, são reunidas em um grupo de colunas. Cada coluna é identificada por uma combinação do grupo de colunas com um qualificador de coluna, que é um nome exclusivo dentro do grupo.

Cada interseção de linha/coluna pode conter várias células, ou versões, em diferentes carimbos de data/hora, fornecendo um registro de como os dados armazenados foram alterados ao longo do tempo. As tabelas do Cloud Bigtable são esparsas. Isso significa que uma célula não ocupará nenhum espaço se estiver vazia.

Por exemplo, imagine que você esteja criando uma rede social para os presidentes dos Estados Unidos. Vamos chamar essa rede de Presida. Cada presidente pode seguir as postagens dos outros presidentes. Na ilustração a seguir, há uma tabela do Cloud Bigtable que rastreia quem cada presidente segue no Presida:

Uma tabela do Cloud Bigtable com uma linha para cada nome de usuário.

Vale observar alguns pontos nessa ilustração:

  • A tabela contém um grupo de colunas, follows. Esse grupo contém vários qualificadores de coluna.
  • Os qualificadores de coluna são usados como dados. Essa escolha de projeto aproveita a escassez de dados nas tabelas do Cloud Bigtable e o fato de que novos qualificadores de coluna podem ser adicionados instantaneamente.
  • O nome de usuário é usado como chave de linha. Pressupondo que os nomes de usuário estejam espalhados uniformemente pelo alfabeto, o acesso aos dados será mais ou menos uniforme na tabela inteira. Consulte Balanceamento de carga para saber como cargas desiguais são processadas no Cloud Bigtable e Como escolher uma chave de linha para dicas mais avançadas sobre a escolha de uma chave de linha.

Arquitetura do Cloud Bigtable

No diagrama a seguir, há uma versão simplificada da arquitetura geral do Cloud Bigtable:

Arquitetura geral do Cloud Bigtable.

Conforme ilustrado pelo diagrama, todas as solicitações de cliente passam por um servidor front-end antes de ser enviadas para um node do Cloud Bigtable. No artigo original do Bigtable, esses nós são chamados de "servidores de blocos". Os nós são organizados em um cluster do Cloud Bigtable, que pertence a uma instância do Cloud Bigtable, um contêiner para o cluster.

Cada nó processa um subconjunto de solicitações realizadas ao cluster. Se você adicionar nodes a um cluster, o número de solicitações simultâneas que ele pode processar aumentará, assim como a capacidade máxima do cluster inteiro. Caso ative uma replicação adicionando um segundo cluster, você também poderá enviar tipos diferentes de tráfego para clusters diferentes, e será possível fazer failover para um cluster caso o outro se torne indisponível.

A tabela do Cloud Bigtable é fragmentada em conjuntos de linhas contíguas, chamados de blocos. Essa fragmentação ajuda a balancear a carga de trabalho das consultas. Os blocos são semelhantes às regiões do HBase. São armazenados em formato SSTable no Colossus, o sistema de arquivos do Google. Esse formato fornece um mapa permanente, ordenado e imutável das correspondências entre chaves e valores, no qual ambos são strings arbitrárias de bytes. Cada bloco está associado a um node específico do Cloud Bigtable. Além dos arquivos SSTable, todas as gravações também são armazenadas no registro compartilhado do Colossus assim que reconhecidas pelo Cloud Bigtable. Isso oferece mais durabilidade.

É importante ressaltar que os dados nunca são armazenados nos nodes do Cloud Bigtable. Cada node conta com ponteiros para um grupo de blocos armazenados no Colossus. Estes são os resultados:

  • O rebalanceamento de blocos de um node para outro acontece muito rapidamente, porque não há cópia de dados reais. O Cloud Bigtable simplesmente atualiza os ponteiros de cada node.
  • A recuperação da falha de um node do Cloud Bigtable também é muito rápida, porque é necessário migrar somente os metadados para o node substituto.
  • Quando um node do Cloud Bigtable falha, não há perda de dados.

Consulte Instâncias, clusters e nodes para mais informações sobre como trabalhar com esses blocos de construção fundamentais.

Balanceamento de carga

Cada zona do Cloud Bigtable é gerenciada por um processo mestre, que balanceia a carga de trabalho e o volume de dados no interior dos clusters. O mestre divide ao meio os blocos maiores ou mais acessados e mescla os blocos menores ou menos acessados, redistribuindo-os entre os nodes conforme necessário. Se um determinado bloco tiver um pico de tráfego, o mestre dividirá esse bloco em dois e, depois, moverá um dos blocos novos para outro node. O Cloud Bigtable gerencia automaticamente a divisão, a união e o rebalanceamento. Assim, os usuários não precisam administrar os blocos manualmente. Consulte a seção Noções básicas sobre o desempenho do Cloud Bigtable e saiba mais detalhes sobre esse processo.

Para ter o melhor desempenho nas operações de gravação com o Cloud Bigtable, é importante distribui-las da forma mais uniforme possível por todos os nodes. Uma maneira de fazê-lo é usar chaves de linha que não sigam uma ordem previsível. Por exemplo, nomes de usuário tendem a ser distribuídos mais ou menos por igual pelo alfabeto. Dessa maneira, incluir um nome de usuário no início da chave de linha tenderá a distribuir gravações por igual.

Ao mesmo tempo, é útil agrupar linhas relacionadas. Assim, elas ficam próximas umas das outras, o que aumenta a eficiência na leitura simultânea de várias linhas. Por exemplo, se você estiver armazenando tipos diferentes de dados climáticos ao longo do tempo, a chave de linha provavelmente será o local onde os dados foram coletados seguido de um timestamp (como WashingtonDC#201803061617). Esse tipo de chave de linha agruparia todos os dados de um local em um intervalo contíguo de linhas. Para dados de outros locais, a linha iniciaria com um identificador diferente. Com a coleta de dados para vários locais na mesma taxa, as gravações ainda seriam espalhadas de forma uniforme por todos os blocos.

Consulte Como escolher uma chave de linha para saber mais detalhes sobre a escolha da chave de linha adequada para seus dados.

Tipos de dados compatíveis

Na maioria dos casos, o Cloud Bigtable trata todos os dados como strings de bytes brutos. Ele tenta determinar o tipo dos dados somente nas operações de incremento com o destino que requer um número inteiro de 64 bits codificado como um valor big-endian de 8 bytes.

Utilização da memória e do disco

As seções a seguir descrevem como vários componentes do Cloud Bigtable afetam a utilização da memória e do disco para a instância.

Células vazias

As células vazias em uma tabela do Cloud Bigtable não ocupam espaço. Basicamente, cada linha é uma coleção de entradas de valor/chave, sendo a chave uma combinação composta por grupo de colunas, qualificador de coluna e timestamp. Se uma linha não incluir um valor para uma chave específica, a entrada de valor/chave simplesmente não existirá.

Qualificadores de coluna

Os qualificadores de coluna ocupam espaço na linha, já que são armazenados na própria linha. Como resultado, geralmente é mais eficiente usar os qualificadores de coluna como dados. No exemplo do Prezzy mostrado acima, os qualificadores de coluna no grupo de colunas follows são nomes de usuários seguidos. A entrada de chave/valor dessas colunas é simplesmente um valor de marcador.

Compactações

Periodicamente, o Cloud Bigtable regrava as tabelas para remover entradas excluídas e reorganizar os dados, tornando as leituras e gravações mais eficientes. Esse processo é conhecido como compactação. Não há definições de configuração para as compactações. O Cloud Bigtable compacta os dados automaticamente.

Mutações e exclusões

As mutações ou alterações realizadas em uma linha ocupam espaço de armazenamento extra, porque são acumuladas pelo Cloud Bigtable em sequência e compactadas somente de tempos em tempos. Quando o Cloud Bigtable faz a compactação de uma tabela, ele remove os valores que não são mais necessários. Se você atualizar o valor de uma célula, ambos os valores original e novo serão armazenados em disco por um determinado período, até que os dados sejam compactados.

As exclusões também ocupam espaço de armazenamento extra por um curto prazo, porque, na realidade, são um tipo especializado de mutação. Até que a tabela seja compactada, a exclusão ocupa armazenamento extra, em vez de liberar espaço.

Compactação de dados

O Cloud Bigtable usa um algoritmo inteligente para compactar dados automaticamente. Não é possível definir as configurações dessa compactação para a sua tabela. No entanto, para que a compactação seja eficiente, é importante saber como armazenar os dados:

  • Dados aleatórios não são compactados com a mesma eficiência de dados padronizados. Um exemplo de dados padronizados são os textos, como a página que você está lendo neste momento.
  • A compactação funciona melhor quando valores idênticos estão próximos, seja na mesma linha ou em linhas adjacentes. Se você organizar as chaves de linha de forma que porções de dados idênticas estejam próximas, os dados serão compactados com eficiência.

Durabilidade dos dados

Quando você usa o Cloud Bigtable, seus dados são armazenados no Colossus, o sistema de arquivos de alta durabilidade usado internamente pelo Google. O processamento ocorre por meio de dispositivos de armazenamento nos data centers do Google. Não é necessário executar um cluster do HDFS ou outro sistema de arquivos para usar o Cloud Bigtable. Se a instância usar replicação, o Cloud Bigtable manterá uma cópia dos dados no Colossus para cada cluster na instância. Cada cópia está localizada em uma zona ou região diferente, aumentando ainda mais a durabilidade.

Internamente, o Google usa métodos de armazenamento reservados para que os dados tenham uma durabilidade muito maior do que a oferecida pela replicação tripla do HDFS padrão. Além disso, criamos backups dos dados para protegê-los de eventos catastróficos e possibilitar a recuperação de desastres.

Segurança

O acesso às tabelas do Cloud Bigtable é controlado pelo projeto do Google Cloud Platform e pelos papéis do Cloud Identity e do Access Management atribuídos aos usuários. Por exemplo, atribua papéis do Cloud IAM que impedem os usuários individuais de lerem tabelas, gravarem em tabelas ou criarem novas instâncias. Caso alguém não tenha acesso ao projeto ou não tenha um papel do Cloud IAM com permissões apropriadas para o Cloud Bigtable apropriado, ele não pode acessar nenhuma das tabelas.

Gerencie a segurança no nível do projeto e da instância. O Cloud Bigtable não é compatível com restrições de segurança no nível da tabela, coluna ou célula.

Outras opções de armazenamento e banco de dados

O Cloud Bigtable não é um banco de dados relacional. Ele não é compatível com consultas ou mesclagens do SQL nem com transações multilinhas. Além disso, não é a solução ideal para volumes de dados inferiores a 1 TB.

  • Caso precise de compatibilidade total relacionada ao SQL para um sistema de processamento de transações on-line (OLTP, na sigla em inglês), pense em usar o Cloud Spanner ou o Cloud SQL.
  • Se você precisa de consultas interativas em um sistema de processamento analítico online (OLAP, na sigla em inglês), pense em usar o BigQuery.
  • Se você precisa armazenar blobs imutáveis maiores que 10 MB, como imagens ou filmes, pense em usar o Cloud Storage.
  • Caso você precise armazenar objetos altamente estruturados em um banco de dados do documento, com suporte para transações ACID e consultas semelhantes a SQL, considere o Cloud Datastore.

Para saber mais sobre outras opções de bancos de dados, consulte a visão geral dos serviços de bancos de dados (em inglês).

Próximas etapas

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Cloud Bigtable