Dryad e DryadLINQ são dois projetos da Microsoft Research para o desenvolvedor C# que facilitam o processamento de grandes volumes de dados em clusters de computadores ou datacenters.
Dryad é uma infra-estrutura que executa programas sequenciais de forma paralela em um custer de computadores em um datacenter. A computação paralela é organizada como um grafo acíclico direto onde os programas são os vértices do grafo e as arestas são canais de comunicação entre os programas, conforme a figura abaixo:
O grafo simplesmente mostra o relacionamento entre programas, de onde chega as entradas e para onde são direcionadas as saídas. O grafo precisa ser acíclico para evitar deadlock no agendamento de um programa. O Job Manager (JM) armazena o grafo e agenda a execução de um programa quando seus canais de entrada estão prontos e quando há um computador disponível. O JM obtém um computador disponível do Name Server (NS) e agenda o programa para execução através de um daemon (D). Os canais de comunicação entre programas (os vértices) são arquivos, memória compartilhada ou pipes TCP. O grafo pode ser modificado dinamicamente duramente a execução e é tolerante a falhas. O grafo completo pode ser executado em um sistema único para se fazer debug. O Dryad já é utilizado em produção pela Microsoft no produto AdCenter.
DryadLINQ é um “compilador que traduz programas LINQ para computações distribuídas que podem rodar em um cluster de PCs”. Este processo é conseguido através do seguinte:
- Objetos de dados C# e LINQ tornam-se arquivos particionados distribuídos.
- Queries LINQ tornan-se tarefas Dryad distribuídas.
- Métodos C# tornam-se código executado nos vértices de uma tarefa Dryad.
DryadLINQ tem as seguintes funcionalidades:
- Programação declarativag: computações são expressadas em uma linguagem de alto nível similar ao SQL
- Paralelização automática: de um código declarativo seqüencial, o compilador DryadLINQ gera planos de query altamente paralelizados para grandes clusters de computadores. Para explorar o paralelismo em múltilplos processadores em cada máquina, o DryadLINQ se vale do framework de paralelismo PLINQ.
- Intragração com o Visual Studio: no DryadLINQ, programadores aproveitam o abrangente ferramental do VS: Intellisense, refatoração, debugger integrado, gerenciamento de build, gerenciamento de código etc.
- Integração com o .Net: todas as bibliotecas .Net, incluído o Visual Basic e as linguagens dinâmicas estão disponíveis.
- Verificação de tipagem: computações distribuídas são estaticamente verificadas.
- Serialização automática: mecanismos de transporte de dados lidam com todos os tipos de objeto .Net automaticamente.
- Otimização de grafos de Jobs
- estático: um rico conjunto de regras de otimização de queries via re-escrita de termos é aplicado ao plano de query, otimizando localmente e melhorando a performance.
- dinâmico: otimizações de plano de query de tempo de execução adaptam o plano levando em consideração estatísticas do conjunto de dados processado.
Links úteis: Paper: Dryad: Distributed Data-Parallel Programs from Sequential Building Blocks, Apresentação: Dryad, Paper: DryadLINQ: A System for General-Purpose Distributed Data-Parallel Computing Using a High-Level Language, DryadLINQ program examples (PDF).