Integração de aplicações em




         Luiz Eduardo Borges
     http://ark4n.wordpress.com/
Sumário
●   Integração de aplicações
●   Aplicações distribuídas
●   Camada de comunicação
●   Formatos de dados
●   Aplic...
Integração de aplicações (tradicional)


                    Aplicação                 Aplicação
                        A...
Integração através de middleware


                    Aplicação                Aplicação
                        A       ...
Middleware
●   É uma camada de software que conecta componentes
    ou aplicações, tendo como o objetivo a
    interoperab...
Aplicações distribuídas
Arquiteturas:
●   Computacional
●   De recursos
●   De aplicação ou híbrida
Modelo computacional

  O servidor distribui as
requisições e centraliza os
        resultados.


                        ...
Modelo de recursos
                                  Os clientes enviam as
    A                  B         requisições e ...
Modelo híbrido ou de aplicação
A aplicação se confunde com
a infraestrutura, provendo os
           recursos.


          ...
Modelos (comparação)

                 Computacional   Recursos     Híbrido


Escalabilidade      Média           Alta    ...
Aplicações distribuídas (requisito I)
   Primeiro requisito: definir
   a forma de comunicação
         entre os nós.


  ...
Aplicações distribuídas (requisito II)
Segundo requisito: manter
  os metadados sobre os
 nós, usuários, arquivos e
     o...
Aplicações distribuídas (requisito III)
Terceiro requisito: fazer o
    monitoramento e
controle dos componentes
       do...
Aplicações distribuídas (requisito IV)




    A            B




    C            D


                  Quarto requisito:...
Camada de comunicação
A camada torna
transparente os
                              Rede
 protocolos de
     rede.         ...
Camadas de comunicação em Python
●   PYRO
●   XML-RPC
●   Socket
PYRO (Python Remote Objects)
Implementa:
●   Um protocolo que permite a execução remota via
    TCP/IP de métodos de um ob...
PYRO (servidor)

import numpy
                                              Classe do objeto que será
import Pyro.core
   ...
PYRO (cliente)

# -*- coding: utf-8 -*-

import numpy
import Pyro.core

# Dados de teste
dados = numpy.random.rand(100)

#...
XML-RPC
Implementa:
●   Protocolo de execução remota de procedimentos.
●   Transferências de dados em XML usando HTTP ou
 ...
XML-RPC (servidor)

import numpy
from SimpleXMLRPCServer import SimpleXMLRPCServer

# Cria um servidor
server = SimpleXMLR...
XML-RPC (cliente)

import numpy
import xmlrpclib                            Conversão para tipos que o
                   ...
Socket
Implementa:
●   Acesso de baixo nível a biblioteca de sockets que
    disponível em praticamente qualquer sistema
 ...
Socket (servidor I)
import   cPickle
import   socket
import   threading
import   numpy                               Class...
Socket (servidor II)
# cria um socket INET STREAM
server = socket.socket(
   socket.AF_INET, socket.SOCK_STREAM)

# Associ...
Socket (cliente)
import cPickle
import socket
import numpy

# Dados
dados = numpy.random.rand(100)

# cria um socket INET ...
Comunicação (comparação)

                 PYRO        XML-RPC     Socket


Performance      Alta         Baixa       Alta...
YAML (YAML Ain't a Markup Language)
Implementa:
●   Formato de serialização de dados para texto, amigável
    para humanos...
YAML (exemplo)

- Artista: King Crimson   [{'Artista': 'King Crimson',
 Faixas:                    'Faixas': ['Starless',
...
Formatos (comparação)

                 YAML / JSON     XML      (c)Pickle


Performance        Média        Baixa       A...
Aplicações externas
Aplicações “pythônicas”:
●   BrOffice.org
●   Blender
●   GIMP
●   Inkscape
●   PostgreSQL
BrOffice.org
Implementa:
●   Suporte ao Python como linguagem de macro,
    permitindo a automatização de tarefas e a cons...
BrOffice.org (serviço)


             Interpretador


                PyUNO        BrOffice.org


Python UNO
  Bridge     ...
BrOffice.org (exemplo I)
# -*- coding: latin1 -*-

# Para iniciar o BrOffice.org como servidor:
# swriter.exe -headless
# ...
BrOffice.org (exemplo II)
# Inicio do quot;Boiler Platequot;...

# Contexto de componente local
loc = uno.getComponentCont...
BrOffice.org (exemplo III)
# Cria um documento novo no Writer
doc = desktop.loadComponentFromURL('private:factory/swriter'...
BrOffice.org (exemplo IV)
# Preenche a tabela
for row in xrange(rows):
   for col in xrange(cols):
      cel = chr(ord('A'...
BrOffice.org (exemplo V)
# URL de destino
url = uno.systemPathToFileUrl(os.path.abspath('musicas.pdf'))

# Salva o documen...
Referências
PYRO:
●   http://pyro.sourceforge.net/
Socket Programming HOWTO:
●   http://www.amk.ca/python/howto/sockets/
Y...
Integração de aplicações em




         Luiz Eduardo Borges
     http://ark4n.wordpress.com/

                Fim
Próximos SlideShares
Carregando em…5
×

Integração de aplicações em

2.462 visualizações

Publicada em

Luis Eduardo Borges

Publicada em: Tecnologia, Educação
0 comentários
2 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
2.462
No SlideShare
0
A partir de incorporações
0
Número de incorporações
23
Ações
Compartilhamentos
0
Downloads
78
Comentários
0
Gostaram
2
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

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

×