Azure Table Storage e o NoSQL - Cluster e DHT

Cloud Computing & Microsoft Azure & Microsoft Azure Storage

Dando prosseguimento a esta mini-série, veremos alguns conceitos sobre cluster e DHT. No primeiro momento você pode se perguntar: Sou um desenvolvedor, só quero saber como criar um CRUD no Azure então para que tudo isso? O fato é estes pontos são a base desta estrutura, que levaram a evolução inevitável de se pensar em nuvem. Na verdade são conceitos que justificam toda a computação na nuvem mais vamos focar no Azure Table Service.

A computação na nuvem acontece de maneira distribuída semelhante a um grid ou cluster. Também devido a esta "maneira" distribuída é que topamos com estruturas como a do ATS, Queues e Blobs no caso do Azure. O próprio SQL Databases (antigo SQL Azure), possui algumas diferenças em relação a sua versão on-premise. Isto ocorre devido a infra que torna possível a cloud computing. Esta infra surge em resposta a algumas necessidades que veremos nos próximos tópicos.

dthCapa


 

CLUSTER

Podemos definir um cluster como um mecanismo de dois ou mais computadores ou sistemas (chamados de nodos ou nós), que trabalhando em conjunto para a execução de aplicações ou realizando tarefas diversas de tal forma que os usuários tenham a impressão de um recurso único (computador virtual),disponibilizando tudo. Estamos falando na transparência do sistema, que tem como características fundamentais a confiabilidade, distribuição de carga e performance.

Cluster

Um cluster é um tipo de sistema de processamento paralelo que consiste de uma coleção de computadores independentes interconectados através de uma rede, trabalhando cooperativamente como um único e integrado recurso computacional.      

A unidade básica do cluster é um único computador, chamado de nó ou nodo. Podemos aumentar um cluster simplesmente adicionando outras máquinas. O cluster como um todo será mais poderoso quanto mais rápidos forem os seu computadores individualmente e quanto mais rápida for a rede de interconexão que os conecta.

A ideia por detrás do uso de clusters é espalhar as cargas entre todos os computadores disponíveis, usando ao máximo os recursos que estão livres nas máquinas.

Basicamente existem 3 tipos de clusters:

  • Tolerância à falhas / Alta Disponibilidade (High Availability (HA) and Failover)
    1. Estes modelos de clusters são construídos para prover uma disponibilidade de serviços e recursos de forma ininterruptas através do uso da redundância implícitas ao sistema
    2. A ideia geral é que se um nó do cluster vier a falhar (failover), aplicações ou serviços possam estar disponíveis em outro nó
    3. Utilizados para base de dados de missões críticas, correio, servidores de arquivos e aplicações
  • Balanceamento de Carga (Load Balancing)
    1. Este modelo distribui o tráfego entrante ou requisições de recursos provenientes dos nodos que executam os mesmos programas entre as máquinas que compõem o cluster
    2. Todos os nodos estão responsáveis em controlar os pedidos. Se um nó falhar, as requisições são redistribuídas entre os nós disponíveis no momento.
    3. Este tipo de solução é normalmente utilizado em fazendas de servidores de web (web farms)
  • Computação de Alto Desempenho

 

Maiores Desafios

  • Escalabilidade (física e da aplicação)
  • Disponibilidade (gerenciamento de falhas)
  • Imagem Única do Sistema (parecer ao usuário único sistema em execução)
  • Comunicação Rápida (redes e protocolos de comunicação)
  • Balanceamento de Carga (CPU, Rede, Memória, Discos)
  • Segurança e Encriptação
  • Gerenciabilidade (administração e controle)
  • Programabilidade (API simples)
  • Aplicabilidade (aplicações voltadas para o cluster)

 

Por que utilizar cluster?

  • Quanto mais computadores na rede mais rápido fica sua estrutura (se você implementar da maneira correta ok?)
  • Maior agilidade no processamento
  • Componentes de fácil disponibilidade
  • Fácil manutenção - A manutenção geralmente fica por conta do grupo de usuários, que ganha com experiência e economia de recursos
  • Independência de fornecedores de hardware
  • Custos muito baixos
  • Se um computador do sistema parar não precisa esperar seu conserto para continuar seu trabalho
  • Disponibilidade de sistema operacional e ferramentas de apoio gratuitas
  • Uma configuração inicial pode ser facilmente atualizada, sem desperdício de investimento

 

DTH - Distributed Hash Table

As pesquisas em DHT surgiram originalmente motivadas pelos sistemas peer-to-peer. O DTH surge da uma necessidade em se obter e alocar informações de uma maneira descentralizada, escalável, balanceada e de excelente performance. Estamos falando da era que antecede a famosa explosão de dados que vivemos hoje.

Assim como o DNS tornou-se uma necessidade [já que em 1983 já existiam milhões de hosts na Internet], o P2P [peer-to-peer] é o resultado de uma tendência natural do desenvolvimento da engenharia de software em relação a disponibilidade de tecnologia para a criação de redes maiores. Não cabe aqui falar sobre a importância ou influência do P2P para a computação na nuvem mas sim do mecanismo que tornou isso possível: Distributed Hash Table.

No mundo da descentralização, DTHs tiveram um efeito revolucionário com uma arquitetura de topologia emergente, propriedade demonstrável e excelente desempenho.

A DTH formam infra-estruturas que provisionam um serviço de lookup semelhante a já conhecida tabela HASH ( um sistema que funciona em pares CHAVE-VALOR), que são armazenados de forma a qualquer nó participante possa recuperar de forma eficiente o valor associado a uma determinada chave. A responsabilidade de manter o mapeamento de chaves para valores é distribuída entre os nós de maneira que as mudanças causem o mínimo possível de desordem. Com isso as DTHs escalam um número extremamente grande de nós e gerenciam chegadas, saídas e falhas contínuas.

Observe a imagem abaixo:

DTH1

 

Aqui, cada posição de uma tabela hash normal é um peer e este é o responsável por ter o objeto que sofrerá ação. Na imagem acima, quando o usuário invoca uma operação sobre um objeto, a requisição chega a camada de roteamento já com o GUID do objeto. A camada de roteamento faz o search e encaminha a requisição até encontrar o nó com o objeto e realizar a operação.

No modelo DHT, a GUID do objeto é gerada com uma função hash, usada para determinar o posicionamento e a localização, por isso, esses sistemas que usam uma camada de roteamento são conhecidos como tabelas hash distribuídas. Com isso, há três operações básicas, put (GUID, dados) para armazenar, remove (GUID) para remover todas as referências do objeto e get (GUID) para recuperar o objeto de um dos nós que o armazena.

Agora, o interessante de tudo isso são as buscas. Como se busca numa DHT? É ai que a mágica toda acontece. Não vou abordar sobre isso já que estamos vendo apenas alguns conceitos para fortalecer nossa consciência de cloud computing, mas vale a pena dar uma olhada melhor em tempo oportuno.

DHTs são usadas para construir serviços complexos com sistemas de arquivos distribuídos, compartilhamento de arquivos peer-to-peer, web caching, multcast, mensageria dentre outros. Algum destes serviços te lembra algo em relação ao Azure? Não é simples coincidência.

 

Nos próximos posts vamos continuar vendo sobre alguns dos mecanismos que tornaram a cloud computing possível e sua influência sobre o serviços de storage na nuvem.


Author's profile picture

Vitor is a computer scientist who is passionate about creating software that will positively change the world we live in.

MVP Azure - Cloud Architect - Data science enthusiast


7 minutes to read