Programação em Sistemas Distribuídos (capítulo de livro)

  • View
    216

  • Download
    1

Embed Size (px)

Transcript

  • 2 Programao em Sistemas Distribudos

    Rmulo de Oliveira1 Joni Fraga1 Carlos Montez1

    Resumo: A reduo do preo de computadores e sua grande disseminao vm impulsionando

    a criao de redes de computadores. Hoje, essas redes esto em todos os lugares, e a Internet pode ser entendida como um grande e disperso sistema distribudo, que permite aos seus usurios o acesso a uma variedade de servios. So mltiplos os desafios enfrentados pelos projetistas desses sistemas frente aos problemas de heterogeneidade, segurana e confiabilidade.

    Este curso descreve os principais conceitos relacionados ao desenvolvimento de sistemas distribudos, tais como: heterogeneidade de representao de dados e marshaling; transparncias de distribuio e middleware; modelo cliente-servidor; Chamada de Procedimento Remoto (RPC); servios de nome e binding. Tambm sero abordadas duas das principais plataformas utilizadas para esse propsito atualmente: JAVA (com suas tecnologias relacionadas) e CORBA.

    1 Laboratrio de Controle e Microinformtica LCMI

    Depto de Automao e Sistemas DAS Universidade Federal de Santa Catarina UFSC e-mail: {romulo, fraga, montez}@das.ufsc.br

    X Escola de Informtica da SBC-Sul - ERI 2002

  • 2.1. Introduo A reduo do preo dos computadores e sua grande disseminao, a partir do

    surgimento de microcomputadores na dcada de 80, impulsionaram a criao de redes de computadores. Essas redes foram criadas, principalmente, devido necessidade de compartilhamento de recursos entre os computadores. Inicialmente, pequenas redes locais foram sendo instaladas nas instituies, e, posteriormente, a partir de meados da dcada de 90 no Brasil, elas foram se interligando Internet. Hoje, as redes de computadores esto em todos os lugares e a Internet pode ser entendida como um grande e disperso sistema distribudo que permite aos seus usurios acessarem servios, tais como www, email e transferncia de arquivos, entre muitos outros.

    Um sistema distribudo pode ser definido como aquele "formado por componentes de hardware e software, situados em redes de computadores, e que se comunicam e coordenam suas aes apenas atravs de trocas de mensagens" [Coulouris 2001]. A separao espacial dos computadores que formam esses sistemas distribudos pode variar desde poucos metros, em uma rede local, at quilmetros de distncia, em uma rede largamente dispersa. Da mesma maneira, podem variar bastante os desafios enfrentados pelos projetistas desses sistemas - frente aos problemas de heterogeneidade, segurana e confiabilidade (tolerncia a faltas).

    Envios e recepes de mensagens no ocorrem instantaneamente, e a conseqncia imediata do fato da comunicao entre os componentes dos sistemas distribudos se dar apenas por trocas de mensagens, a inexistncia de um relgio global, no qual todos os computadores possam se basear. Essa caracterstica dificulta a obteno de um estado global dos componentes do sistema, importante para a resoluo de uma srie de problemas de sincronizao que surgem nas aplicaes. Questes de coordenao e sincronizao em sistemas distribudos decorrem exatamente da sua caracterstica de concorrncia entre seus componentes e a necessidade de compartilhamento de recursos entre eles. Esses problemas formam uma classe que inclui a necessidade, entre outros, de algoritmos de eleio, deteco de deadlocks (impasses) distribudos, algoritmos de concordncia, etc [Lynch 1996].

    O objetivo deste texto no tratar de algoritmos distribudos, mas sim tratar de plataformas de software que suportam a execuo (facilitam a construo) de aplicaes distribudas. As primeiras propostas de plataformas para suportar a construo de aplicaes distribudas, no incio da dcada de oitenta, eram limitadas. Elas tratavam com sistemas homogneos e estavam baseadas em sistemas operacionais ou linguagens especiais para programao distribuda (ARGUS [Liskov 1988], Emerald [Jul 1991], CONIC [Kramer 1989]). Com a expanso dos sistemas tomando propores geogrficas considerveis e envolvendo diferentes tecnologias, a necessidade de padres e plataformas mais flexveis tornou-se evidente. Nesse sentido houve vrios esforos, tais como ODP [ISO 1995], ANSAware [ANSA], DCE [OSF]. Essas propostas serviram para demarcar o

    X Escola de Informtica da SBC-Sul - ERI 2002

  • caminho para o conjunto de padres para ambientes operacionais distribudos existentes atualmente.

    O propsito deste texto apresentar os conceitos fundamentais presentes no desenvolvimento de sistemas distribudos, assim como as principais plataformas utilizadas para esse propsito atualmente. O tema em si vasto, e existem livros inteiros para tratar do assunto, tais como [Tanenbaum 2002], [Coulouris 2001], [Birman 1996], [Lynch 1996]. Em funo da limitao de espao, este texto concentra-se na descrio de duas das tecnologias mais utilizadas atualmente para a construo de sistemas distribudos. A seo 2.2 apresenta os conceitos elementares da rea, presentes em qualquer plataforma que suporte a execuo de sistemas distribudos. Em seguida, a seo 2.3 descreve como aplicaes distribudas podem ser escritas em Java. A seo 2.4 faz o mesmo para o padro CORBA. Finalmente, a seo 2.5 contm as consideraes finais.

    2.2. Conceitos bsicos Toda a comunicao entre processos em um sistema distribudo baseada em trocas

    de mensagens, pois, conceitualmente, no h memria compartilhada. Quando vrios processos precisam se comunicar, necessria a adoo de protocolos, ou seja, acordos entre as partes que se comunicam, sobre como a comunicao se dar (formatos, contedos e significados de mensagens). Cada sistema final na rede executa protocolos que controlam o envio e recepo de informaes na rede.

    Atualmente, o conjunto de protocolos da Internet denominado TCP/IP [RFC 1180] se tornou um padro de facto em ambientes de sistemas distribudos. Seus dois protocolos mais importantes so o TCP (Transmition Control Protocol) orientado a conexes , e o IP (Internet Protocol), motivo pelo qual esse conjunto de protocolo conhecido como TCP/IP. A Figura 2.1 mostra a pilha de protocolos TCP/IP, comparando-a com as sete camadas do modelo ISO OSI [Stevens1998, Kurose 2001].

    Figura 2.1. Pilha de protocolos do Modelo OSI e TCP/IP.

    Fsica

    Enlace

    Rede

    Transporte

    Device Driver e Hardware

    IP

    TCP UDP

    Sesso

    Apresentao

    Aplicao

    Aplicao

    socket

    Modelo OSI Protocolos TCP/IP

    X Escola de Informtica da SBC-Sul - ERI 2002

  • As aplicaes usualmente tm acesso aos protocolos de transporte da rede usando sockets. Um socket pode ser concebido como um porto de entrada e de sada de cada processo. Cada processo envia e/ou recebe mensagens atravs de seus sockets. Devido ao fato que, usualmente, os protocolos de transporte da rede so implementados e controlados pelo sistema operacional, um socket tambm pode ser concebido como uma interface entre a aplicao e o substrato de comunicao do sistema operacional (Figura 2.2).

    Figura 2.2. Socket como interface de acesso rede. A programao de sistemas distribudos pode ser feita diretamente em uma

    linguagem de programao (ex. C, C++ ou Java), usando uma API (Application Program Interface Interface de Programao de Aplicaes) socket. Na seo 2.3.1, este texto apresenta os principais conceitos relacionados programao de aplicaes distribudas usando a API socket do Java [Harold 1997].

    2.2.1. Heterogeneidade de representao de dados e marshaling vivel a construo de grandes sistemas distribudos atravs da API socket.

    Entretanto, o programador de tais sistemas precisa lidar diretamente com uma srie de questes, tais como heterogeneidade de representao de dados e falta de transparncias de distribuio. Essas questes exacerbam a complexidade do sistema, desviando a ateno dos programadores do problema que deveria ser originalmente resolvido.

    Suponha, por exemplo, um sistema heterogneo, onde processos clientes e servidores residam em computadores com diferentes tipos de processadores. Ao trocar mensagens entre si, possvel que alguns dos processos representem um valor inteiro, com 2 bytes, usando a representao little-endian, enquanto outros processos usem a representao big-endian. A representao little-endian, usada pela Intel, representa o valor inteiro considerando o byte mais significativo antes do menos significativo. J a representao big-endian, usada, por exemplo, pelos processadores SPARC, o inverso. A Figura 2.3 mostra as duas formas de representao do valor inteiro 256 (100 na base 16).

    Figura 2.3. Representao big-endian e little-endian. big-endian

    01 00 little-endian

    00 01

    Processo socket

    TCP ou UDP, buffers, etc...

    Sistema Operacional

    Aplicao Processo socket

    TCP ou UDP, buffers, etc...

    Rede

    X Escola de Informtica da SBC-Sul - ERI 2002

  • Problemas semelhantes surgem com representaes diferentes para nmeros de ponto flutuantes, e at mesmo com representaes de cdigos de caracteres (ASCII ou EBCDIC). Envio de dados pelo suporte de comunicao, implica em empacot-los na forma de mensagens no momento do envio, e desempacot-los no momento de suas recepes. Representaes diferentes de dados podem gerar interpretaes diferentes dos valores dos dados. Para superar essas questes, um sistema distribudo pode adotar duas estratgias. A primeira a de converter todos os dados transmitidos para um formato comum, previamente conhecido por todos os processos. A segunda estratgia a de enviar junto com os dados, informaes de qual tipo de representao est sendo adotada naquela mensagem.

    Ambas as solues demandam trabalho adicional do programador e aumentam a complexidade do sistema. Com objetivo de facilitar a programao de sistemas distribudos, seria interessante que as questes da heterogeneidade dos dados, e o trabalho