Mover uma aplicação para o armazenamento de tabelas do Azure Cosmos DB

Concluído

As empresas que utilizam tabelas de Armazenamento do Azure para aplicações críticas para a empresa podem achar que o Azure Cosmos DB oferece um melhor serviço para as suas necessidades.

Suponha que a sua base de dados de lentes, que está implementada em tabelas de Armazenamento do Azure, tem funcionado bem. A empresa expandiu-se recentemente para vários países novos e descobriu que o desempenho da base de dados nem sempre é tão bom nesses países como é no seu. O seu diretor técnico pediu-lhe para determinar se existe uma forma de eliminar estes problemas sem reescrever a aplicação que utiliza a base de dados.

Aqui, ficará a saber como o Azure Cosmos DB oferece uma alternativa mais dimensionável para tabelas de Armazenamento do Azure e não exige que os programadores reescrevam o código.

Funcionalidades de tabelas de Armazenamento do Azure

O Armazenamento do Azure é um serviço que fornece os seguintes serviços de dados:

Serviço de Dados Descrição
Armazenamento de blobs Armazenar, proteger e aceder a Objetos Binários Grandes (Blobs). Os Blobs podem ser qualquer ficheiro e este serviço é frequentemente utilizado com imagens, vídeos e outros tipos de multimédia.
Armazenamento de filas Armazenar mensagens numa fila para organizar as comunicações entre sistemas. As filas ajudam a melhorar as comunicações, porque as mensagens não se perdem em momentos de procura elevada. A fila pode aumentar, mas o componente recetor continua a receber e a processar as mensagens até conseguir acompanhar.
Armazenamento de ficheiros Armazenar ficheiros em partilhas de ficheiros na cloud para aceder com o protocolo SMB (Server Message Block).
Armazenamento de tabelas Armazenar dados numa base de dados NoSQL para dar suporte a aplicações.

Neste módulo, vamos concentrar-nos nas tabelas de Armazenamento do Azure. Este serviço oferece uma forma de armazenar dados semiestruturados na cloud. Os dados estão altamente disponíveis para os clientes porque são replicados para vários nós ou localizações.

As tabelas de armazenamento são um exemplo de uma base de dados NoSQL. Estas bases de dados não impõem um esquema restrito em cada tabela como uma base de dados SQL impõe. Pelo contrário, cada entidade na tabela pode ter um conjunto diferente de propriedades. Cabe-lhe a si garantir que essas propriedades estão organizadas e certificar-se de que as aplicações que consultam os dados podem trabalhar com resultados que podem ter valores diferentes. Uma das principais vantagens desta abordagem semiestruturada aos dados é o facto de a base de dados poder evoluir mais rapidamente para fazer face às necessidades comerciais.

Nota

Numa tabela NoSQL, uma entidade é o equivalente a uma linha numa tabela de base de dados relacional.

As tabelas no Armazenamento do Azure podem ser dimensionadas para grandes quantidades de dados. É possível armazenar qualquer número de tabelas e qualquer número de entidades numa tabela. Os únicos limites são a capacidade da conta de armazenamento, que depende do tipo de conta de armazenamento que criou. Por exemplo, uma conta de armazenamento standard pode armazenar 2 PB de dados em datacenters dos EUA e da Europa ou 500 TB noutras localizações.

As contas de armazenamento do Azure replicam dados para várias localizações para garantir elevada disponibilidade. Pode escolher entre os seguintes tipos de replicação numa conta de armazenamento:

Tipo de Replicação Descrição
Armazenamento localmente redundante Os dados são replicados para uma unidade de escala de armazenamento diferente com o mesmo datacenter. Estes dados permanecem disponíveis se um único nó falhar no datacenter. Os dados podem ficar indisponíveis se um datacenter inteiro falhar.
Armazenamento com redundância entre zonas Os dados são replicados para três clusters de armazenamento numa única região. Estes dados permanecem disponíveis se um único datacenter falhar. Os dados podem ficar indisponíveis se existir uma falha em toda a região.
Armazenamento georredundante Os dados são replicados para uma região secundária, centenas ou milhares de quilómetros de distância da região primária. Estes dados permanecem disponíveis mesmo que exista uma falha em toda a região.
Armazenamento georredundante com acesso de leitura Os dados são replicados para uma região secundária, onde ficam disponíveis para os clientes lerem. Pode utilizar esta replicação para fornecer uma origem de dados que esteja mais próxima dos utilizadores do que a primária. Os dados mais próximos podem melhorar o desempenho ao evitar a necessidade de ler dados a partir de centenas ou milhares de quilómetros de distância.

Nota

Com o armazenamento georredundante, os dados na região secundária não são legíveis, a menos que uma falha faça com que o Azure efetue a ativação pós-falha para essa região. Em circunstâncias normais, todos os clientes têm de ligar à região primária para aceder aos dados.

Funcionalidades do Azure Cosmos DB

O Azure Cosmos DB é o serviço de base de dados com vários modelos, distribuído globalmente, da Microsoft com o Azure.

Com vários modelos significa que pode utilizar um dos muitos métodos de acesso a dados e APIs para ler e escrever dados. Por exemplo, pode utilizar o SQL, mas se preferir uma abordagem NoSQL, pode utilizar o MongoDB, o Cassandra ou o Gremlin. O Azure Cosmos DB inclui a API de Tabelas, o que significa que, se mover os dados das tabelas de Armazenamento do Azure para o Azure Cosmos DB, não é necessário reescrever as suas aplicações. Só tem de alterar as respetivas cadeias de ligação.

O Azure Cosmos DB pode replicar dados para acesso de leitura e escrita para várias regiões. Os clientes podem ligar-se a uma réplica local para consultarem e também para modificarem dados, o que não é possível nas tabelas de Armazenamento do Azure.

Diferenças entre as tabelas do Armazenamento do Azure e as tabelas do Azure Cosmos DB

Existem algumas diferenças de comportamento entre as tabelas do Armazenamento do Azure e as tabelas do Azure Cosmos DB a ter em mente se estiver a considerar uma migração. Por exemplo:

  • A capacidade de uma tabela do Azure Cosmos DB é-lhe cobrada assim que for criada, mesmo que essa capacidade não seja utilizada. Esta estrutura de faturação deve-se ao facto de o Azure Cosmos DB utilizar um modelo de capacidade reservada para garantir que os clientes conseguem ler dados durante 10 minutos. Nas tabelas do Armazenamento do Azure, é-lhe cobrada apenas a capacidade utilizada, mas o acesso de leitura é garantido apenas dentro de 10 segundos.
  • Os resultados das consultas do Azure Cosmos DB não são ordenados por chave de partição e chave de linha, uma vez que provêm de tabelas de Armazenamento.
  • As chaves de linha no Azure Cosmos DB estão limitadas a 255 bytes.
  • As operações em lote estão limitadas a 2 MB.
  • O Azure Cosmos DB não suporta a Partilha de Recursos Transversais à Origem (CORS).
  • Os nomes das tabelas são sensíveis às maiúsculas e minúsculas no Azure Cosmos DB. Não são sensíveis às maiúsculas e minúsculas nas tabelas de Armazenamento.

Embora estas diferenças sejam pequenas, deve ter o cuidado de rever as suas aplicações para garantir que uma migração não causa problemas inesperados.

Como escolher uma localização de armazenamento

Cada organização tem prioridades diferentes para o seu sistema de base de dados NoSQL. Depois de identificar essas prioridades, utilize esta tabela para o ajudar a escolher se deve utilizar tabelas do Armazenamento do Azure ou tabelas do Azure Cosmos DB para manter os dados para as suas aplicações:

Prioridade Tabelas de Armazenamento do Azure Tabelas do Azure Cosmos DB
Latência As respostas são rápidas, mas não existe um tempo de resposta garantido. < 10 ms para leituras, < 15 ms para escritas.
Débito Máximo de 20 000 operações/seg Sem limite superior em relação ao débito. Mais de 10 milhões de operações/seg/tabela.
Distribuição global Região única para escritas. É possível uma região secundária só de leitura com a replicação georredundante com acesso de leitura. Replicação de dados para leitura e escrita em mais de 30 regiões.
Índices Uma única chave primária na chave de partição e na chave de linha. Não existem outros índices. Os índices são criados automaticamente em todas as propriedades.
Consistência de dados Forte na região primária. Se estiver a utilizar a replicação georredundante com acesso de leitura, poderá demorar tempo até que as alterações cheguem à região secundária. Pode escolher de entre cinco níveis de consistência diferentes consoante as suas necessidades de disponibilidade, latência, débito e consistência.
Preços Otimizados para armazenamento. Otimizados para débito.
SLAs 99,99% de disponibilidade. 99,99% de disponibilidade para bases de dados de região única e consistência flexível. 99,999% de disponibilidade para bases de dados com várias regiões.

Como migrar uma aplicação para o Azure Cosmos DB

Se decidiu migrar para o Azure Cosmos DB e, atualmente, tem dados numa ou mais tabelas do Armazenamento do Azure, tem de considerar como mover esses dados para o Azure Cosmos DB. A Microsoft fornece duas ferramentas para realizar esta tarefa:

  • Ferramenta de Migração de Dados do Azure Cosmos DB. Esta ferramenta open source foi concebida especificamente para importar dados para o Azure Cosmos DB a partir de muitas origens diferentes, incluindo tabelas no Armazenamento do Azure, bases de dados SQL, MongoDB, ficheiros de texto nos formatos JSON e CSV, HBase e outras bases de dados. A ferramenta tem uma versão de linha de comandos e uma versão de GUI. O utilizador fornece as cadeias de ligação para a origem de dados e o destino do Azure Cosmos DB, e pode filtrar os dados antes da migração.

  • AzCopy. Esta ferramenta única de linha de comandos foi concebida para permitir que os programadores copiem dados de e para contas de Armazenamento do Azure. O processo tem duas fases:

    • Exporte os dados da origem para um ficheiro local.

    • Importe a partir desse ficheiro local para uma base de dados no Cosmos, especificando a base de dados de destino com o respetivo URL e chave de acesso.

A Ferramenta de Migração de Dados.