segunda-feira, 3 de setembro de 2012

[*]Aspectos da Distribuição de Processamento

A distribuição de processamento em sistemas multiprocessadores ou multicomputadores, ou seja, a divisão de trabalho entre processadores diferentes localizados no mesmo sistema ou em sistemas diferentes, deve, necessariamente, observar alguns aspectos muito importantes:
  1. Divisão do processamento
  2. Identificação das unidades de processamento
  3. Validação dos resultados
  4. Políticas de distribuição

1. Divisão do processamento

Para que o processamento possa ser distribuído, é requisito fundamental que o trabalho computacional que deve ser realizado possa ser dividido em partes cujo processamento possa se dar de maneira concorrente, ou seja, cada parte deve poder ser processada independentemente, a despeito da ordem de submissão,  processador alocado ou tempo de processamento. Desta maneira, tanto o código a ser executado (algoritmo) como os dados a serem processados, deve ser preparados para possibilitar tal divisão.

É comum em aplicações transacionais (típicas em sistemas de informação operacionais, tais como aplicações web) que os algoritmos envolvidos sejam simples, assim como reduzida a quantidade de dados que são processadas de cada vez, mas em ambientes onde muitas operações (tipicamente milhares) são executadas simultaneamente. Como todas estas transações são independentes, a distribuição de seu processamento entre diferentes processadores de um mesmo host (um sistema multiprocessador) ou entre diferentes processadores de computadores interligados como um mesmo sistema (um sistema multicomputador, tal como um cluster), poderiam oferecer inúmeras vantagens em termos de desempenho. Nesta situação as threads ou processos destes sistemas constituem as unidades de processamento do trabalho pretendido, ou seja, sua divisão por meio das características "naturais" dos sistemas envolvidos.

Já as situações onde os algoritmos envolvidos são complexos ou que a quantidade de dados envolvida é realmente grande requerem preparo programático especial, de maneira que seja possível explorar melhor as características dos sistemas envolvidos (múltiplos processadores no mesmo host ou distribuídos entre diferentes máquinas). Em sistemas multicomputadores é necessário estabelecer como o  código a ser executado será enviado ou compartilhado pelos vários hosts envolvidos, bem como determinar a forma de distribuição dos dados. Cada pacote constituído pelo código (algoritmo) e a fração de dados a ser trabalhada constitui uma unidade de processamento.

2. Identificação das unidades de processamento

Em sistemas multicomputadores é necessário cuidado com a identificação das unidades de processamento de cada trabalho, ou seja, é preciso garantir que cada fragmento do trabalho seja univocamente identificado, permitindo o controle preciso de seu envio e retorno, bem como determinação da situação do processamento global a qualquer instante.

3. Validação dos resultados

Principalmente em sistemas multicomputadores é preciso validar os resultados retornados pelos sistemas participantes pois: erros durante o processamento podem invalidar os resultados; problemas na transmissão dos dados podem corromper os dados retornados; os dados recebidos devem ser aqueles enviados, ou seja, é necessário verificar a autenticidade do conteúdo recebido.

4. Políticas de distribuição

Considerando que o desempenho de cada nó participante de um sistema multicomputador pode ser substancialmente diferente, bem como muito variável e imprevisível a carga de trabalho de cada um destes nós, a distribuição de unidades de processamento deve, sempre que possível, alocar as máquinas de melhor desempenho e, ao mesmo tempo, as mais ociosas do sistema, buscando assim o melhor desempenho global.

Como os nós estão sujeitos a falhas, de duração não determinável, é uma exigência estabelecer um período máximo para retorno dos resultados correspondentes de cada unidade de processamento, de modo que resultados não retornados no prazo disparem a distribuição destas unidades de processamento pendentes para outros nós ainda ativos, garantindo que a tarefa como um todo seja executada. Quanto menores os prazos envolvidos, maior a exigência de capacidade de processamento dos nós envolvidos.


Com isto é possível concluir que a distribuição de processamento em sistemas multicomputadores é uma tarefa bastante complexa, que exige uma infra-estrutura de controle bastante sofisticada, tal como feito pelo Berkeley Open Infra-structure for Network Computing (BOINC), distributed.net ou Globus.

Nenhum comentário:

Postar um comentário