Vamos falar de CosmosDB?


O que é

O Azure Cosmos DB é um serviço de dados distribuído com suporte nativo para o NoSQL do Microsoft Azure. Como assim, NoSQL? O Cosmos DB oferece suporte nativo a opções do NoSQL, vários modelos de consistência bem definidos, garantindo latências de um dígito de milissegundo no 99º percentil e alta disponibilidade com funcionalidades de hospedagem múltipla e baixas latências em qualquer lugar no mundo, tudo com suporte por SLAs. 

O Cosmos DB foi projetado para rodar na nuvem, ou seja, está pronto para solucionar problemas de escalabilidade e, principalmente, está pronto para ser extremamente rápido! Para escalar uma aplicação no Cosmos DB não são necessários mais do que alguns cliques. 

Para você ter uma ideia de como ele foi pensado desde o início para ser rápido e moderno, basta observar que ele também funciona com tecnologias Open Source como react e Node.js, por exemplo. React, como vocês já sabem, é uma linguagem de programação voltada ao paradigma de programação reativa, que é um paradigma voltado para resolver questões de performance de aplicações mobile. 

Distribuição Global 

Garantias

Anteriormente falamos sobre consistências bem definidas, garantias de latência, de alta disponibilidade, funcionalidades de hospedagem múltiplas e baixas latências em qualquer lugar. Agora vamos explicar um pouco melhor isso. 

Consistência 

O Cosmos DB oferece um modelo de programação bem definido, o que permite que a interpretação da consistência dos dados replicados seja simples. Assim, para desenvolver aplicações que estejam hospedadas em mais de um lugar, os modelos de consistência do Cosmos DB foram desenvolvidos para trabalharem de forma independente da região e, também, independentes da região na qual as leituras e gravações são feitas. Independência, é a palavra, afinal, estamos falando de um sistema de banco de dados distribuído com suporte nativo para o NoSQL. 

O nível de consistência vem predefinido, porém, ele é personalizável, e pode ser determinado pelo desenvolvedor da aplicação. Isso graças ao SLA de consistência do Azure Cosmos DB. Uma requisição de leitura só é considerada finalizada, se todos as garantias de consistência associadas com o nível de consistência determinado são satisfeitas. 

Se você quiser entender um pouco mais como funcionam as relações entre consistência e disponibilidade, latência e taxa de transferência, pode acessar a documentação aqui. 

Multimodelo e APIs 

Uma característica um tanto quanto incomum dos bancos de dados é trabalhar com diferentes tipos de dados em um mesmo serviço. O que, atualmente, pode ser considerado uma vantagem. 

Com o Cosmos DB você consegue utilizar chave-valor, grafo, família de colunas e dados de documentos, por exemplo. Além de indexar automaticamente todos estes dados, o Cosmos também te da a liberdade de trabalhar com a API de sua preferência, seja SQL, Javascript, Gremlin, MongoDB, Apache, Cassandra e o armazenamento de tabelas do próprio Azure. 

Se você tem facilidade para desenvolver procedures, triggers e UDFs em Javascript, fique tranquilo. Com o Cosmos DB você pode pensar na lógica da sua aplicação sendo diretamente executada no banco. 

Outra liberdade que o Cosmos DB oferece é a possibilidade de trabalhar com JSON, transações atômicas e encapsulamento. O encapsulamento é algo bem interessante para ser entendido, principalmente se você trabalha com microsserviços e/ou programação reativa. 

O encapsulamento permite armazenar procedures e agrupar a lógica de negócio em um único local, o que nos permite adicionar uma camada de abstração sobre os dados, protegendo nossa aplicação e melhorando sua performance. 

Aplicações 

Vimos algumas vantagens que nos dizem por que o Cosmos DB deve ser uma tecnologia a ser explorada. Para deixar mais claro o modo como o Cosmos DB foi pensando, vamos observar alguns cenários. 

IoT e Telemetria 

IoT é um cenário muito interessante para analisarmos a implementação do Cosmos DB e do Azure. Este cenário normalmente é baseado por picos de consumo de dados por meio de sensores. Além disso, estes sensores podem estar distribuídos localmente (uma fábrica), ou em diversas regiões, como uma cidade, por exemplo. O workflow comum de uma aplicação baseada em IoT é: consumo, processamento e análise para geração de resultados em tempo real. 

Por exemplo, você está desenvolvendo um sistema de controle de tráfego. Para tal, você precisa consumir inúmeros dados, como vias interditadas, semáforos, alagamentos, acidentes e congestionamentos. Em seguida estes dados precisam ser processados e analisados em tempo real para que uma atuação nos semáforos ou na CET seja realizada a fim de melhorar as condições do trânsito. 

Este tipo de sistema, por exemplo, pode ser arquitetado com as tecnologias, Azure Cosmos DB, Hub de Eventos do Azure, Stream Anlytics do Azure, Azure Notification Hub, Azure Machine Learning, Azure HDInsights e Power BI. Abaixo segue uma arquitetura bastante simples do workflow destas tecnologias. 

E-commerce 

Outro caso de uso interessante do Cosmos DB é no desenvolvimento de e-commerce. Sabemos que atualmente é muito complicado trabalhar com a normatização dos dados devido aos relacionamentos. Como o Cosmos DB fornece suporte nativo NoSQL, fica fácil entender sua aplicação em um e-commerce. Dentre as possíveis utilizações do Cosmos em e-commerces temos o armazenamento de dados de catálogo e o processamento de pipelines de processamento de pedidos, por exemplo. 

Por conta do compartilhamento de atributos de muitas entidades e da atualização destes atributos, existe uma necessidade de flexibilização dos esquemas e da hierarquização dos dados. 

Vamos experimentar? 

Ademais, o Cosmos DB também é indicado para arquiteturas orientadas a eventos. Se você tiver interesse em desenvolver este tipo de aplicação, ou simplesmente tiver curiosidade de como o Cosmos DB trabalha com outras tecnologias, pode acessar este artigo sobre programação reativa com Cosmos DB, ou estes vídeos sobre como desenvolver uma aplicação React, Node.js e Cosmos DB. 

Bom, esperamos que com este artigo tenhamos explicado para vocês algumas funcionalidades do Cosmos DB e instigado a curiosidade sobre as possibilidades desta ferramenta. Fique atento ao conteúdo do Microsoft Tech para mais informações desta e de outras tecnologias. 


Autor: Microsoft Tech