Papo de Arquiteto: construindo aplicações de MapReduce no Windows Azure

Olá pessoal, tudo certo?

Imagine o seguinte cenário: você precisa submeter 100 mil e-mails em 1 hora, para uma campanha de Marketing bem agressiva. Para esse envio, cada e-mail ainda exige um pequeno processamento ou cálculo, antes de submeter a mensagem. A lista de e-mails lhe foi dada em formato texto, com 1 coluna apenas com os diversos e-mails para destino. Você está considerando que todos os e-mails são válidos, não precisando fazer qualquer checagem.

O que você faria?

Podemos pensar em algumas soluções como o uso de LINQ to HPC, já ouviu falar?

image

Fonte: INTRODUCING LINQ TO HPC - PROCESSING BIG DATA ON WINDOWS, DAVID CHAPPELL, MAY 2011

Introducing LINQ to HPC: Processing Big Data on Windows
Ref.: https://www.microsoft.com/download/en/details.aspx?id=13615

Claro, podemos usar outras soluções para o envio de tantos e-mails em pouco tempo, mas a ideia de usar MapReduce é tentadora.

O LINQ to HPC é bem explicado no documento acima, escrito por David Chappell. Em resumo, o modelo de MapReduce é utilizado e pode ser uma alternativa para nosso caso, onde um Job Scheduler é chamado, recebendo a lista de e-mails para processamento. Na sequencia, a lista é quebrada em blocos de processamento, cada um enviado para um novo Nó de Processamento ou Lógica. Esses nós irão demandar o uso de nós computacionais para o processamento. Para cenários de processamento mais intensos que apenas mandar e-mails, com certeza o modelo de HPC é obrigatório. No final, uma Role de consolidação monitora o encerramento de todos os processamentos.

A solução acima é baseada em Windows Server 2008 local, com o HPC em ambiente on-premise.

Agora, pensando essa solução sobre a plataforma Windows Azure, essa semana tivemos uma atualização no projeto Daytona, que permite a construção de soluções de MapReduce sobre a plataforma na nuvem, veja:

image

Project Daytona: Iterative MapReduce on Windows Azure – CTP Refresh (July 26, 2011)
Ref.: https://research.microsoft.com/en-us/downloads/cecba376-3d3f-4eaf-bf01-20983857c2b1/ 

A solução respeita o modelo de MapReduce, onde uma entidade Mestre distribui as Tarefas para entidades Escravas, que fazem o processamento em blocos. Ao final, os resuldados são consolidados por uma entidade de fechamento ou simplesmente o processo é terminado pelas entidades escravas.

O grande interesse aqui está na possibilidade de contratação de máquinas escravas de forma dinâmica, conforme a necessidade, com o poder de processamento oferecido pelos datacenters da plataforma Windows Azure (que em muitos casos é bem maior que o poder de processamento de nossos datacenters corporativos locais).

Esse modeo é muito interessante para diversos cenários de aplicações que exigem o processamento de grandes quantidades de dados. Vale a pena estudar e acompanhar o projeto Daytona, que ainda está em CTP para o Windows Azure.

Por enquanto é só! Até o próximo post :)

Waldemir.