1. Definição
1.1. Um sistema distribuído é uma coleção de elementos de computação que, juntos, dão aparencia para o usuário de serem um só sistema.
2. Características
2.1. Elementos podem se comportar independentemente
2.2. Solução comum mas permanece uma área díficil de pesquisa
2.3. Age como um só sistema para o usuário
3. Desafios
3.1. Escalabilidade
3.2. Testes com dados reais
3.3. Propriedades estatísticas e de comportamento
4. Tendências
4.1. FIcamos cada vez mais dependentes nos sistemas que criamos,
5. Pitfalls
5.1. Assertivas falsas que todos cometem na primeira tentativa de desenvolver um sistema distribuido
5.2. A rede é confiável, segura e homogênea
5.3. A topologia não muda
5.4. Latência é zero, e largura de banda é infinita
5.5. Custo de transporte é zero
5.6. Só existe um administrador
6. Design
6.1. Compartilhamento de recursos
6.1.1. sucesso com softwares do tipo groupware
6.1.2. sucesso com softwares que usam redes do tipo peer-to-peer para compartilhamento de arquivos
6.2. Transparência
6.2.1. Access
6.2.1.1. Esconde diferenças na representação dos dados e como eles são acessados
6.2.2. Location
6.2.2.1. Esconde onde o objeto está localizado
6.2.3. Relocation
6.2.3.1. Esconde que um objeto pode ser movido de local enquanto em uso
6.2.3.1.1. um data center realoca um site de um disco para outro por eficiencia de memória
6.2.4. Migration
6.2.4.1. Esconde que um objeto pode se mover para outro local
6.2.4.1.1. uma pessoa anda de trem enquanto fala no celular
6.2.5. Replication
6.2.5.1. Esconde que um objeto pode ser replicado
6.2.6. Concurrency
6.2.6.1. Esconde que um objeto pode ser compartilhado por varios usuarios independentes
6.2.7. Failure
6.2.7.1. Esconde a falha e recuperação de um objeto
6.3. Seja "aberta"
6.3.1. Interoperabilidade
6.3.1.1. Implementações de diferentes manufatores seguem um padrão
6.3.2. Portabilidade
6.3.2.1. Em quantas máquinas a mesma implementação conseque rodar
6.3.3. Extensibilidade
6.3.3.1. Tem como adcionar e retirar partes facilmente do sistema sem afetar operabilidade
6.4. Seja escalável
6.4.1. Size
6.4.1.1. pode-se adcionar mais usuários e recursos sem perda de performance visível
6.4.1.2. Escala horizontal: comprar mais computadores
6.4.1.3. Escala vertical: aprimorar a capacidade dos computadores
6.4.2. Geographical
6.4.2.1. pode-se ter recursos e usuários longe sem muito atraso na comunicação
6.4.3. Administrative
6.4.3.1. pode-se ter administradores de diferentes organizações independentes
7. Tipos
7.1. Sistemas distribuídos de computação
7.1.1. High performance
7.1.1.1. grid
7.1.1.2. cluster
7.1.1.3. cloud
7.1.1.3.1. IaaS
7.1.1.3.2. PaaS
7.1.1.3.3. SaaS
7.1.1.4. memória compartilhada tem limitação de escalabilidade depois de algumas dezenas de computadores. tentaram resolver usando sistemas distribuidos mas não deu certo
7.2. Sistemas de informação distribuídos
7.2.1. desafio da interoperabilidade de aplicações dentro de uma organização com muitos dados
7.2.2. prove modelos cliente-servidor e comunicação direta entre aplicacações
7.3. Pervasive systems
7.3.1. Sistemas que estão sempre presentes no nosso ambiente e interagem de forma não-obstrutiva com o usuário
7.3.1.1. smart watch
7.3.2. não é nítida a separação de usuário e sistema.
7.3.3. contem sensores para coletar informação e atuatores para sugerir feedback ao usuário