Opções para processamento distribuído...
Olá pessoal, tudo certo?
Ontem tive uma discussão interessante com o arquiteto da Microsoft Services, Marcos Pedroso. Ele sempre está envolvido em projetos de impacto no mercado, seja pela complexidade ou pelas restrições e SLA’s envolvidos na solução. Grande Pedroso! :)
Uma questão que conversamos foi sobre o uso de um modelo de cloud para cenários de paralelismo e distribuição de processos em cálculos financeiros. Existem mesmo diversos cenários onde patterns como o Map Reduce se aplicam de forma natural. Para quem não conhece, o desenho abaixo ilustra esse pattern, que apesar de antigo, ficou mais conhecido pelo pessoal da Google, quando o utilizaram para processos de search na Web.
Explicando: A idéia é termos um processo master que divide uma massa para processamento entre diversos workers, que executam a tarefa programada em blocos da massa de dados original. Dessa forma, distribuímo o processamento inicial entre diversos nós de computação, gerando um paralelismo na solução. Ao final, os vários resultados são devolvidos para o master, que realiza a consolidação dos resultados. Simples não? Já tive diversos projetos em .NET que fizeram algo parecido, utilizando classes como Threads para a divisão manual dos blocos de processamento entre as diversas threads. Funciona muito bem!
Porém, a implementação manual desse tipo de pattern não é trivial e exige alguns cuidados quando falamos de cenários mais complexos. Como alternativa para a programação manual, podemos usar algumas opções de paralelismo e escalabilidade na plataforma Microsoft.
1) HPC – High Performance Computing
A primeira delas é o HPC – High Performance Computing, que oferece um motor de paralelismo e distribuição de processamento pronto para essa divisão de workers, aproveitando ainda uma infraestrutura de vários processadores (multi-core) ou várias máquinas colocadas. Entre as características do HPC temos a possibilidade de trabalhar com mais de 1000 nós workers, execução sobre o Windows Server 2008 R2, suporte para bancos de dados remotos envolvidos na solução, Job Scheduling (um recurso importante para alguns cenários), etc.
Um desenho que ilustra o cenário de distribuição de processamento com o Microsoft HPC aparece abaixo:
Explicando: o desenho acima ilustra um cenário simples de aplicação do Microsoft HPC, onde vemos a rede privada com os vários nós de computação (Compute Node), coordenados pelo WCF Broker Node, que realiza o papel de Master no modelo Map Reduce. Também vemos o cluster de SQL Server e os demais componentes de infraestrutura da solução, como AD, File Server, System Center e Mail Server.
É um cenário aplicável para diversas empresas e vale muito ser estudado! Para saber mais sobre HPC na plataforma Microsoft, confira:
Ref.: https://www.microsoft.com/hpc/en/us/default.aspx
2) Private Cloud e o Dynamic Data Center Toolkit
Outra opção interessante é a chamada private cloud. Na plataforma Microsoft isso aparece através do Dynamic Data Center Toolkit (DDCT) , que hoje está disponível para cenários de Hosting, mas em breve, estará com uma versão para Enterprise. Conversei rapidamente com o Fábio Hara (outro monstro sagrado do mundo de TI, hi! arigato!), que me apresentou alguns cenários corporativos que podem implementar um modelo de private cloud, aproveitando toda a infraestrutura e investimentos já feitos internamente.
Veja ainda o post abaixo, do time de produto falando sobre a solução DDCT/E para o mundo Enterprise:
Para saber mais sobre Dynamic Data Center Toolkit e private cloud, confira o link abaixo:
Microsoft Private Cloud Computing Infrastructure
Ref.: https://www.microsoft.com/virtualization/en/us/private-cloud.aspx
3) Public Cloud e o Windows Azure
Finalmente, podemos aplicar um cenário de paralelismo e distribuição de processamento com alta escalabilidade e alta disponibilidade através do modelo de public cloud, na Microsoft oferecido pelo Windows Azure. Aqui, nosso pattern de Map Reduce ficaria assim:
Explicando: uma Web Role, por exemplo, pode implementar um serviço WCF para o recebimento de dados para processamento, realizando a distribuição entre os vários Workers internos da solução. Essa passagem pode ser feita por filas (Queues), para o desacoplamento entre Web e Worker. Ao final, os vários blocos de resultados são devolvidos para a camada Web por tabelas, preparadas para o cenário de alta escalabilidade na plataforma Azure. A consolidação é feita pela Web Role Master, que devolde o resultado final do processamento.
Nesse cenário de provisionamento elástico, podemos ainda configurar on-demand o número de nós de processamento, conforme alguma variável de dimensionamento colocada. Vale lembrar que, como são cenários de cálculo intenso, mas feitos de forma pontual, podemos dinamicamente controlar essa alocação de instância, reduzindo os custos envolvidos na solução final. Com certeza, ficará mais barato do que investir inicialmente milhares de dólares em uma super máquina, que pode amargar vários minutos ou horas de osciosidade ao longo do dia. Falei ainda com o Danielzinho, aqui do time de DPE, que ficou louco pensando em modelos matemáticos de cálculo em engenharia elétrica, que poderiam aproveitar esse paralelismo sobre o Azure. :)
Vimos assim três cenários interessantes de processamento distribuído na plataforma Microsoft:
1. Paralelismo via HPC
2. Paralelismo via private cloud, com o Dynamic Data Center Toolkit
3. Paralelismo via public cloud, com a plataforma Windows Azure
Faça uma avaliação de seus cenários e veja se você não tem uma oportunidade de paralelismo com essas opções. Fique atento!
Por enquanto é só! Até o próximo post :)
Waldemir.
Comments
Anonymous
December 17, 2009
The comment has been removedAnonymous
December 17, 2009
Oi Grande Waldemir, Cheguei a trabalhar no passado com uma plataforma de computação paralela com base em "transputers". O interessante é que com a tecnologia da época (1993), tudo tinha que acontecer dentro da mesma máquina, porém o modelo era muito similar: Uma placa com até 4 transputers era "espetada" no PC (barramento ISA ainda). Existiam transputers "General Purpose" e os dedicados a processamento gráfico. Um flat cable ligava as diversas placas. Dava para colocar uns 12 ou 16 transputers num PC. O software rodando no PC distribuída as tarefas e recebia os resultados (a memória do PC era compartilhada com os transputers, que processavam em sua própria memória). Por fim, os módulos gráficos exibiam os resultados (o sistema era para tratamento de imagens). É fascinante ver que aquele flat cable virou a Internet, e cada modulinho hoje pode ser o que bem entendermos; desde nosso PC ou servidor até um nó alocado dinamicamente na nuvem! Como é bacana ver como as coisas evouíram!!! (e como alguns conceitos continuam válidos!!!) Abraço! Luciano http://twitter.com/lucianopalmaAnonymous
December 17, 2009
Olá Luciano, Creio que muitos dos patterns do passado vêem sendo implementados ao longo dos anos, porém, mais recentemente temos vistos o efeito multiplicador, de milhares ou milhões de usuários pela internet, aproveitando seus benefícios. Aqui, concordo com você, como é legal ver as bases da engenharia de computação ainda válidos. Antes, apenas uns poucos malucos de "jalecos" é que podiam dizer: Nooooooosssa, como isso é legal! :) Um abraço! Waldemir.Anonymous
October 18, 2011
Oi Waldemir, Excelente a sua explicação! a melhor que encontrei no google para esclarecer o processamento paralelo e distribuido. Obrigado!Anonymous
October 18, 2011
Obrigado Rober, pelo feedback. Fico feliz que o post tenha ajudado. Um abraço! Waldemir.