# data[].attributes.body
Um sistema distribuído é uma coleção de dispositivos autônomos conectados por uma rede de comunicação que é percebida pelos usuários como um único dispositivo provendo serviços ou resolvendo algum problema. Dessa forma contribui para que as plataformas diferentes de hardware possam manter uma comunicação eficiente.

# data[].attributes.headline
Internet é o melhor exemplo de sistema distribuído.

# data[].attributes.subject
Internet é o melhor exemplo de sistema distribuído.

# data[].attributes.body
A Internet em particular é um sistema distribuído muito grande. Ela conecta usuários através de sites e serviços, e-mail, transferência de arquivos, chat, etc. Os serviços estão localizados em máquinas dispersas que são interligadas por algum tipo de rede. Diferentes aplicações e serviços se comunicam através da rede, ele trocam mensagens através de um meio de comunicação comum. Estes meios de comunicação permitem que aplicações e serviços em plataformas diferentes consigam se comunicar e cooperar. Eles são chamados de protocolos.

# data[].attributes.headline
Definição e conceito de Sistemas Distribuídos

# data[].attributes.subject
Definição e conceito de Sistemas Distribuídos

# data[].attributes.body
1 - Caracterização de Sistemas Distribuidos - Prof. Fernando De Siqueira - Sistemas Distribuidos (google.com)

# data[].attributes.attachment_link.readable_text
Nos primórdios da computação os sistemas eram todos centralizados. Todo o processamento era feito no mainframe. Os terminais eram usados apenas para entrada/saída de dados. Com o tempo, surgiram novas arquiteturas de computação que buscavam descentralizar o processamento. Foi quando surgiram os primeiros sistemas distribuídos. A ideia, como o próprio termo sugere, era de distribuir o processamento ao invés de adotar uma arquitetura centralizada no mainframe.
Conceito de Sistema Distribuído
O conceito de sistema distribuído é de um sistema que possui componentes localizados em computadores interligados em rede e que se comunicam e coordenam suas ações através da troca de mensagens entre os componentes. É comum pensarmos em componentes como sendo apenas servidores e máquinas conectadas em rede, mas quando falamos de componentes podem ser componentes de hardware ( servidores ) ou de software ( aplicações e serviços ).

Os componentes interligados em rede podem estar separados por qualquer distância. No mesmo edifício de uma empresa, na mesma cidade, mesmo estado, no mesmo país ou até em continentes diferentes.
Exemplos de Sistemas Distribuídos
Em nossos dias todas as aplicações são baseadas em redes de computadores. Nenhuma aplicação ou serviço funciona de forma isolada. As redes são projetadas de forma a suportar uma ampla gama de serviços e aplicações.

São alguns exemplos de sistemas distribuídos:

A internet é o maior exemplo de sistema distribuído

Qualquer aplicação intranet

Qualquer aplicação mobile

Aplicações e serviços baseados na Computação em Nuvem

A Internet em particular é um sistema distribuído muito grande. Ela conecta usuários através de sites e serviços, e-mail, transferência de arquivos, chat, etc. Os serviços estão localizados em máquinas dispersas que são interligadas por algum tipo de rede. Diferentes aplicações e serviços se comunicam através da rede, ele trocam mensagens através de um meio de comunicação comum. Estes meios de comunicação permitem que aplicações e serviços em plataformas diferentes consigam se comunicar e cooperar. Eles são chamados de protocolos.

A Intranet é uma parte da Internet administrada separadamente por uma empresa. Uma intranet é composta de várias redes locais ( LANs ) interligadas por conexões de backbone. A configuração de rede de uma Intranet pode variar desde uma LAN em um único site até um conjunto de LANs interconectadas pertencentes às filiais de uma grande empresa, localizadas inclusive em países diferentes.

Uma Intranet pode ser conectada à Internet através de um roteador que permite aos usuários da Intranet terem acesso a serviços da Internet, serviços que são providos de fora da empresa. Também é possível que os usuários de outras Intranets tenham acesso aos serviços que a Intranet oferece. A segurança é crucial pois não deve ser permitido que um usuário de uma empresa concorrente tenha acesso aos projetos e clientes de uma empresa, da mesma forma que um hospital pode não querer que informações dos seus pacientes sejam acessadas por empresas farmacêuticas.

Desta forma vemos que os sistemas distribuídos já são uma realidade, sendo importante conhecer os conceitos e arquiteturas de sistemas distribuídos.

A Computação móvel também é um tipo de sistema distribuído que conecta diversos dispositivos tais como notebooks, PDA, smartphone, Tablet além de outros dispositivos que são incorporados em carros, geladeiras, máquinas de lavar, smartwatch, etc. Estes dispositivos acessam serviços através da Internet. Com o avanço das redes sem fio e da miniaturização do hardware temos componentes interligados por redes sem fio com alta portabilidade e capacidade de se conectar com redes em lugares diferentes.

A computação móvel também é chamada computação nômade e permite a execução de tarefas de computação com alta mobilidade. Os recursos são acessados através da internet de qualquer lugar.

Daqui pra frente vamos nos referir aos sistemas distribuídos como SD.
Por que Sistemas Distribuídos?
O compartilhamento de recursos é um bom motivo para os SD. Recursos podem ser compartilhados por diferentes servidores e consumidos por clientes. Serviços podem ser compartilhados através da internet, sendo encapsulados em objetos que podem ser acessados por outros objetos ou por aplicações cliente.

O compartilhamento de recursos é a principal motivação para se construir sistemas distribuídos. O recurso pode ser um componente de hardware, um disco ou impressora, um software, um serviço, um arquivo e objetos de dados de todos os tipos, áudio, vídeo, etc.
Os Desafios dos Sistemas Distribuídos.

Os componentes de um sistema distribuídos são um grande desafio. Em sistemas centralizados isso não existe pois há um único componente que é o próprio sistema centralizado. Em SD é um pouco diferente pois temos diversos componentes espalhados, ou distribuídos por diferentes servidores, que podem ser heterogêneos, com diferentes sistemas operacionais, de diferentes fabricantes, com diferentes capacidades de processamento.

Daí surgem diversos desafios na computação distribuída, entre os quais podemos citar:

Segurança

Escalabilidade

Desempenho

Comunicação entre os componentes

Tolerância a falhas

Todos estes aspectos devem ser considerados quando trabalhamos com sistemas distribuídos. Em outras palavras:

Como podemos nos assegurar que somente os clientes válidos podem ter acesso aos serviços/componentes do sistema? ( Segurança )

Como podemos garantir que o sistema distribuído suportará aumento no número de usuários ou requisições? ( Escalabilidade )

Como podemos garantir um desempenho aceitável em um sistema distribuído, onde os componentes estão interligados por redes que nem sempre possuem a mesma velocidade e onde os componentes nem sempre tem a mesma capacidade de processamento, sem que surjam gargalos que comprometam o desempenho. ( Desempenho )

Como podemos garantir que todos os componentes possam se comunicar, considerando ambientes heterogêneos de rede, servidores, diferentes padrões de arquitetura e protocolos de comunicação? ( CORBA, .net, RMI, SOAP, REST, etc. )

Como podemos garantir a tolerância a falhas em um sistema com componentes distribuídos em servidores conectados a redes e ambientes? ( Tolerância a falhas )
A solução envolve não apenas projeto e arquitetura do software mas também infraestrutura na qual o software será executado.

Consequencias do uso de Sistemas Distribuidos
Como em um SD os componentes estão dispersos geograficamente surgem consequências a respeito dessa característica:

Concorrência - Como os processos são distribuídos pela rede a execução concorrente de programas é a norma. Um servidor executa um processo enquanto outro processo é executado em outra máquina sendo que ambos compartilham recursos como banco de dados, largura de banda de rede, discos, etc. A disputa por estes recursos compartilhados pelos processos que são executados concorrentemente é uma consequência dos SD e também um desafio a ser superado. A coordenação de processos em execução concorrente é uma das formas de tratar a concorrência.

Inexistência de relógio global - Em um SD, os processos precisam cooperar de forma coordenada através da troca de mensagens. A coordenação considera compartilhamento do tempo em que os processos são executados. O problema é que existem limites para a precisão com a qual os servidores sincronizam os relógios em uma rede. O fuso horário é um fator complicador na sincronização dos processos.

Falhas independentes - Em qualquer sistema existem falhas e nos SD não é diferente. Os projetistas devem considerar as consequencias de cada falha. Falhas de rede, falhas de banco de dados, falhas de comunicação, falhas de todos os tipos acontecem.

As falhas na rede são problemáticas pois elas resultam no isolamento dos componentes do SD que não podem mais se comunicar e trabalhar juntos. Lentidão na rede também pode afetar os processos em execução.

A falha de um componente ou termino de um processo em um componente nem sempre é percebida imediatamente pelos demais componentes.

# data[].attributes.attachment_link.title
1 - Caracterização de Sistemas Distribuidos - Prof. Fernando De Siqueira - Sistemas Distribuidos

# data[].attributes.attachment_link.description
Nos primórdios da computação os sistemas eram todos centralizados. Todo o processamento era feito no mainframe. Os terminais eram usados apenas para entrada/saída de dados. Com o tempo, surgiram novas arquiteturas de computação que buscavam descentralizar o processamento. Foi quando surgiram os primeiros sistemas distribuídos.