O slideshow foi denunciado.
Seu SlideShare está sendo baixado. ×

Integração de aplicações em

Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Próximos SlideShares
Sistemas Distribuidos Java
Sistemas Distribuidos Java
Carregando em…3
×

Confira estes a seguir

1 de 40 Anúncio

Mais Conteúdo rRelacionado

Semelhante a Integração de aplicações em (20)

Anúncio

Mais recentes (20)

Integração de aplicações em

  1. 1. Integração de aplicações em Luiz Eduardo Borges http://ark4n.wordpress.com/
  2. 2. Sumário ● Integração de aplicações ● Aplicações distribuídas ● Camada de comunicação ● Formatos de dados ● Aplicações externas
  3. 3. Integração de aplicações (tradicional) Aplicação Aplicação A B Funções Bibliotecas disponíveis para as aplicações. Dados e regras de negócio precisam Ambiente que requer estar em um SGBD muita administração para garantir a para se manter Dados integridade e sigilo. organizado.
  4. 4. Integração através de middleware Aplicação Aplicação A B Funções disponíveis para Regras de negócio todas as Middleware aplicações. podem ficar em componentes. O ambiente requer muita padronização para se manter Dados organizado.
  5. 5. Middleware ● É uma camada de software que conecta componentes ou aplicações, tendo como o objetivo a interoperabilidade. ● Várias opções: – ZOPE (Z Object Publishing Environment) – WSGI (Web Server Gateway Interface) – Twisted – Muitos outros ● O próprio Python pode ser encarado como um middleware.
  6. 6. Aplicações distribuídas Arquiteturas: ● Computacional ● De recursos ● De aplicação ou híbrida
  7. 7. Modelo computacional O servidor distribui as requisições e centraliza os resultados. A B C D Os outros nós (workers) recebem as tarefas e calculam os resultados.
  8. 8. Modelo de recursos Os clientes enviam as A B requisições e recebem os resultados. C D E F Os servidores recebem as requisições e devolvem os G H resultados.
  9. 9. Modelo híbrido ou de aplicação A aplicação se confunde com a infraestrutura, provendo os recursos. A B C D Cada nó pode atuar como servidor e cliente, inclusive ao mesmo tempo.
  10. 10. Modelos (comparação) Computacional Recursos Híbrido Escalabilidade Média Alta Alta Complexidade Baixa Média Alta Tolerância a Média Alta Alta falhas Principal Processamento Infra Arquivos Aplicação memória Servidores Exemplo SETI@home P2P Web
  11. 11. Aplicações distribuídas (requisito I) Primeiro requisito: definir a forma de comunicação entre os nós. A B C D
  12. 12. Aplicações distribuídas (requisito II) Segundo requisito: manter os metadados sobre os nós, usuários, arquivos e outros recursos. A B C D
  13. 13. Aplicações distribuídas (requisito III) Terceiro requisito: fazer o monitoramento e controle dos componentes do sistema. A B C D
  14. 14. Aplicações distribuídas (requisito IV) A B C D Quarto requisito: manter a segurança (sigilo, integridade e disponibilidade) dos dados e sistemas envolvidos.
  15. 15. Camada de comunicação A camada torna transparente os Rede protocolos de rede. Máquina Máquina Framework Framework Aplicação Aplicação
  16. 16. Camadas de comunicação em Python ● PYRO ● XML-RPC ● Socket
  17. 17. PYRO (Python Remote Objects) Implementa: ● Um protocolo que permite a execução remota via TCP/IP de métodos de um objeto. ● Envio de estruturas de dados “serializáveis” como parâmetros. ● Servidor de nomes que facilita a localização automática dos métodos. ● Validadores para verificar as credenciais do cliente.
  18. 18. PYRO (servidor) import numpy Classe do objeto que será import Pyro.core publicado na rede pelo PYRO. class Dist(Pyro.core.ObjBase): def fft(self, l): Método que calcula a return numpy.fft.fft(l) transformada de Fourier. # Inicia a thread do servidor Pyro.core.initServer() # Cria o servidor daemon = Pyro.core.Daemon() # Publica o objeto uri = daemon.connect(Dist(),'dist') # Coloca o servidor em estado operacional daemon.requestLoop()
  19. 19. PYRO (cliente) # -*- coding: utf-8 -*- import numpy import Pyro.core # Dados de teste dados = numpy.random.rand(100) # Cria um objeto local para acessar o objeto remoto proxy = Pyro.core.getProxyForURI('PYROLOC://127.0.0.1/dist') # Evoca um método do objeto distribuído print proxy.fft(dados)
  20. 20. XML-RPC Implementa: ● Protocolo de execução remota de procedimentos. ● Transferências de dados em XML usando HTTP ou HTTPS (criptografado) como protocolo de transporte. ● Suporte a tipos básicos: inteiro, ponto flutuante, texto, ...
  21. 21. XML-RPC (servidor) import numpy from SimpleXMLRPCServer import SimpleXMLRPCServer # Cria um servidor server = SimpleXMLRPCServer(('localhost', 8888)) server.register_introspection_functions() Conversão para tipos que o def fft(l): XML-RPC aceita. return [ float(x) for x in numpy.fft.fft(l) ] server.register_function(fft) # Inicia o loop do servidor server.serve_forever()
  22. 22. XML-RPC (cliente) import numpy import xmlrpclib Conversão para tipos que o XML-RPC aceita. # Dados de teste dados = [ float(x) for x in numpy.random.rand(100) ] server = xmlrpclib.Server(quot;http://localhost:8888quot;) # Evoca o procedimento remoto print server.fft(dados)
  23. 23. Socket Implementa: ● Acesso de baixo nível a biblioteca de sockets que disponível em praticamente qualquer sistema operacional atual. ● Conexões ponto a ponto vai TCP/IP.
  24. 24. Socket (servidor I) import cPickle import socket import threading import numpy Classe que implementa as threads para o servidor. class Server(threading.Thread): def __init__(self, skt): self.skt = skt threading.Thread.__init__ (self) Método que é executado na thread. def run(self): # Recebe os dados Dados foram serializados no rec = self.skt.recv(5000) cliente. # Calcula o resultado ff = numpy.fft.fft(cPickle.loads(rec)) # Retorna a resposta self.skt.send(cPickle.dumps(ff)) Continua...
  25. 25. Socket (servidor II) # cria um socket INET STREAM server = socket.socket( socket.AF_INET, socket.SOCK_STREAM) # Associa o socket a uma porta na interface de rede server.bind((socket.gethostname(), 8000)) # Passa a quot;ouvirquot; a porta server.listen(5) while True: # aceita acesso externo (skt, addr) = server.accept() svr =Server(skt) svr.start()
  26. 26. Socket (cliente) import cPickle import socket import numpy # Dados dados = numpy.random.rand(100) # cria um socket INET STREAM svr = socket.socket( socket.AF_INET, socket.SOCK_STREAM) # Conecta na interface de rede svr.connect((socket.gethostname(), 8000)) svr.send(cPickle.dumps(dados)) # Recebe a resposta rec = svr.recv(5000) Os resultados foram print cPickle.loads(rec) serializados no servidor.
  27. 27. Comunicação (comparação) PYRO XML-RPC Socket Performance Alta Baixa Alta Portabilidade Baixa Alta Alta Depende da Escalabilidade Alta Baixa aplicação Complexidade Baixa Média Alta Dependências Média Baixa Baixa
  28. 28. YAML (YAML Ain't a Markup Language) Implementa: ● Formato de serialização de dados para texto, amigável para humanos. ● Representação de dados através de combinações de listas, dicionários e escalares. ● Convenções de sintaxe similares as linguagens dinâmicas, com forte influência do Python. ● Um superset do JSON (JavaScript Object Notation).
  29. 29. YAML (exemplo) - Artista: King Crimson [{'Artista': 'King Crimson', Faixas: 'Faixas': ['Starless', - Starless 'Frature', - Frature 'Red', 'Lizard']}, - Red {'Artista': 'Genesis', - Lizard 'Faixas': [quot;Supper's Readyquot;, - Artista: Genesis 'In The Cage', Faixas: 'The Lamia']}] - Supper's Ready - In The Cage - The Lamia Documento Estrutura YAML Python
  30. 30. Formatos (comparação) YAML / JSON XML (c)Pickle Performance Média Baixa Alta Portabilidade Alta Alta Baixa Escalabilidade Média Alta Alta Complexidade Baixa Média Baixa Dependências Média Baixa Baixa
  31. 31. Aplicações externas Aplicações “pythônicas”: ● BrOffice.org ● Blender ● GIMP ● Inkscape ● PostgreSQL
  32. 32. BrOffice.org Implementa: ● Suporte ao Python como linguagem de macro, permitindo a automatização de tarefas e a construção de extensões (add ons). ● Serviço para atender conexões, através de uma API chamada UNO (Universal Network Objects).
  33. 33. BrOffice.org (serviço) Interpretador PyUNO BrOffice.org Python UNO Bridge Aceita conexões remotas via named pipes ou sockets. Aplicação
  34. 34. BrOffice.org (exemplo I) # -*- coding: latin1 -*- # Para iniciar o BrOffice.org como servidor: # swriter.exe -headless # quot;-accept=pipe,name=py;urp;StarOffice.ServiceManagerquot; import os import uno from com.sun.star.beans import PropertyValue # Dados... mus = [('Artista', 'Faixa'), ('King Crimson', 'Starless'), ('Yes', 'Siberian Khatru'), ('Led Zeppellin', 'No Quarter'), ('Genesis', 'Supper's Ready')] rows = len(mus) cols = len(mus[0]) Continua...
  35. 35. BrOffice.org (exemplo II) # Inicio do quot;Boiler Platequot;... # Contexto de componente local loc = uno.getComponentContext() # Para resolver URLs res = loc.ServiceManager.createInstanceWithContext( 'com.sun.star.bridge.UnoUrlResolver', loc) # Contexto para a URL con = res.resolve('uno:pipe,name=py;urp;StarOffice.ComponentContext') # Documento corrente desktop = con.ServiceManager.createInstanceWithContext( 'com.sun.star.frame.Desktop', con) # Fim do quot;Boiler Platequot;... Continua...
  36. 36. BrOffice.org (exemplo III) # Cria um documento novo no Writer doc = desktop.loadComponentFromURL('private:factory/swriter', '_blank', 0, ()) # Cursor de texto cursor = doc.Text.createTextCursor() # Muda propriedades Texto cursor.setPropertyValue('CharFontName', 'Verdana') inserido cursor.setPropertyValue('CharHeight', 20) cursor.setPropertyValue('CharWeight', 180) doc.Text.insertString(cursor, 'Músicas favoritasn', 0) # Cria tabela tab = doc.createInstance('com.sun.star.text.TextTable') tab.initialize(rows, cols) doc.Text.insertTextContent(cursor, tab, 0) Continua...
  37. 37. BrOffice.org (exemplo IV) # Preenche a tabela for row in xrange(rows): for col in xrange(cols): cel = chr(ord('A') + col) + str(row + 1) tab.getCellByName(cel).setString(mus[row][col]) Tabela # Propriedades para exportar o documento props = [] p = PropertyValue() p.Name = 'Overwrite' p.Value = True # Sobrescreve o documento anterior props.append(p) p = PropertyValue() p.Name = 'FilterName' p.Value = 'writer_pdf_Export' # Writer para PDF props.append(p) Continua...
  38. 38. BrOffice.org (exemplo V) # URL de destino url = uno.systemPathToFileUrl(os.path.abspath('musicas.pdf')) # Salva o documento como PDF doc.storeToURL(url, tuple(props)) # Fecha o documento doc.close(True) Arquivo de saída
  39. 39. Referências PYRO: ● http://pyro.sourceforge.net/ Socket Programming HOWTO: ● http://www.amk.ca/python/howto/sockets/ YAML Cookbook: ● http://yaml4r.sourceforge.net/cookbook/ Python – OpenOffice.org Wiki: ● http://wiki.services.openoffice.org/wiki/Python
  40. 40. Integração de aplicações em Luiz Eduardo Borges http://ark4n.wordpress.com/ Fim

×