1. Desenvolvimento e execução de sistemas e aplicações que executam de forma concorrente e descentralizada em 2 ou mais computadores interconectados. Ex: Um computador (PC) funciona como uma programação distribuída, pois funciona paralelamente entre processadores e é multithread. 2. As maiores vantagens de aplicações distribuídas são a escalabilidade, confiabilidade, compartilhamento de dados entre outras vantagens. Porém no seu viés vem uma complexidade muito maior em criar tais sistemas, e com isso, o paralelismo é um grande problema para quem quer debugar o sistema em questão. 3. Considerações: 1 - Heterogeneidade: Uma melhor solução para o problema é adequar todo o código da rede em uma linguagem, normalmente uma linguagem com muitos frameworks para facilitar uma melhor utilização dos recursos de cada SO e processador das máquinas relacionadas. Por isso uma grande quantidade de código em Java para o middleware que é a camada de conexão em processo de um SD. 2 - Padronização: Padrões abertos com especificação e documentação disponíveis. Independência de fornecedor. 3 - Segurança: Normalmente utiliza-se criptografias para não ter perda de integridade do sistema e falta de disponibilidade para melhorar o desempenho do sistema. 4 - Escalabilidade: O sistema obviamente deve ser escalável de uma forma que com 10 usuários e 10 milhões de usuários não perca um grande desempenho e consiga trazer os resultados de acordo com o esperado. 5 - Tratamento de Falhas: Normalmente é utilizado a mascação dos erros, tornando o sistema sempre disponível mesmo na ocorrência de falhas, e claro há uma certa tolerância para a quantidade de erros. 6 - Concorrência: Como todo o sistema multithread é necessário garantir exclusão mútua no a recursos compartilhados. 4. Stateless significa que o estado do serviço não é levado em consideração entre duas invocações remotas Stateful significa que as requisições são orientadas à conexão, isto é, cada requisição está relacionada a alterações que foram feitas por requisições prévias. A grande diferença de Statefull e Stateless é que o Stateless não tem nenhuma preocupação no estado em que se encontra o sistema, já o Statefull não só depende do estado como o sistema só começa a funcionar quando o estado requisitado é apresentado e a funcionalidade dele é apresentada. 5. - SISD (Single Instruction Single Data): Máquina funciona com um fluxo único nunca tendo como paralelismo e/ou multithread. - MISD (Multiple Instruction Single Data): Funciona como uma memória aloca várias intruções funcionando em paralelo. - SIMD (Single Instruction Multiple Data): Padronizado como o computador que conhecemos, tem um fluxo de instruções e pode funcionar paralelamente e multithread, tem uma única instrução que pode ter foco em diferentes dados. - MIMD (Multiple Instruction Multiple Data): É difícil de explicar, mas é basicamente uma máquina que tem vários processadores que funcionam como diferentes CPUs, tem várias instruções que são ordenadas entre várias das anteriores instruções e devem seguir um fluxo continuo, mas que pode ser feito por "máquinas diferentes". 6. Multiprocessadores - Máquina paralela construída a partir da replicação