A plataforma de banco de dados em nuvem da Microsoft é atualizada para melhorar o desempenho de sistemas distribuídos em escala global

Construir sistemas distribuídos é difícil. Quando você está trabalhando com aplicativos que abrangem um planeta, a velocidade da luz é um freio para o que você deseja fazer, complicando a replicação de dados entre servidores e serviços. Alguém compra um widget em Hong Kong quase ao mesmo tempo que alguém em Paris, mas há apenas um em estoque. Como você sabe com quem faturar e quem deve informar a compra? Qual compra acaba sendo a registrada em suas ferramentas de linha de negócios?

O Azure como uma plataforma de sistemas distribuídos

As unidades Azure da Microsoft funcionam em design de sistema distribuído, fornecendo serviços construídos em torno de microsserviços sem estado. O gerenciamento de aplicativos que funcionam nessa malha exige duas coisas: uma maneira eficiente de lidar com o tráfego de mensagens e uma maneira de lidar com dados distribuídos em escala.

O trabalho da Microsoft Research em sua estrutura de atores virtuais Orleans lida com o lado de mensagens da equação, tanto em serviços como o Xbox e como base para os padrões de ator / mensagem usados ​​no Azure Service Fabric . Enquanto isso, o lado dos dados é tratado pelo Cosmos DB, o banco de dados distribuído em escala global da Microsoft.

O Cosmos DB é um trabalho fascinante, especialmente quando você o vê como uma implementação prática de alguns conceitos complexos de ciência da computação. Em vez de oferecer apenas modelos de consistência eventual ou forte, como outros sistemas em escala de nuvem, ele oferece um equilíbrio entre exatidão e latência com três outros modelos que mapeiam mais de perto os padrões e intenções do design do aplicativo. Todos os cinco modelos de consistência têm altos níveis de serviço, replicando dados rapidamente entre diferentes instâncias e reduzindo o risco de conflitos. São esses conflitos que causam problemas como várias compras do mesmo item, problemas que não podem afetar sua empresa.

Suporte a multiple-master chega ao Cosmos DB

Até recentemente, os conflitos eram tratados apenas permitindo gravações em uma única região, permitindo leituras de toda a rede. Agora, no entanto, o Cosmos DB pode manipular a operação em um modo de multiple-master , com gravações em várias regiões. Isso torna o serviço muito mais escalonável, porque as atualizações são tratadas pela rede do Cosmos DB como um todo – enquanto ainda suportam os modelos de consistência do serviço. Os aplicativos podem gravar dados no nó mais próximo, reduzindo a latência, enquanto o Cosmos DB mantém seus SLAs existentes, portanto, não deve haver alteração na rapidez com que esses dados podem ser lidos.

Onde as coisas ficam interessantes é quando você começa a ver como o Cosmos DB lida com a resolução de conflitos, quando você pode escrever em qualquer réplica a qualquer momento. Como todos os bancos de dados, ele precisa lidar com três tipos de conflito: inserir, substituir e excluir. Os conflitos de inserção ocorrem quando um registro é inserido ao mesmo tempo em várias regiões, com o mesmo índice. Substituir conflitos são semelhantes, embora os registros existentes aqui sejam atualizados. Da mesma forma, os conflitos de exclusão podem ocorrer se um registro for excluído de uma região e atualizado de outros.

Lidando com resolução de conflitos em escala

Para evitar esses conflitos, o Cosmos DB implementa três mecanismos diferentes: Last Writer Wins, User-Defined Procedures e Asynchronous. Todos os três estão disponíveis para sua API SQL, mas apenas um para suas APIs NoSQL. Você define o modelo que deseja usar ao configurar uma coleção.

A maioria das operações é manipulada por um mecanismo Last Wins Writer (o único método disponível para operações NoSQL). Cada gravação contém um valor numérico que é gerado na gravação, usando funções incorporadas no Cosmos DB e armazenadas no caminho de resolução de conflito da entrada, geralmente um registro de data e hora do servidor que manipula a operação. Se ocorrer um conflito, a operação que possui o maior valor associado a ele ganha, se você estiver inserindo ou atualizando dados. As exclusões sempre vencem, não importa quais dados de resolução de conflitos façam parte da operação. Na prática, é improvável que você tenha operações que tenham o mesmo caminho de resolução de conflito, mas, se o fizerem, o Cosmos DB eventualmente convergirá para um único vencedor, mas não há como prever qual pode ser.

As coisas ficam mais complexas com os outros métodos de resolução de conflitos, e você terá que escrever procedimentos armazenados dentro do Cosmos DB para lidar com eles usando suas funções internas de JavaScript.

O método Procedimentos definidos pelo usuário baseia-se no último gravador ganha para acionar suas próprias ações personalizadas; por exemplo, criar uma coleção que armazene todos os documentos conflitantes antes que outro processo determine qual versão é válida ou armazene automaticamente todas as novas gravações ao aplicar a lógica personalizada às atualizações. Você pode escolher as ações que seu código oferece, dependendo do tipo de dados que você está armazenando e como você espera que ele seja usado. Na prática, é provável que você implemente um modelo semelhante para serviços como o OneDrive, em que um conflito no aplicativo solicita que o usuário tente novamente uma ação ou altere determinadas informações importantes antes que os dados sejam salvos.

O método assíncrono vai um passo além, armazenando todos os conflitos em um feed somente leitura que pode ser processado pelo seu aplicativo. Você acessa o feed de conflito por meio das APIs do CosmosDB e pode aplicar ações diferentes para cada tipo de operação. Ao assumir conflitos e lidar com eles de maneira assíncrona, você mantém a latência o mais baixa possível para a maioria das operações, apenas reduzindo a velocidade quando ocorrem conflitos. O resultado é um fluxo de dados relativamente livre, com conflitos processados ​​conforme seu código pesquisa o feed de conflito e aplica suas regras de resolução de conflito.

Além do desempenho: levando o Cosmos DB para o limite

Então, por que a Microsoft implementou multiple-master no Cosmos DB? A resposta óbvia é o desempenho. Ao permitir que as gravações ocorram o mais próximo possível do usuário, você pode reduzir significativamente a latência. Usando isso com novas ferramentas globais de balanceamento de carga, como o Azure Frontdoor, você pode direcionar automaticamente os dados do usuário para a instância de banco de dados do Cosmos mais próxima. Um usuário do Reino Unido que visita os EUA não precisará enviar dados de volta ao Atlântico, para que você tenha a experiência esperada e mantenha os custos de largura de banda no mínimo.

Há outra perspectiva tentadora: o modo de multiple-master permite que a Microsoft leve o Cosmos DB para a borda da rede. É improvável que você execute o Cosmos DB em seus próprios servidores Windows, mas agora há uma opção para o Azure fazer parte de suas próprias extensões de borda: executando em Azure Stack ou no Azure IoT Edge. Há também a possibilidade de usá-lo como parte de um novo hardware, como a ferramenta de upload de dados do Data Box Edge, processando dados de seus servidores e fazendo o upload para o Cosmos DB como parte de um serviço ETL na nuvem.

Com o Cosmos DB em execução no Azure Stack, você pode carregar rapidamente dados de serviços no local e disponibilizá-los globalmente. Um grande varejista poderia usá-lo para estender seus sistemas de controle de estoque de depósito em seu serviço de e-commerce, dando aos usuários uma idéia melhor da disponibilidade do produto e da entrega esperada. Da mesma forma, uma grande empresa de postos de gasolina poderia usar as instâncias do Cosmos DB para compartilhar rapidamente a telemetria da bomba em toda a organização via IoT Edge.

Com o Cosmos DB, uma ferramenta fundamental para os serviços do Azure, trazê-lo para o limite da rede deve facilitar a criação e implementação desses aplicativos distribuídos complexos.

Fonte: InfoWorld

Todos de TI é a primeira comunidade de profissionais e empresários das Américas dedicada a promover o network no segmento de TI, colaboração e o Desenvolvimento Nacional. O Todos de TI vai ajudar aos profissionais de pequenas e médias empresas a fortalecer seus negócios, oferecendo acesso a uma base clientes, fornecedores e fortalecendo parcerias na sua região e do continente americano, segmentados por Profissionais e Empresas.

%d blogueiros gostam disto: