Ver Feed RSS

Tecnologia de Redes, Mobilidade e Inovação

Conceitos de computação distribuida: MapReduce e DFS

Avalie este Post de Blog
Os temas de computação distribuída aparecem cada vez mais nas notícias sobre tecnologia de rede, TI e telecomunicações. Porém como qualquer tecnologia nova, esse assunto vem acompanhado de vários conceitos novos e jargões. Com o recente lançamento da versão 1.0 do projeto Apache Hadoop achei interessante apresentar este texto com o objetivo de dar uma visão didática de dois conceitos importantes de computação distribuída: MapReduce e Distributed File System (DFS).

Os conceitos de computação distribuída não são novos. Computação distribuída significa pegar uma tarefa, dividi-la em pedaços menores e dar cada pedaço a um servidor diferente, depois pegar cada resultado, uni-los (de maneira coerente) e apresenta-lo. A principio parece fácil, porém na prática existe problemas importantes que dificultam essa tarefa.

Dificuldades em computação distribuída

Em primeiro lugar precisamos dividir a tarefa em pedaços pequenos, que possam ser distribuídos. Normalmente tarefas grandes e longas são mais apropriadas para computação distribuída, ao contrário de situações aonde você tenha várias tarefas pequenas, que neste caso são mais difíceis de distribuir.

Um exemplo de tarefa fácil de distribuir seria planejar o consumo de água de uma cidade. Divida a cidade em bairros, envie os dados de cada bairro para um servidor diferente calcular (cada servidor toma conta de um bairro), pegue os resultados individuais de cada servidor e some. Pronto! Você tem o consumo de água da cidade.

Agora imagine o cálculo da folha de pagamento de uma grande empresa. Se trata de uma enorme quantidade de informações que precisa ser dividida (até ainda não é complicado) mas que precisa ser transmitida a cada servidor para ser processado. Talvez seja mais demorado e complicado dividir a folha de pagamento para distribuir do que fazer o cálculo em apenas um computador. Na verdade, na prática, é isso mesmo que ocorre: é mais rápido deixar para um computador sozinho fazer do que dividir em vários.

Cloud Computing

Acontece que com a evolução dos conceitos de cloud computing, cada vez mais empresas encontram problemas que são grandes demais para serem tratados de maneira eficiente por apenas um servidor, mas são difíceis de distribuir.

Com o cloud computing é necessário ter a mesma informação em mais de um lugar (por exemplo, para garantir boa confiabilidade) e ter essa informação acessada por vários usuários ao mesmo tempo (grande poder de processamento). Tudo isso sem bagunçar as informações (por exemplo se um usuário mudar os dados de um cliente, todos os demais usuários precisam ter acesso ao novo dado imediatamente).

Assim estão começando a surgir projetos como o Hadoop para auxiliar a desenvolver esse tipo de solução. Repare que o Hadoop não é uma aplicação pronta. Isso quer dizer que não adianta você baixar o Hadoop, instalar e ver algo de útil acontecer. Não vai acontecer nada. Você precisa aprender a usa-lo, desenvolver a sua aplicação (ou mudar a aplicação que você já tem hoje), juntar tudo isso e então daí terá algo útil.

Então o Hadoop é um framework, como as armações de aço que se usa na construção civil, que depois recebe o concreto, portas, janelas e decoração. As armações de aço de um prédio não servem para nada sem "o resto", mas são a base para começar qualquer andar do edifício.

Assim o Hadoop é um framework para facilitar o desenvolvimento de aplicações distribuídas. E dentro desse framework existem essas duas funcionalidades importante: MapReduce e DFS

Distributed File System (DFS)

Um sistema de arquivos significa uma série de funções prontas disponíveis para gerenciar o armazenamento de informações. A aplicação (quer seja um servidor de email, CRM, servidor web, etc.) pede um arquivo e o sistema de arquivos o encontra. A aplicação não se preocupa aonde o arquivo está, apenas pede e recebe.

Dentro de um sistema de aplicação distribuída ter um sistema de arquivos distribuídos significa ter esses arquivos espalhados em vários servidores. Primeiro por questões de confiabilidade (se um servidor cair, haverá cópias dessa informação nos demais), depois por performance (ter a informação espalhada em vários locais permite com que a aplicação vá ao servidor que dará melhor performance).

O Hadoop toma conta dos dois lados: permite a criação de servidores de arquivos distribuídos e dá ao programador da aplicação funções que acessam facilmente esses servidores.

Como não poderia deixar de ser, o sistema de arquivos distribuídos do Hadoop se chama Hadoop Distributed File System (HDFS).

MapReduce

O MapReduce é um conceito criado pela equipe do Google em 2004. Em termo simples, são funções que ajudam a dividir uma tarefa em pedaços menores e dividi-las apropriadamente entre vários servidores.

Assim o framework de MapReduce do Hadoop permite a criação de servidores para receberem esses pedaços de tarefa além de dar ao programador facilidades para dividir as tarefas, envia-las a esses servidores, coletar os resultado (que as vezes podem demorar para retornar) e processar na forma de uma resposta única.

Resumo

O Hadoop não é uma ferramenta mágica que resolve todos os problemas de computação distribuída. Com ou sem Hadoop, ainda existem tarefas que são difíceis ou inviáveis de serem distribuídas. Porém com o Hadoop (e outros frameworks equivalentes que estão sendo desenvolvidos) a quantidade de tarefas "distribuíveis" aumenta pois fica mais fácil fazer, já que o framework resolve muito dos problemas.

Eu não duvido que em breve, mesmo tarefas que não são adequadas para processamento distribuído sejam forçadamente distribuídas por questões como confiabilidade, mesmo demorando mais para a tarefa ser finalizada em modo distribuído.

Me acompanhe no Twitter: http://www.twitter.com/mlrodrig

.
Categorias
Não Categorizado

Comentários

  1. Avatar de JorgeAldo
    Estou desenvolvendo em FreePascal (Tambem deverá funcionar em Delphi) um sistema de computação distribuída, que tira proveito tanto dos computadores multi-core atuais, quanto de clouds do tipo "beowulf clusters"...

    O projeto é baseado no conceito de Carl Hewitt chamado Actor Model Concurrency, chama-se Pascal Actor Model, sendo orientado a objetos e bastante flexível.

    A versão V2 está aqui :

    [url]https://code.google.com/p/pascal-actor-model/[/url]

    mas essa versão contem um defeito fundamental de projeto que eu resolvi agora na versão V3.

+ Enviar Comentário