·

Análise e Desenvolvimento de Sistemas ·

Desenvolvimento de Software

Send your question to AI and receive an answer instantly

Ask Question

Preview text

22/09/2021\nEad.br\nSISTEMAS DISTRIBUÍDOS\nCONCEITOS INICIAIS\nAutor: Dr. Sidartha Azevedo Lobo de Carvalho\nRevisor: Lizandro de Souza\nINICIAR\nhttps://fmu.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=738496_16PA... 1/32 22/09/2021\nEad.br\nintrodução\nIntrodução\nNesta unidade, você vai aprender sobre os principais conceitos que permeiam o mundo dos sistemas distribuídos, as principais características que são usadas para classificar esses sistemas e como ocorre a comunicação entre os processos que executam dentro dos programas do usuário e dos servidores.\nVocê vai entender como é feita a criação e identificação de processos e o escalonamento destes dentro do sistema operacional. Além disso, vai aprender sobre os principais modelos e padrões arquiteturais de comunicação para os sistemas distribuídos. Por fim, vai entender o que é e como funciona o modelo cliente-servidor, utilizado em todo o mundo.\nhttps://fmu.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=738496_16PA... 2/32 22/09/2021\nEad.br\nCaracterísticas de um Sistema Distribuído\nNesta seção, você vai aprender o que é um sistema distribuído e quais as principais características desse tipo de sistema. Primeiramente, você sabe onde pode usar um sistema distribuído? Os sistemas distribuídos compõem grandes redes de computadores, como a internet, redes de fábricas, redes de telefones móveis, dentre outras.\nEm outras palavras, um sistema distribuído pode ser definido como:\n[...] aquele no qual os componentes de hardware ou software, localizados em computadores interligados em rede, comunicam-se e coordenam suas ações apenas enviando mensagens entre si. Essa definição simples abrange toda a gama de sistemas nos quais computadores interligados em rede podem ser distribuídos de maneira útil. (COULOURIS, 2013, p. 2)\nUma das principais motivações para que os sistemas distribuídos existam é a necessidade do compartilhamento de recursos entre os elementos de uma rede de computadores. Você pode entender recursos como um termo abstrato que permite caracterizar diversos itens, como arquivos de um computador, bancos de\nhttps://fmu.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=738496_16PA... 3/32 dados, serviços de software, impressoras, componentes de hardware, dentre outros.\n\nSe você analisar os componentes de hardware, é possível compartilhar impressoras, discos e processadores para reduzir custos. Porém, se observar pela visão do usuário final do sistema, perceberá que este deseja compartilhar informações em mais alto nível, como aquelas necessárias para seu trabalho e suas atividades sociais. Veja o exemplo a seguir: os usuários do sistema possuem a necessidade de compartilhar informações sobre suas viagens ou dados de uma tabela do banco de dados, não estando preocupados em compartilhar discos ou processadores. Ou seja, essa abstração mais baixo nível, como os processadores ou os servidores dos dados, não é importante ao usuário final.\n\nOs sistemas distribuídos estão presentes em diversos cenários. Então, imagine dois cenários extremos: o compartilhamento de dados na internet entre duas pessoas que não se conhecem, mas que compartilham do mesmo problema (e um deles sabe como resolver esse problema); e, no outro extremo, pessoas que trabalham lado a lado e utilizam os computadores para trocar informações que estão nas máquinas locais. Ambos os cenários descritos anteriormente utilizam sistemas distribuídos, mas com características distintas.\n\nPercebe a diferença geográfica que há entre os cenários anteriores? Os sistemas distribuídos devem oferecer mecanismos para tornar essa diferença geográfica transparente, de forma que os usuários não saibam o caminho que a requisição faz no navegador web até chegar à informação desejada, mesmo que seja do outro lado do mundo.\n\nJá o termo \"serviço\", segundo Coulouris (2013, p. 15), é definido como:\n\n[...] uma parte distinta de um sistema computacional que gerencia um conjunto de recursos relacionados e apresenta sua funcionalidade para usuários e aplicativos. Por exemplo, acessamos arquivos compartilhados por intermédio de um serviço de impressão, enviamos documentos para impressoras por meio de um serviço de impressão; adquirimos bens por meio de outro serviço diferente; eletrônico. O único acesso que temos ao serviço é por intermédio conjunto de operações que ele exporta. Por exemplo, um serviço de sistema de arquivos fornece operações de leitura, escrita e exclusão dos arquivos. Perceba, na descrição de Coulouris (2013), que os serviços apresentam restrições no acesso aos recursos, especificando um conjunto finito de operações que podem ser realizadas por outro sistema ou usuário final. Essa restrição reflete a organização dos sistemas distribuídos, destacando a importância da comunicação entre os sistemas e permitindo que somente o que realmente deve estar exposto seja acessado. Esse conjunto bem-definido também auxilia na garantia da consistência e segurança dos dados dos servidores.\n\nEm complemento, Tanenbaum (2007, p. 1) define um sistema distribuído como \"um conjunto de computadores independente que se apresenta a seus usuários como um sistema único e coerente\".\n\nAtente-se para os termos destacados em negrito. O termo \"único\" reflete que o sistema distribuído deve ser transparente, ou seja, não deve ser visível ao usuário. Se você usa 1 ou 100 computadores interligados para prover o serviço ao usuário, ele somente deve ter acesso ao serviço, não como as coisas são feitas nos bastidores.\n\nO termo \"coerente\" se deve à necessidade de sincronicidade e consistência dos dados, pois não deve haver inconsistências (como informações desatualizadas) entre os componentes de um sistema distribuído. Por exemplo, imagine um servidor de filmes que é composto por 2 computadores servidores, sendo que em um computador há 100 filmes e, no outro, há somente 80; quando o usuário tentar acessar um filme que não está presente no computador que tem somente 80 filmes, vai haver inconsistência de informações e o usuário não irá receber o serviço desejado.\n\nDado o exposto, os sistemas distribuídos geralmente são classificados de acordo com as seguintes características:\n\n- compartilhamento de recursos;\n- abertura;\n- concorrência;\n- escalabilidade;\n- tolerância a falhas;\n- disponibilidades;\n- transparência. Cada uma dessas características será detalhada na seção a seguir.\n\nAnálise das Características\n\nDado o exposto, os sistemas distribuídos, geralmente, são classificados de acordo com as seguintes características:\n\n- Compartilhamento de recursos: deve especificar quais recursos estão disponíveis para serem acessados, como eles devem ser acessados e modificados, como o seu compartilhamento deve ser realizado dentro da rede e a implementação da interface de interação com o recurso e/ou servidor.\n- Abertura: um sistema distribuído aberto oferece serviços com base em regras e padrões conhecidos pela comunidade, permitindo que outros sistemas que também conheçam esses padrões possam se comunicar com ele. A abertura é a capacidade de interagir com outros sistemas abertos (conhecem/implementam os mesmos protocolos). Um sistema aberto é independente de hardware, plataformas ou linguagens de programação; isso permite que outros sistemas expressem conceitos para oferecer um serviço que pode ser acessado de forma facilitada por outro sistema na rede.\n- Concorrência: o termo \"concorrente\" se dá como uma característica dos sistemas distribuídos que permitem que diversos usuários/computadores possam acessar os recursos que estão sendo compartilhados de forma simultânea, garantindo consistência na leitura e modificação dos dados. Imagine um sistema distribuído de um banco de dados que recebe pedidos de modificação dos dados de diversos usuários diferentes e, enquanto isso, há diversos outros fazendo a leitura desses mesmos dados. O sistema deve permitir que somente 1 usuário modifique os dados por vez, enquanto diversos outros possam ler (não haver inconsistência). Ao ser feita uma modificação, essa alteração deve ser transmitida a todos os computadores que armazenam esse banco de dados compartilhado, para que os usuários que estão acessando recebam os dados atualizados.\n- Escalabilidade: a escalabilidade reflete o quão rápido um sistema distribuído pode ser expandido. A escalabilidade pode ter diversos aspectos, podendo ser: de distribuição, de replication e de caching. A escalabilidade de distribuição é a habilidade do sistema distribuído em dividir dados/recursos entre as diversas máquinas que compõem o sistema distribuído; a escalabilidade de replicação é a habilidade do sistema distribuído em manter diversas cópias dos seus dados em diversas outras máquinas da rede, mantendo os dados consistentes e íntegros; por último, a escalabilidade de caching é a habilidade do sistema distribuído em gerenciar e permitir que os usuários acessem dados de forma local ou em servidores mais próximos ao usuário, reduzindo o tempo de acesso do usuário ao recursos e reduzindo o uso de rede de dados.\n\n• Tolerância a falhas: o sistema distribuído deve apresentar a característica de ser tolerante a falhas, ou seja, ao entrar em estado de falha, deve se recuperar de forma transparente, não percebendo que o usuário saiba que aconteceu. Para possibilitar a transparência a falhas, o sistema deve implementar mecanismos de identificação e recuperação de falhas automatizados. Por exemplo, imagine que em um computador que faz parte de um sistema distribuído o disco rígido falha e o usuário não consiga consultar os dados desejados, o sistema distribuído deve identificar essa falha e redirecionar as requisições desse servidor para um outro servidor que possua os mesmos dados. Tudo isso deve ser feito de forma transparente e automática, sem a ciência do usuário sobre o problema.\n\n• Disponibilidade: a disponibilidade é outra importante característica dos sistemas distribuídos. A disponibilidade é o tempo em que o sistema está disponível, operando de forma correta. Um sistema com alta disponibilidade se possui pouco tempo em estado de falha ou está inoperante. Geralmente, os grandes sistemas, como Google e Amazon, possuem disponibilidade de 99,99% de tempo, ou seja, passam poucos segundos por ano inoperantes. Ter uma alta disponibilidade é custoso para a organização, pois ela tem que investir no gerenciamento e reparo automático de falhas, na replicação de máquinas de forma distribuída geograficamente, hardware de alto desempenho etc.\n\n• Transparência: a transparência é uma meta importante dos sistemas distribuídos, visto que é a habilidade de esconder o fato de que os processos e recursos do sistema distribuído estão fisicamente separados em vários computadores que integram o sistema distribuído.\n\nVeja, a seguir, os principais tipos de transparências:\n\n• Acesso: o sistema distribuído não permite que o usuário saiba como os dados são representados dentro do sistema distribuído, por exemplo, se é usado um banco de dados relacional ou orientado a objetos, se é usada tecnologia X ou Y, dentre outras informações.\n\n• Localização: o sistema distribuído não permite que o usuário do sistema tenha conhecimento sobre a localização dos recursos, se ele é fornecido por máquina X com IP 10.0.0.1, ou por máquina Y com IP 10.0.0.5, por exemplo. Como exemplo, lembre-se do sistema distribuído para streaming de vídeos: quando o usuário acessa o sistema para assistir a um filme, ele não tem conhecimento de qual servidor vai fornecer o vídeo a ele, podendo ser até mais de um servidor (cada servidor pode fornecer metade do filme).\n\n• Migração: a transparência de migração esconde o usuário final do fato de que um recurso é movido de um servidor para outro; isso pode acontecer em tempo de execução (neste caso, se chama realocação). O usuário não tem conhecimento da mudança de um recurso, por exemplo, ao acessar um site a partir de um endereço URL, o usuário não sabe a localização do servidor que armazena o site. Nesse cenário, os administradores podem alterar o site de servidor e o usuário continuará sendo redirecionado ao site (recurso), mesmo que fornecido por outro servidor.\n\n• Relocação: a transparência de relocação é bem parecida com a de migração, porém, diferencia-se pelo fato de o recurso usado ser movido para outro local durante o uso pelo usuário final. Por exemplo, o usuário está assistindo a um filme que é fornecido em um servidor X e, por motivos de força maior, o funcionamento desse servidor precisa ser interrompido. O vídeo (recurso do servidor), juntamente com a conexão do usuário, é movido para um novo servidor, de forma transparente, sem a ciência do usuário. Assim, o usuário não consegue perceber que foi redirecionado para outro servidor.\n\n• Replicação: a transparência de replicação esconde do usuário quais e quantas vezes determinado recurso está copiado/replicado pela rede. em diversos computadores.\n\n• Concorrência: a transparência de concorrência de dados em sistemas distribuídos é a habilidade do sistema em esconder do usuário que diversos outros usuários estão usando o mesmo recurso de forma simultânea. O sistema garante consistência no dado que está sendo acessado e, com isso, provê a transparência.\n\n• Falha: a transparência de falha esconde do usuário final se o sistema provedor de recurso está em estado de falha, permitindo a recuperação da falha e manutenção do provimento do recurso ao usuário.\n\n• Persistência: a transparência de persistência esconde do usuário a informação do armazenamento e, assim, o usuário não sabe se o recurso que está acessando está armazenado em memória volátil ou em um armazenamento não volátil. Por exemplo, ao acessar o streaming de vídeo, os bytes são transmitidos pela rede para o usuário que requisitou; nesse cenário, o usuário não sabe se os bytes que ele está recebendo estavam armazenados em um HD ou se estavam na memória RAM do servidor de dados. 22/09/2021\nEad.br\n\nDito isso, você conseguiu identificar diversas características que podem estar presentes nos sistemas distribuídos? Percebeu como elas estão relacionadas? A seguir, você vai aprender um pouco mais sobre a taxonomia de Flynn.\n\nTaxonomia de Flynn\n\nA taxonomia proposta por Flynn (1972), chamada de taxonomia de Flynn, é uma classificação de arquiteturas para computadores. A taxonomia de Flynn é usada na arquitetura e definição de funcionalidades de processadores modernos.\n\nAs quatro classificações propostas por Flynn são baseadas no número de instruções concorrentes, diferenciando um fluxo de dados para instruções e outro fluxo para dados. Veja as classificações a seguir:\n\n1. Single Instruction Single Data (SISD): quando o sistema utiliza somente um fluxo de instruções e um fluxo único para os dados. Exemplos dessa categoria é o computador de Von Neumann e os computadores sequenciais de forma geral.\n2. Single Instruction Multiple Data (SIMD): quando o sistema possui um fluxo único de instruções e diversos fluxos para transferência de dados. Nessa categoria, temos os computadores vetoriais.\n3. Multiple Instruction Single Data (MISD): nessa categoria, o sistema possui diversos fluxos de instruções, mas somente um fluxo para transferência de dados. Essa categoria é bastante abstrata e não se encontram exemplos práticos de aplicação.\n4. Multiple Instruction Multiple Data (MIMD): nessa abordagem, o sistema possui diversos fluxos para a transferência de instruções e diversos\n\nhttps://lmu.blackboard.com/webapps/late-course_content.soap?BBLEARN.Controller&ACTION=OPEN_PLAYER&COURSE_ID=738496_18P... 10/32