Sistema de arquivos distribuído para nuvem - Distributed file system for cloud

Um sistema de arquivos distribuído para nuvem é um sistema de arquivos que permite que muitos clientes tenham acesso aos dados e oferece suporte a operações (criar, excluir, modificar, ler, gravar) nesses dados. Cada arquivo de dados pode ser particionado em várias partes chamadas chunks . Cada trecho pode ser armazenado em diferentes máquinas remotas, facilitando a execução paralela de aplicativos. Normalmente, os dados são armazenados em arquivos em uma árvore hierárquica , onde os nós representam diretórios. Existem várias maneiras de compartilhar arquivos em uma arquitetura distribuída: cada solução deve ser adequada para um determinado tipo de aplicativo, dependendo da complexidade do aplicativo. Enquanto isso, a segurança do sistema deve ser garantida. Confidencialidade , disponibilidade e integridade são as principais chaves para um sistema seguro.

Os usuários podem compartilhar recursos de computação através da Internet graças à computação em nuvem, que normalmente é caracterizada por recursos escaláveis e elásticos - como servidores físicos , aplicativos e quaisquer serviços que são virtualizados e alocados dinamicamente. A sincronização é necessária para garantir que todos os dispositivos estejam atualizados.

Os sistemas de arquivos distribuídos permitem que muitas empresas de grande, médio e pequeno porte armazenem e acessem seus dados remotos da mesma forma que fazem com os dados locais, facilitando o uso de recursos variáveis.

Visão geral

História

Hoje, existem muitas implementações de sistemas de arquivos distribuídos. Os primeiros servidores de arquivos foram desenvolvidos por pesquisadores na década de 1970. O Network File System da Sun Microsystem tornou-se disponível na década de 1980. Antes disso, as pessoas que desejavam compartilhar arquivos usavam o método sneakernet , transportando fisicamente os arquivos na mídia de armazenamento de um lugar para outro. Depois que as redes de computadores começaram a proliferar, tornou-se óbvio que os sistemas de arquivos existentes tinham muitas limitações e eram inadequados para ambientes multiusuário. Os usuários inicialmente usaram o FTP para compartilhar arquivos. O FTP foi executado pela primeira vez no PDP-10 no final de 1973. Mesmo com o FTP, os arquivos precisavam ser copiados do computador de origem para um servidor e, em seguida, do servidor para o computador de destino. Os usuários deveriam saber os endereços físicos de todos os computadores envolvidos no compartilhamento de arquivos.

Técnicas de apoio

Os data centers modernos devem oferecer suporte a ambientes grandes e heterogêneos, consistindo em um grande número de computadores de capacidades variadas. A computação em nuvem coordena a operação de todos esses sistemas, com técnicas como rede de data center (DCN), a estrutura MapReduce , que oferece suporte a aplicativos de computação com uso intensivo de dados em sistemas paralelos e distribuídos e técnicas de virtualização que fornecem alocação dinâmica de recursos, permitindo operação múltipla sistemas coexistam no mesmo servidor físico.

Formulários

A computação em nuvem oferece computação em grande escala graças à sua capacidade de fornecer os recursos de CPU e armazenamento necessários ao usuário com total transparência. Isso torna a computação em nuvem particularmente adequada para oferecer suporte a diferentes tipos de aplicativos que requerem processamento distribuído em grande escala. Essa computação com uso intensivo de dados precisa de um sistema de arquivos de alto desempenho que pode compartilhar dados entre máquinas virtuais (VM).

A computação em nuvem aloca dinamicamente os recursos necessários, liberando-os assim que uma tarefa é concluída, exigindo que os usuários paguem apenas pelos serviços necessários, geralmente por meio de um contrato de nível de serviço . Paradigmas de computação em nuvem e computação em cluster estão se tornando cada vez mais importantes para o processamento de dados industriais e aplicações científicas, como astronomia e física, que frequentemente requerem a disponibilidade de um grande número de computadores para realizar experimentos.

Arquiteturas

A maioria dos sistemas de arquivos distribuídos são construídos na arquitetura cliente-servidor, mas também existem outras soluções descentralizadas.

Arquitetura cliente-servidor

O Network File System (NFS) usa uma arquitetura cliente-servidor , que permite compartilhar arquivos entre várias máquinas em uma rede como se estivessem localizadas localmente, fornecendo uma visualização padronizada. O protocolo NFS permite que processos de clientes heterogêneos, provavelmente rodando em diferentes máquinas e em diferentes sistemas operacionais, acessem arquivos em um servidor distante, ignorando a localização real dos arquivos. Depender de um único servidor faz com que o protocolo NFS sofra de disponibilidade potencialmente baixa e escalabilidade insuficiente. Usar vários servidores não resolve o problema de disponibilidade, pois cada servidor está trabalhando de forma independente. O modelo de NFS é um serviço de arquivo remoto. Este modelo também é chamado de modelo de acesso remoto, que está em contraste com o modelo de upload / download:

  • Modelo de acesso remoto: Oferece transparência, o cliente tem acesso a um arquivo. Ele envia solicitações para o arquivo remoto (enquanto o arquivo permanece no servidor).
  • Modelo de upload / download: o cliente pode acessar o arquivo apenas localmente. Isso significa que o cliente deve baixar o arquivo, fazer modificações e carregá-lo novamente, para ser usado por outros clientes.

O sistema de arquivos usado pelo NFS é quase igual ao usado pelos sistemas Unix . Os arquivos são organizados hierarquicamente em um gráfico de nomenclatura no qual os diretórios e arquivos são representados por nós.

Arquiteturas baseadas em cluster

Uma arquitetura baseada em cluster ameniza alguns dos problemas nas arquiteturas cliente-servidor, melhorando a execução de aplicativos em paralelo. A técnica usada aqui é a divisão de arquivos: um arquivo é dividido em vários blocos, que são "divididos" em vários servidores de armazenamento. O objetivo é permitir o acesso a diferentes partes de um arquivo em paralelo. Se o aplicativo não se beneficiar dessa técnica, seria mais conveniente armazenar arquivos diferentes em servidores diferentes. No entanto, quando se trata de organizar um sistema de arquivos distribuído para grandes data centers, como Amazon e Google, que oferecem serviços para clientes da web permitindo múltiplas operações (leitura, atualização, exclusão, ...) para um grande número de arquivos distribuídos entre um grande número de computadores, então as soluções baseadas em cluster tornam-se mais benéficas. Observe que ter um grande número de computadores pode significar mais falhas de hardware. Dois dos sistemas de arquivos distribuídos (DFS) mais usados ​​desse tipo são o Google File System (GFS) e o Hadoop Distributed File System (HDFS). Os sistemas de arquivos de ambos são implementados por processos de nível de usuário rodando em cima de um sistema operacional padrão ( Linux no caso de GFS).

Princípios de design

Metas

O Google File System (GFS) e o Hadoop Distributed File System (HDFS) foram desenvolvidos especificamente para lidar com o processamento em lote em conjuntos de dados muito grandes. Para tanto, devem ser consideradas as seguintes hipóteses:

  • Alta disponibilidade: o cluster pode conter milhares de servidores de arquivos e alguns deles podem estar inativos a qualquer momento
  • Um servidor pertence a um rack, uma sala, um data center, um país e um continente, a fim de identificar com precisão sua localização geográfica
  • O tamanho de um arquivo pode variar de muitos gigabytes a muitos terabytes. O sistema de arquivos deve ser capaz de suportar um grande número de arquivos
  • A necessidade de suportar operações de acréscimo e permitir que o conteúdo do arquivo seja visível mesmo enquanto um arquivo está sendo escrito
  • A comunicação é confiável entre máquinas de trabalho: TCP / IP é usado com uma abstração de comunicação RPC de chamada de procedimento remoto . O TCP permite que o cliente saiba quase imediatamente quando há um problema e a necessidade de fazer uma nova conexão.
Balanceamento de carga

O balanceamento de carga é essencial para uma operação eficiente em ambientes distribuídos. Significa distribuir o trabalho entre diferentes servidores, de forma justa, para que mais trabalho seja feito no mesmo tempo e para atender os clientes com mais rapidez. Em um sistema contendo N chunkservers em uma nuvem (N sendo 1000, 10000 ou mais), onde um certo número de arquivos são armazenados, cada arquivo é dividido em várias partes ou pedaços de tamanho fixo (por exemplo, 64 megabytes), o carga de cada chunkserver sendo proporcional ao número de chunks hospedados pelo servidor. Em uma nuvem com balanceamento de carga, os recursos podem ser usados ​​com eficiência enquanto maximizam o desempenho de aplicativos baseados em MapReduce.

Rebalanceamento de carga

Em um ambiente de computação em nuvem, a falha é a norma e os chunkservers podem ser atualizados, substituídos e adicionados ao sistema. Os arquivos também podem ser criados, excluídos e anexados dinamicamente. Isso leva a um desequilíbrio de carga em um sistema de arquivos distribuído, o que significa que os fragmentos de arquivos não são distribuídos de forma equitativa entre os servidores.

Os sistemas de arquivos distribuídos em nuvens, como GFS e HDFS, contam com servidores ou nós centrais ou principais (Master para GFS e NameNode para HDFS) para gerenciar os metadados e o balanceamento de carga. O mestre reequilibra as réplicas periodicamente: os dados devem ser movidos de um DataNode / chunkserver para outro se o espaço livre no primeiro servidor cair abaixo de um certo limite. No entanto, essa abordagem centralizada pode se tornar um gargalo para esses servidores mestres, se eles se tornarem incapazes de gerenciar um grande número de acessos a arquivos, pois aumenta suas já pesadas cargas. O problema de rebalanceamento de carga é NP-difícil .

A fim de obter um grande número de chunkservers para trabalhar em colaboração e resolver o problema de balanceamento de carga em sistemas de arquivos distribuídos, várias abordagens foram propostas, como realocar os chunks de arquivo para que os chunks possam ser distribuídos o mais uniformemente possível, reduzindo o custo do movimento tanto quanto possível.

Sistema de arquivos do Google

Descrição

O Google, uma das maiores empresas de internet, criou seu próprio sistema de arquivos distribuído, denominado Google File System (GFS), para atender às crescentes demandas das necessidades de processamento de dados do Google, e é usado para todos os serviços em nuvem. GFS é um sistema de arquivos distribuído escalonável para aplicativos de uso intensivo de dados. Ele fornece armazenamento de dados de alto desempenho e tolerante a falhas para um grande número de clientes acessando-o simultaneamente.

O GFS usa MapReduce , que permite aos usuários criar programas e executá-los em várias máquinas sem pensar em paralelização e problemas de balanceamento de carga. A arquitetura GFS é baseada em ter um único servidor mestre para vários chunkservers e vários clientes.

O servidor mestre em execução em um nó dedicado é responsável por coordenar os recursos de armazenamento e gerenciar os metadados dos arquivos (o equivalente a, por exemplo, inodes em sistemas de arquivos clássicos). Cada arquivo é dividido em vários blocos de 64 megabytes. Cada bloco é armazenado em um servidor de bloco. Um bloco é identificado por um identificador de bloco, que é um número de 64 bits globalmente exclusivo atribuído pelo mestre quando o bloco é criado pela primeira vez.

O mestre mantém todos os metadados dos arquivos, incluindo nomes de arquivos, diretórios e o mapeamento de arquivos para a lista de blocos que contêm os dados de cada arquivo. Os metadados são mantidos na memória principal do servidor mestre, junto com o mapeamento dos arquivos em blocos. As atualizações desses dados são registradas em um log de operação no disco. Este log de operação é replicado em máquinas remotas. Quando o log se torna muito grande, um ponto de verificação é feito e os dados da memória principal são armazenados em uma estrutura de árvore B para facilitar o mapeamento de volta para a memória principal.

Tolerância ao erro

Para facilitar a tolerância a falhas , cada bloco é replicado em vários (padrão, três) servidores de bloco. Um chunk está disponível em pelo menos um servidor de chunk. A vantagem desse esquema é a simplicidade. O mestre é responsável por alocar os servidores de chunk para cada chunk e é contatado apenas para informações de metadados. Para todos os outros dados, o cliente deve interagir com os servidores chunk.

O mestre mantém registro de onde um pedaço está localizado. No entanto, ele não tenta manter as localizações dos blocos com precisão, mas apenas ocasionalmente contata os servidores dos blocos para ver quais blocos eles armazenaram. Isso permite escalabilidade e ajuda a evitar gargalos devido ao aumento da carga de trabalho.

No GFS, a maioria dos arquivos é modificada acrescentando-se novos dados e não sobrescrevendo os dados existentes. Depois de gravados, os arquivos geralmente são lidos apenas sequencialmente, em vez de aleatoriamente, e isso torna este DFS o mais adequado para cenários em que muitos arquivos grandes são criados uma vez, mas lidos muitas vezes.

Processamento de arquivo

Quando um cliente deseja gravar / atualizar um arquivo, o mestre atribui uma réplica, que será a réplica primária se for a primeira modificação. O processo de escrita é composto de duas etapas:

  • Envio: primeiro, e de longe o mais importante, o cliente entra em contato com o mestre para descobrir que chunk servidores contêm os dados. O cliente recebe uma lista de réplicas que identificam os servidores do bloco primário e secundário. O cliente então contata o servidor de bloco de réplica mais próximo e envia os dados para ele. Este servidor enviará os dados para o próximo mais próximo, que os encaminha para outra réplica e assim por diante. Os dados são propagados e armazenados em cache na memória, mas ainda não são gravados em um arquivo.
  • Escrita: Quando todas as réplicas tiverem recebido os dados, o cliente envia uma solicitação de escrita ao servidor do chunk primário, identificando os dados que foram enviados na fase de envio. O servidor primário atribuirá um número de sequência às operações de gravação que recebeu, aplicará as gravações ao arquivo na ordem do número de série e encaminhará as solicitações de gravação nessa ordem para os secundários. Enquanto isso, o mestre é mantido fora do loop.

Consequentemente, podemos diferenciar dois tipos de fluxos: o fluxo de dados e o fluxo de controle. O fluxo de dados está associado à fase de envio e o fluxo de controle à fase de escrita. Isso garante que o servidor do bloco primário assuma o controle da ordem de gravação. Observe que, quando o mestre atribui a operação de gravação a uma réplica, ele incrementa o número da versão do bloco e informa todas as réplicas que contêm esse bloco do novo número da versão. Os números de versão do chunk permitem a detecção de erros de atualização, se uma réplica não foi atualizada porque o servidor do chunk estava inativo.

Alguns novos aplicativos do Google não funcionaram bem com o tamanho do bloco de 64 megabytes. Para resolver esse problema, a GFS começou, em 2004, a implementar a abordagem Bigtable .

Sistema de arquivos distribuído Hadoop

HDFS , desenvolvido pela Apache Software Foundation , é um sistema de arquivos distribuído projetado para armazenar grandes quantidades de dados (terabytes ou mesmo petabytes). Sua arquitetura é semelhante ao GFS, ou seja, uma arquitetura mestre / escravo. O HDFS é normalmente instalado em um cluster de computadores. O conceito de design do Hadoop é informado pelo Google, com Google File System, Google MapReduce e Bigtable , sendo implementado pelo Hadoop Distributed File System (HDFS), Hadoop MapReduce e Hadoop Base (HBase) respectivamente. Como o GFS, o HDFS é adequado para cenários com acesso a arquivos de gravação uma vez, leitura de muitos e suporta acréscimos e truncamentos de arquivos em vez de leituras e gravações aleatórias para simplificar os problemas de coerência de dados.

Um cluster HDFS consiste em um único NameNode e várias máquinas DataNode. O NameNode, um servidor mestre, gerencia e mantém os metadados de DataNodes de armazenamento em sua RAM. Os DataNodes gerenciam o armazenamento anexado aos nós em que são executados. NameNode e DataNode são softwares projetados para serem executados em máquinas de uso diário, que normalmente são executadas em um sistema operacional Linux. O HDFS pode ser executado em qualquer máquina que suporte Java e, portanto, pode executar um NameNode ou o software Datanode.

Em um cluster HDFS, um arquivo é dividido em um ou mais blocos de tamanhos iguais, exceto pela possibilidade de o último bloco ser menor. Cada bloco é armazenado em vários DataNodes e cada um pode ser replicado em vários DataNodes para garantir a disponibilidade. Por padrão, cada bloco é replicado três vezes, um processo denominado "Replicação em nível de bloco".

O NameNode gerencia as operações de namespace do sistema de arquivos, como abrir, fechar e renomear arquivos e diretórios, e regula o acesso aos arquivos. Ele também determina o mapeamento de blocos para DataNodes. Os DataNodes são responsáveis ​​por atender às solicitações de leitura e gravação dos clientes do sistema de arquivos, gerenciar a alocação ou exclusão de blocos e replicar os blocos.

Quando um cliente deseja ler ou gravar dados, ele contata o NameNode e o NameNode verifica de onde os dados devem ser lidos ou gravados. Depois disso, o cliente tem a localização do DataNode e pode enviar solicitações de leitura ou gravação para ele.

O HDFS é tipicamente caracterizado por sua compatibilidade com esquemas de rebalanceamento de dados. Em geral, gerenciar o espaço livre em um DataNode é muito importante. Os dados devem ser movidos de um DataNode para outro, se o espaço livre não for adequado; e, no caso de criar réplicas adicionais, os dados devem ser movidos para garantir o equilíbrio do sistema.

Outros exemplos

Os sistemas de arquivos distribuídos podem ser otimizados para diferentes propósitos. Alguns, como aqueles projetados para serviços de Internet, incluindo GFS, são otimizados para escalabilidade. Outros designs para sistemas de arquivos distribuídos oferecem suporte a aplicativos de alto desempenho geralmente executados em paralelo. Alguns exemplos incluem: MapR File System (MapR-FS), Ceph-FS , Fraunhofer File System (BeeGFS) , Luster File System , IBM General Parallel File System (GPFS) e Parallel Virtual File System .

MapR-FS é um sistema de arquivos distribuído que é a base da Plataforma Convergente MapR, com recursos para armazenamento de arquivos distribuídos, um banco de dados NoSQL com várias APIs e um sistema de streaming de mensagens integrado. MapR-FS é otimizado para escalabilidade, desempenho, confiabilidade e disponibilidade. Sua capacidade de armazenamento de arquivos é compatível com a API do Apache Hadoop Distributed File System (HDFS), mas com várias características de design que o distinguem do HDFS. Entre as diferenças mais notáveis ​​estão que o MapR-FS é um sistema de arquivos totalmente de leitura / gravação com metadados para arquivos e diretórios distribuídos no namespace, portanto, não há NameNode.

Ceph-FS é um sistema de arquivos distribuído que oferece excelente desempenho e confiabilidade. Ele responde aos desafios de lidar com arquivos e diretórios enormes, coordenando a atividade de milhares de discos, fornecendo acesso paralelo a metadados em grande escala, manipulando cargas de trabalho científicas e de uso geral, autenticando e criptografando em grande escala e aumentando ou diminuindo dinamicamente devido ao descomissionamento frequente do dispositivo, falhas do dispositivo e expansões de cluster.

BeeGFS é o sistema de arquivos paralelo de alto desempenho do Fraunhofer Competence Center for High Performance Computing. A arquitetura de metadados distribuídos do BeeGFS foi projetada para fornecer a escalabilidade e flexibilidade necessárias para executar HPC e aplicativos semelhantes com altas demandas de E / S.

O Luster File System foi projetado e implementado para lidar com o problema de gargalos tradicionalmente encontrados em sistemas distribuídos. O Lustre é caracterizado por sua eficiência, escalabilidade e redundância. O GPFS também foi projetado com o objetivo de remover esses gargalos.

Comunicação

O alto desempenho de sistemas de arquivos distribuídos requer comunicação eficiente entre nós de computação e acesso rápido aos sistemas de armazenamento. Operações como abrir, fechar, ler, gravar, enviar e receber precisam ser rápidas para garantir esse desempenho. Por exemplo, cada solicitação de leitura ou gravação acessa o armazenamento em disco, que apresenta latências de busca, rotação e rede.

As operações de comunicação de dados (enviar / receber) transferem dados do buffer do aplicativo para o kernel da máquina, o TCP controlando o processo e sendo implementado no kernel. No entanto, em caso de congestionamento ou erros de rede, o TCP pode não enviar os dados diretamente. Ao transferir dados de um buffer no kernel para o aplicativo, a máquina não lê o fluxo de bytes da máquina remota. Na verdade, o TCP é responsável por armazenar os dados do aplicativo em buffer.

A escolha do tamanho do buffer, para leitura e gravação de arquivos, ou envio e recebimento de arquivos, é feita no nível do aplicativo. O buffer é mantido usando uma lista ligada circular . Ele consiste em um conjunto de BufferNodes. Cada BufferNode possui um DataField. O DataField contém os dados e um ponteiro chamado NextBufferNode que aponta para o próximo BufferNode. Para encontrar a posição atual, dois ponteiros são usados: CurrentBufferNode e EndBufferNode, que representam a posição no BufferNode para as últimas posições de gravação e leitura. Se o BufferNode não tiver espaço livre, ele enviará um sinal de espera ao cliente para aguardar até que haja espaço disponível.

Sincronização baseada em nuvem do sistema de arquivos distribuído

Cada vez mais usuários têm vários dispositivos com conectividade ad hoc. Os conjuntos de dados replicados nesses dispositivos precisam ser sincronizados entre um número arbitrário de servidores. Isso é útil para backups e também para operação offline. De fato, quando as condições da rede do usuário não são boas, o dispositivo do usuário irá replicar seletivamente uma parte dos dados que serão modificados posteriormente e off-line. Assim que as condições da rede se tornarem boas, o dispositivo será sincronizado. Existem duas abordagens para lidar com o problema de sincronização distribuída: sincronização ponto a ponto controlada pelo usuário e sincronização de réplica mestre em nuvem.

  • ponto a ponto controlado pelo usuário: software como o rsync deve ser instalado em todos os computadores dos usuários que contêm seus dados. Os arquivos são sincronizados por sincronização ponto a ponto, onde os usuários devem especificar endereços de rede e parâmetros de sincronização e, portanto, é um processo manual.
  • sincronização mestre-réplica em nuvem: amplamente utilizada por serviços em nuvem, em que uma réplica mestre é mantida na nuvem, e todas as atualizações e operações de sincronização são para esta cópia mestre, oferecendo um alto nível de disponibilidade e confiabilidade em caso de falhas.

Chaves de segurança

Na computação em nuvem, os conceitos de segurança mais importantes são confidencialidade , integridade e disponibilidade (" CIA "). A confidencialidade torna-se indispensável para evitar a divulgação de dados privados. A integridade garante que os dados não sejam corrompidos.

Confidencialidade

Confidencialidade significa que os dados e as tarefas de computação são confidenciais: nem o provedor de nuvem nem outros clientes podem acessar os dados do cliente. Muitas pesquisas têm sido feitas sobre a confidencialidade, pois é um dos pontos cruciais que ainda apresenta desafios para a computação em nuvem. A falta de confiança nos provedores de nuvem também é um problema relacionado. A infraestrutura da nuvem deve garantir que os dados dos clientes não sejam acessados ​​por terceiros não autorizados.

O ambiente se tornará inseguro se o provedor de serviços puder fazer o seguinte:

  • localize os dados do consumidor na nuvem
  • acessar e recuperar dados do consumidor
  • compreender o significado dos dados (tipos de dados, funcionalidades e interfaces da aplicação e formato dos dados).

A localização geográfica dos dados ajuda a determinar a privacidade e a confidencialidade. A localização dos clientes deve ser levada em consideração. Por exemplo, clientes na Europa não terão interesse em usar datacenters localizados nos Estados Unidos, pois isso afeta a garantia da confidencialidade dos dados. Para lidar com esse problema, alguns fornecedores de computação em nuvem incluíram a localização geográfica do host como parâmetro do acordo de nível de serviço feito com o cliente, permitindo que os próprios usuários escolham as localizações dos servidores que hospedarão seus dados.

Outra abordagem à confidencialidade envolve a criptografia de dados. Caso contrário, haverá um sério risco de uso não autorizado. Existe uma variedade de soluções, como criptografar apenas dados confidenciais e suportar apenas algumas operações, a fim de simplificar a computação. Além disso, técnicas e ferramentas criptográficas como FHE , são utilizadas para preservar a privacidade na nuvem.

Integridade

Integridade na computação em nuvem implica integridade de dados , bem como integridade de computação . Tal integridade significa que os dados devem ser armazenados corretamente nos servidores em nuvem e, em caso de falhas ou computação incorreta, que os problemas devem ser detectados.

A integridade dos dados pode ser afetada por eventos maliciosos ou por erros de administração (por exemplo, durante backup e restauração, migração de dados ou alteração de associações em sistemas P2P ).

A integridade é fácil de alcançar usando criptografia (normalmente por meio de código de autenticação de mensagem , ou MACs, em blocos de dados).

Existem mecanismos de verificação que afetam a integridade dos dados. Por exemplo:

  • HAIL (High-Availability and Integrity Layer) é um sistema criptográfico distribuído que permite a um conjunto de servidores provar a um cliente que um arquivo armazenado está intacto e recuperável.
  • Hach PORs (provas de recuperabilidade para arquivos grandes) é baseado em um sistema criptográfico simétrico, onde há apenas uma chave de verificação que deve ser armazenada em um arquivo para melhorar sua integridade. Este método serve para criptografar um arquivo F e então gerar uma string aleatória chamada "sentinela" que deve ser adicionada ao final do arquivo criptografado. O servidor não consegue localizar o sentinela, o que é impossível diferenciar dos outros blocos, então uma pequena mudança indicaria se o arquivo foi alterado ou não.
  • A verificação de PDP (possessão de dados prováveis) é uma classe de métodos eficientes e práticos que fornecem uma maneira eficiente de verificar a integridade dos dados em servidores não confiáveis:
    • PDP: Antes de armazenar os dados em um servidor, o cliente deve armazenar, localmente, alguns metadados. Posteriormente, e sem baixar os dados, o cliente pode solicitar ao servidor que verifique se os dados não foram falsificados. Essa abordagem é usada para dados estáticos.
    • PDP escalável: esta abordagem é baseada em uma chave simétrica, que é mais eficiente do que a criptografia de chave pública. Ele suporta algumas operações dinâmicas (modificação, exclusão e acréscimo), mas não pode ser usado para verificação pública.
    • PDP dinâmico: esta abordagem estende o modelo PDP para suportar várias operações de atualização, como anexar, inserir, modificar e excluir, o que é adequado para computação intensiva.

Disponibilidade

A disponibilidade geralmente é afetada por replicação . Enquanto isso, a consistência deve ser garantida. No entanto, consistência e disponibilidade não podem ser alcançadas ao mesmo tempo; cada um é priorizado com algum sacrifício do outro. Um equilíbrio deve ser alcançado.

Os dados devem ter uma identidade para serem acessíveis. Por exemplo, Skute é um mecanismo baseado no armazenamento de chave / valor que permite a alocação dinâmica de dados de forma eficiente. Cada servidor deve ser identificado por uma etiqueta no formato continente-país-datacenter-sala-rack-servidor. O servidor pode fazer referência a vários nós virtuais, com cada nó tendo uma seleção de dados (ou várias partições de vários dados). Cada parte dos dados é identificada por um espaço de chave que é gerado por uma função hash criptográfica unilateral (por exemplo, MD5 ) e é localizado pelo valor da função hash desta chave. O espaço de chave pode ser particionado em várias partições com cada partição referindo-se a um pedaço de dados. Para executar a replicação, os nós virtuais devem ser replicados e referenciados por outros servidores. Para maximizar a durabilidade e disponibilidade dos dados, as réplicas devem ser colocadas em servidores diferentes e cada servidor deve estar em uma localização geográfica diferente, porque a disponibilidade dos dados aumenta com a diversidade geográfica. O processo de replicação inclui uma avaliação da disponibilidade de espaço, que deve estar acima de um determinado limite mínimo em cada servidor chunk. Caso contrário, os dados são replicados para outro servidor chunk. Cada partição, i, tem um valor de disponibilidade representado pela seguinte fórmula:

onde estão os servidores que hospedam as réplicas, e são a confiança dos servidores e (contando com fatores técnicos como componentes de hardware e não técnicos como a situação econômica e política de um país) e a diversidade é a distância geográfica entre e .

A replicação é uma ótima solução para garantir a disponibilidade dos dados, mas custa muito em termos de espaço de memória. DiskReduce é uma versão modificada do HDFS baseada na tecnologia RAID (RAID-5 e RAID-6) e permite a codificação assíncrona de dados replicados. Na verdade, existe um processo em segundo plano que procura dados amplamente replicados e exclui cópias extras após codificá-los. Outra abordagem é substituir a replicação pela codificação de eliminação. Além disso, para garantir a disponibilidade dos dados, existem muitas abordagens que permitem a recuperação dos dados. Na verdade, os dados devem ser codificados e, se forem perdidos, podem ser recuperados de fragmentos que foram construídos durante a fase de codificação. Algumas outras abordagens que aplicam mecanismos diferentes para garantir a disponibilidade são: Código Reed-Solomon do Microsoft Azure e RaidNode para HDFS. Além disso, o Google ainda está trabalhando em uma nova abordagem baseada em um mecanismo de codificação de eliminação.

Não há implementação de RAID para armazenamento em nuvem.

Aspectos econômicos

A economia da computação em nuvem está crescendo rapidamente. O governo dos EUA decidiu gastar 40% de sua taxa composta de crescimento anual (CAGR), estimada em 7 bilhões de dólares até 2015.

Mais e mais empresas têm utilizado a computação em nuvem para gerenciar a enorme quantidade de dados e superar a falta de capacidade de armazenamento, e porque permite que usem esses recursos como um serviço, garantindo que suas necessidades de computação sejam atendidas sem ter que investir em infraestrutura (modelo pré-pago).

Cada provedor de aplicativos tem que pagar periodicamente o custo de cada servidor onde as réplicas de dados são armazenadas. O custo de um servidor é determinado pela qualidade do hardware, as capacidades de armazenamento e seu processamento de consulta e sobrecarga de comunicação. A computação em nuvem permite que os provedores escalem seus serviços de acordo com as demandas do cliente.

O modelo pré-pago também alivia o fardo das empresas iniciantes que desejam se beneficiar de negócios intensivos em computação. A computação em nuvem também oferece uma oportunidade para muitos países do terceiro mundo que, de outra forma, não teriam esses recursos de computação. A computação em nuvem pode diminuir as barreiras de TI à inovação.

Apesar da ampla utilização da computação em nuvem, o compartilhamento eficiente de grandes volumes de dados em uma nuvem não confiável ainda é um desafio.

Referências

Bibliografia

  1. Arquitetura, estrutura e design:
  2. Segurança
  3. Sincronização
    • Uppoor, S; Flouris, MD; Bilas, A (2010). "Sincronização baseada em nuvem de hierarquias de sistemas de arquivos distribuídos". 2010 IEEE International Conference on Cluster Computing Workshops e Posters (CLUSTER WORKSHOPS) . Inst. of Comput. Sci. (ICS), encontrado. para Res. & Technol. - Hellas (FORTH), Heraklion, Grécia. pp. 1–4. doi : 10.1109 / CLUSTERWKSP.2010.5613087 . ISBN 978-1-4244-8395-2. S2CID  14577793 .
  4. Aspectos econômicos
    • Lori M., Kaufman (2009). "Segurança de dados no mundo da computação em nuvem". Segurança e privacidade, IEEE . 7 (4): 161–64. doi : 10.1109 / MSP.2009.87 . S2CID  16233643 .
    • Marston, Sean; Lia, Zhi; Bandyopadhyaya, Subhajyoti; Zhanga, Juheng; Ghalsasi, Anand (2011). Computação em nuvem - a perspectiva do negócio . Decision Support Systems Volume 51, Issue 1. pp. 176–189. doi : 10.1016 / j.dss.2010.12.006 .
    • Angabini, A; Yazdani, N; Mundt, T; Hassani, F (2011). "Adequação da computação em nuvem para aplicativos de análise de dados científicos; um estudo empírico". 2011 Conferência Internacional sobre P2P, Paralela, Grid, Nuvem e Computação na Internet . Sch. of Electr. & Comput. Eng., Univ. de Teerã, Teerã, Irã. pp. 193–199. doi : 10.1109 / 3PGCIC.2011.37 . ISBN 978-1-4577-1448-1. S2CID  13393620 .