Introdução

Nas últimas décadas, a computação tem evoluído muito rapidamente. Tal evolução seguida da popularização da informática tem feito a demanda por recursos computacionais crescer de forma acelerada. Até a década de 80, os chamados mainframes (computadores utilizados como servidores) eram grandes, caros e dificilmente eram conectados em rede [SDPP]. Antes da era das redes de computadores e da Internet, os mainframes funcionavam de forma isolada, sem possibilitar que múltiplos usuários remotamente pudessem utilizar sua capacidade computacional.

Note
Em sistemas centralizados que possuem terminais remotos conhecidos como terminais burros, tais terminais não tinham qualquer poder de processamento. Eles apenas serviam de monitor (tela) e enviaram comandos digitados no teclado para o servidor. Desta forma, eles não formavam de fato um sistema distribuído.

Os mainframes eram utilizados para realizar tarefas que demandavam alto poder de processamento, normalmente processadas em lote (batch processing), como:

  • folhas de pagamento de empresas;

  • declarações de imposto de renda;

  • computação científica com a realização de cálculos complexos;

  • análise estatística de grande volume de dados como no caso de um censo;

  • etc.

Processamento em lote é caracterizado pela execução de um conjunto de tarefas (jobs), que após iniciadas, são executadas até o fim, sem a intervenção humana. No entanto, este modelo de processamento centralizado e desconectado impedia que o poder computacional de diversos mainframes pudesse ser combinado para permitir a execução de tarefas cada vez maiores e mais complexas. A abordagem de dividir uma tarefa grande em tarefas menores é chamada de Divide and Conquer ("Dividir para Conquistar" ou "Divisão e Conquista") [PA]. Tal divisão permite que estas tarefas menores possam ser executadas simultaneamente em múltiplos computadores. Isto aumenta a eficiência, possibilitando que a tarefa original seja finalizada em menos tempo.

Com a popularização das redes, o advento da Internet e a crescente informatização, computadores começaram a ser inteligados e sistemas centralizados (monoprocessados) evoluíram para sistemas distribuídos. Estes são sistemas multiprocessados, que executam simultaneamente em diversos computadores.

Existem várias definições de sistemas distribuídos, como [SDPP]:

Um sistema ditribuído é um conjunto de computadores independentes que se apresenta a seus usuários como um sistema único e coerente.
— Tanenbaum e Steen 2008

e [SDCP]:

Um sistema distribuído é aquele no qual os componentes localizados em computadores interligados em rede se comunicam e coordenam suas ações apenas passando mensagens.
— Coulouris et. al. 2008
Note
Redes de computadores conectadas por protocolos como TCP/IP são por si só um sistema distribuído básico. A web é de fato o maior sistema distribuído existente [SDCP].

Observe que não é especificado o tipo de computadores, como são interligados ou como é essa comunicação/cooperação por troca de mensagens. Os computadores independentes representam partes de um sistema distribuído, que podem estar temporariamente indisponíveis ou defeituosas. Sendo independentes, elas podem ser reparadas ou substituídas sem que os usuários/programas percebam. Estas são questões essenciais no projeto de sistemas distribuídos. O mais importante é que tais características normalmente são ocultas dos usuários. Usuários podem ser pessoas ou programas que interagem com o sistema. A independência dos computadores e a ocultação de tais características viabiliza a expansão da escala de um sistema distribuído. [SDPP] Aumentar a escala de um sistema significa aumentar sua capacidade para atender a uma maior demanda de usuários/acessos. Este é um dos grandes desafios de sistemas distribuídos, que depende de como o sistema foi projetado.

Important
Existem diferentes dimensões de escala, como veremos a seguir. O mais comum ao pensar em escala é em relação ao tamanho do sistema para atender a uma demanda de acessos. Podemos ter um sistema que está preparado para atender acessos em uma escala de milhares de requisições por minuto. No entanto, se a demanda aumentar da escala de milhares para centenas de milhares, o sistema pode não ser mais capaz de atender tal demanda.

A interligação de computadores e redes heterogêneas fornecendo uma visão de sistema única é normalmente feita por um middleware. Este é um software que fica entre o sistema operacional e as aplicações. Ele fornece uma interface de programação de aplicativos (Application Programming Interface, API) para o desenvolvimento das aplicações de forma que componentes de uma mesma aplicação distribuída entre vários computadores e diferentes aplicações possam se comunicar. [SDPP]

middleware.png
Figure 1. Camada de middleware em sistemas distribuídos (Adaptado de [SDPP]).

Características de um Sistema Distribuído

Tais definições de um sistema distribuído permitem que estes possuam características como:

  • compartilhamento de recursos;

  • escalabilidade;

  • disponibilidade;

  • abertura;

  • transparência.

Tais características são apresentadas a seguir.

results matching ""

    No results matching ""