Sistemas Distribuídos Projeto de Sistemas Distribuídos Especialização em Redes de Computadores Prof. Fábio M. Costa Instituto de Informática - UFG Visão Geral • Evolução da Tecnologia de Objetos • Uso de UML no Projeto de Objetos Distribuídos • Um Meta-Modelo para Objetos Distribuídos • Objetos Locais X Objetos Remotos Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 2 Evolução da Tecnologia de Objetos Distribuídos Uma Breve História de Objetos Time DCOM CORBA Java UML COM OOAD 1990 Eiffel DCE C++ 1980 Sun ONC 1970 Original: Wolfgang Emmerich, 2000 Smalltalk Information Hiding Simula-67 Prof. Fábio M. Costa - Instituto de Informática / UFG 4 Uso de UML no Projeto de Objetos Distribuídos Motivação • No início dos anos 90: cerca de 10 notações para o desenvolvimento orientado a objetos • Usadas para expressar as características de objetos: – propriedades estáticas e dinâmicas – propriedades de tipos e instâncias de objetos • Em 96/97: Unificação das três principais notações (Booch, Rumbaugh, Jacobson) • Em Nov/97: Adoção como um padrão do OMG • Padrão hoje dominante na indústria • Adequado para o design de objetos distribuídos Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 6 UML • Várias notações em um único padrão • Cada notação utiliza um tipo de diagrama apropriado para modelar um sistema de objetos a partir de um certo “ponto de vista” – – – – – – Diagramas de Casos de Uso Diagramas de Seqüência Diagramas de Classe Diagramas de Pacotes Diagramas de Objetos Diagramas de Estados Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 7 Diagramas de Casos de Uso Treinador Planejar Escala de Treinos caso de uso ator Determinar Jogos do Campeonato Federação Nacioal de Futebol Técnico Jogador Original: Wolfgang Emmerich, 2000 Imprimir Escala Pessoal limites do sistema Prof. Fábio M. Costa - Instituto de Informática / UFG 8 Diagramas de Seqüência chamada mensagem (remota) de síncrona procedimento Tony:Trainer BvB:Team bookGoalies Teddy:Player Nome Objeto Tipo Stefan:Player :Output book() book() printTrainingPlan ativação do objeto Original: Wolfgang Emmerich, 2000 linha de tempo mensagem assíncrona destruição do objeto Prof. Fábio M. Costa - Instituto de Informática / UFG 9 Diagramas de Classes Organization protegido #name:string dependência generalização agregação Club -noOfMembers:int 1 -location:Address +transfer(p:Player) 1..* works for Trainer -name:string uses cardinalidade 1..* composição associação 1..* nome da classe Player atributos Team plays in -name:string privado -role:Position -name:string público 1 11..16 -Number:int +bookGoalies() operações +book() Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 10 Diagrama de Pacotes Soccer Clubs League Management National Team Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 11 Diagrama de Objetos (Instâncias) Nome do Objeto Nome do Atributo Tipo do Objeto spurs:Team name = “Tottenham Hotspurs” Ligação klinsi:Player name=“Jürgen Klinsmann” role=Forward Number = 18 Original: Wolfgang Emmerich, 2000 Objeto Valor do Atributo stefan:Player name = “Stefan Freund” role = Defender Number=4 Prof. Fábio M. Costa - Instituto de Informática / UFG 12 Diagramas de Estado in team ação durante transição healthy estado composto in match estado playing /swap /swap [!in_squad] /play /injury reserve injured [!in_squad] /play transição /recovered /finish condição /finish free training /exercise Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG indica estado default 13 Composição de Estados em Paralelo Player /unsatisfaction happy /sign_contract on transfer list threads concorrentes /resign in team Original: Wolfgang Emmerich, 2000 estado final Prof. Fábio M. Costa - Instituto de Informática / UFG 14 Um Meta-Modelo para Objetos Distribuídos Motivação • Sistemas distribuídos consistem de múltiplos componentes • Componentes são heterogêneos... • ...Mas precisam ser interoperáveis • Deve haver um modelo comum para componentes que expresse: – os estados dos componentes – os serviços oferecidos pelos componentes – as interações entre componentes Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 16 A Abordagem O-O para Sistemas Distribuídos Conceitos Genéricos Modelo Orientado a Objetos Componentes Objetos Estado visível dos componentes Atributos dos objetos Serviços providos pelos componentes Interações entre componentes Falhas de serviço dos componentes Original: Wolfgang Emmerich, 2000 operações dos objetos (interface) Requisições para execução de operações Exceções Prof. Fábio M. Costa - Instituto de Informática / UFG 17 Necessidade de um MetaModelo de Objetos • Há múltiplas abordagens orientadas a objetos • O middleware de distribuição deve definir um modelo de objetos que possa servir como uma base comum para componentes heterogêneos • Um modelo genérico de objetos distribuídos que captura as características comuns entre os modelos de objetos de diferentes plataformas de middleware Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 18 Diferentes Níveis de Abstração Original: Wolfgang Emmerich, 2000 Meta-Object Facility Level 3 Meta Object Model Level 2 Object Types Level 1 Objects Level 0 Prof. Fábio M. Costa - Instituto de Informática / UFG 19 Objeto • Possui um identificador único • Pode haver múltiplas referências diferentes que apontam para um mesmo objeto – Referência de objeto – Usadas por clientes para se referirem ao objeto • Possui um conjunto de atributos denotando valores de dados mantidos pelo objeto estado do objeto • Relações de equivalência entre referências de objeto – Objetos iguais (encapsulam os mesmos dados) – Objetos idênticos (mesmo objeto) • Acesso ao estado do objeto: via operações Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 20 Exemplo de Objeto klinsi:Player name = “Jürgen Klinsmann” role = Forward Number = 18 Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 21 Tipo de Objeto • Define as propriedades de um objeto que são exportadas para outros objetos (clientes) – Atributos, operações, exceções • Múltiplos objetos podem exportar as mesmas propriedades – Possuem o mesmo tipo • Definição de tipo feita apenas uma vez – Instanciação cria objetos com as propriedades definidas no tipo Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 22 Atributos • Definidos por meio de um nome e um tipo • Tipo de atributo: tipo de objeto ou tipo elementar (não-objeto) • Atributos podem ou não ser visíveis a outros objetos • Um atributo pode ou não ser modificável por outros objetos • Acesso a um atributo: via operações – get: obtém o valor atual do atributo – set: altera o valor do atributo Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 23 Exceções • Requisições de serviço em um sistema distribuído podem não ser propriamente executadas • Exceções: mecanismo usado para reportar o motivo da falha para o objeto que requisitou a operação • Duas categorias de exceções: – Genéricas: geradas pela plataforma – Específicas: geradas pela aplicação em particular – devem ser implementadas Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 24 Operações • Uma operação é definida através de uma assinatura, composta de: – – – – um nome para a operação uma lista de parâmetros (in, out, e inout) um tipo de valor de retorno uma lista de exceções que uma chamada da operação pode gerar (em caso de falhas) Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 25 Exemplo de Tipo de Objeto <<interface>> Player -name:string; -role:Position; -Number:int; +void book(in Date d) raises (AlreadyBooked); Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 26 Requisições • Um objeto cliente pode requisitar a execução de uma operação por parte de um objeto servidor • Através do envio de uma mensagem para o objeto servidor, contendo: – nome da operação e parâmetros (in e inout) • Objetos servidores são identificados através de referências de objeto • Clientes devem ser preparados para reagir a exceções que a requisição possa gerar Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 27 Sub-Tipos • Propriedades compartilhadas por vários tipos deveriam ser definidas apenas uma vez • Tipos de objetos são organizados em uma hierarquia de tipos • Sub-tipos herdam atributos, exceções e operações de seus super-tipos • Sub-tipos podem redefinir propriedades herdadas, bem como adicionar novas proprs. Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 28 Herança Múltipla • Significa que um mesmo tipo de objeto pode ser sub-tipo de mais do que um supertipo • Nem todo middleware suporta esta característica • Pode levar a ambigüidades – Ex.: mesmo atributo ou operação definido em dois super-tipos Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 29 Exemplo de Herança Múltipla <<interface>> Trainer -salary:int; +next_game():Date <<interface>> Player -name:string; -role:Position; -Number:int; +void book(in Date d) raises (AlreadyBooked); +next_game():Date <<interface>> PlayerTrainer Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 30 Polimorfismo • Modelos de objetos podem ser estaticamente tipados • Variáveis com tipos estáticos restrigem o tipo dos objetos aos quais podem ser associadas • Polimorfismo permite que a uma variável sejam associados tando objetos do mesmo tipo (estático) da variável quanto objetos que são instâncias de algum de seus sub-tipos Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 31 Exemplo de Polimorfismo chelsea:Team name = “Chelsea” v:PlayerTrainer name = “Gianluca Vialli” role = Forward Number = 10 salary=1000000 d:Player name = “Marcel Desailly” role=Defender Number=5 z:Player name = “Gianfranco Zola” role=Forward Number=3 Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 32 Objetos Locais versus Objetos Distribuídos Motivação • Aproveitar a experiência com o projeto de sistemas orientados a objetos no ambiente local de linguagens de programação OO • Projeto de objetos distribuídos é diferente • Analisar as diferenças • Evitar alguns problemas mais comuns Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 34 Características estudadas • • • • • • • • Referências Ativação / Desativação Migração Persistência Latência (atraso) de requisições Concorrência Comunicação Segurança Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 35 Ciclo de Vida de um Objeto • Objetos criados com uma linguagem de programação OO residem em uma máquina virtual • Objetos distribuídos podem ser criados em máquinas diferentes • Podem ser copiados ou movidos (migrados) de uma máquina para outra • Destruição de objetos: coleta de lixo não funciona bem em sistemas distribuídos • Ciclo de vida requer atenção especial durante o projeto de objetos distribuídos Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 36 Referências de Objeto • Em linguagens de programação OO: – Ponteiros para endereços de memória • Em sistemas distribuídos: – Informação de localização – Informação de segurança – Referência para o tipo do objeto • Referências para objetos distribuídos tendem a ser maiores (ex.: 40 bytes em Orbix) Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 37 Latência das Requisições • Chamada de método local: ≈200ns • Requisição remota: alguns milisegundos • Esta diferença (uma ordem de magnitude) precisa ser levada em consideração no projeto das interfaces de objetos distribuídos: – operações devem realizar tarefas “maiores” – requisições não devem ser muito freqüentes Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 38 Exemplo: Iteração em uma Seqüência de Objetos • Java (local) • Objetos Distribuídos Vector List +size():int +elementAt(i:int):Object ... +long list (in how_many:long, out l:sequence<object>, out bi:Iterator i) Iterator +next_one(out o:Object): boolean +next_n(in how_many:long, out l:sequence<object>):boolean Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 39 Ativação / Desativação • Objetos em uma linguagem de programação OO estão alocados em memória (virtual) todo o tempo (desde sua criação até sua destruição) • Inapropriado para objetos distribuídos – grande número de objetos – objetos podem ficar sem uso por muito tempo – alguns hosts podem ser desligados • Implementações de objetos distribuídos são – trazidas para a memória quando necessárias (ativação) – descartadas da memória (desativação) Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 40 Ativação / Desativação (cont.) Tony:Trainer BvB:Team bookGoalies Objeto ativado Desativação do objeto Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 41 Ativação / Desativação (cont.) • Questões importantes que surgem: – – – – – Repositório de implementação Associação entre objetos e processos Ativação implícita vs. explícita Quando desativar objetos Como lidar com requisições concorrentes • Quem decide sobre estas questões: – Projetista, Programador, Administrador • Documentar todas as decisões Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 42 Persistência • Objetos com estado Vs. Objetos sem estado • Objetos com estado devem salvar seu estado entre desativações e ativações sucessivas • Em espaço de armazenamento persistente – Sistema de arquivos – Banco de dados relacional – Banco de dados OO • Faz parte do projeto de um objeto Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 43 Paralelismo • Execução de objetos no ambiente de uma linguagem de programação OO – Seqüêncial – Concorrente (com múltiplos threads) • Objetos distribuídos executam em paralelo • Isto pode ser usado para acelerar a computação • Mas requer mecanismos de controle de concorrência Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 44 Comunicação • Chamadas de métodos em linguagens de programação OO são síncronas – chamador pára e espera pela resposta • Alternativas para objetos distribuídos – – – – requisições síncronas requisições oneway (sem resposta) requisições síncronas atrasadas requisições assíncronas • Quem decide qual tipo usar: – Projetista do servidor? – Projetista do cliente? • Alternativas disponíveis devem ser documentadas Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 45 Falhas • Objetos distribuídos são mais susceptíveis a falhas do que objetos centralizados – Podem falhar independentemente dos clientes • Diferentes níveis de confiabilidade para as requisições podem estar disponíveis • Clientes devem verificar se o servidor realmente executou a requisição – Ex.: através de exceções Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 46 Segurança • Segurança em aplicações OO pode ser tratada no nível de seção • Objetos em linguagens de programação OO não requerem grandes preocupações com segurança • Em objetos distribuídos: – – – – Quem está requisitando a execução de uma operação? Como saber que o chamador é quem ele diz ser? Como decidir se permite ou não acesso a um serviço? Como provar que o serviço foi provido (de forma que uma fatura possa ser emitida) Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 47 Pontos-Chave • Objetos distribuídos passaram de um tema de pesquisa em linguagens de programação para a agenda de sistemas distribuídos • UML pode ser utilizada para o projeto de objetos distribuídos • Meta-modelos definem as características de objetos distribuídos conforme suportados por uma determinada plataforma • Projetistas devem estar conscientes das diferenças entre objetos locais e objetos distribuídos Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 48