Top Banner
Integração de aplicações em Luiz Eduardo Borges http://ark4n.wordpress.com/
40

Integração de Aplicações em Python · Integração através de middleware Aplicação A Aplicação B Regras de negócio podem ficar em componentes. Middleware Funções disponíveis

Nov 21, 2018

Download

Documents

dangtuong
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Integração de Aplicações em Python · Integração através de middleware Aplicação A Aplicação B Regras de negócio podem ficar em componentes. Middleware Funções disponíveis

Integração de aplicações em

Luiz Eduardo Borgeshttp://ark4n.wordpress.com/

Page 2: Integração de Aplicações em Python · Integração através de middleware Aplicação A Aplicação B Regras de negócio podem ficar em componentes. Middleware Funções disponíveis

Sumário

● Integração de aplicações

● Aplicações distribuídas

● Camada de comunicação

● Formatos de dados

● Aplicações externas

Page 3: Integração de Aplicações em Python · Integração através de middleware Aplicação A Aplicação B Regras de negócio podem ficar em componentes. Middleware Funções disponíveis

Integração de aplicações (tradicional)

Ambiente que requer muita administração

para se manter organizado.

Funções disponíveis para as aplicações.

Dados e regras de negócio precisam estar em um SGBD

para garantir a integridade e sigilo.

AplicaçãoA

AplicaçãoB

Bibliotecas

Dados

Page 4: Integração de Aplicações em Python · Integração através de middleware Aplicação A Aplicação B Regras de negócio podem ficar em componentes. Middleware Funções disponíveis

Integração através de middleware

AplicaçãoA

AplicaçãoB

Regras de negócio podem ficar em componentes.

Middleware

Funções disponíveis para

todas as aplicações.

Dados

O ambiente requer muita padronização

para se manter organizado.

Page 5: Integração de Aplicações em Python · Integração através de middleware Aplicação A Aplicação B Regras de negócio podem ficar em componentes. Middleware Funções disponíveis

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.

Page 6: Integração de Aplicações em Python · Integração através de middleware Aplicação A Aplicação B Regras de negócio podem ficar em componentes. Middleware Funções disponíveis

Aplicações distribuídas

Arquiteturas:

● Computacional

● De recursos

● De aplicação ou híbrida

Page 7: Integração de Aplicações em Python · Integração através de middleware Aplicação A Aplicação B Regras de negócio podem ficar em componentes. Middleware Funções disponíveis

Modelo computacional

A B

C D

O servidor distribui as requisições e centraliza os

resultados.

Os outros nós (workers) recebem as tarefas e

calculam os resultados.

Page 8: Integração de Aplicações em Python · Integração através de middleware Aplicação A Aplicação B Regras de negócio podem ficar em componentes. Middleware Funções disponíveis

Modelo de recursos

A B

C D E F

G HOs servidores recebem as requisições e devolvem os

resultados.

Os clientes enviam as requisições e recebem

os resultados.

Page 9: Integração de Aplicações em Python · Integração através de middleware Aplicação A Aplicação B Regras de negócio podem ficar em componentes. Middleware Funções disponíveis

Modelo híbrido ou de aplicação

A B

C D

A aplicação se confunde com a infraestrutura, provendo os

recursos.

Cada nó pode atuar como servidor e cliente, inclusive

ao mesmo tempo.

Page 10: Integração de Aplicações em Python · Integração através de middleware Aplicação A Aplicação B Regras de negócio podem ficar em componentes. Middleware Funções disponíveis

Modelos (comparação)

Escalabilidade

Complexidade

Tolerância a falhas

Exemplo

PrincipalAplicação

Computacional

Média

Baixa

Média

SETI@home

Processamento memória

Recursos

Alta

Média

Alta

Servidores Web

Infra

Híbrido

Alta

Alta

Alta

P2P

Arquivos

Page 11: Integração de Aplicações em Python · Integração através de middleware Aplicação A Aplicação B Regras de negócio podem ficar em componentes. Middleware Funções disponíveis

Aplicações distribuídas (requisito I)

A B

C D

Primeiro requisito: definir a forma de comunicação

entre os nós.

Page 12: Integração de Aplicações em Python · Integração através de middleware Aplicação A Aplicação B Regras de negócio podem ficar em componentes. Middleware Funções disponíveis

Aplicações distribuídas (requisito II)

A B

C D

Segundo requisito: manter os metadados sobre os

nós, usuários, arquivos e outros recursos.

Page 13: Integração de Aplicações em Python · Integração através de middleware Aplicação A Aplicação B Regras de negócio podem ficar em componentes. Middleware Funções disponíveis

Aplicações distribuídas (requisito III)

A B

C D

Terceiro requisito: fazer o monitoramento e

controle dos componentes do sistema.

Page 14: Integração de Aplicações em Python · Integração através de middleware Aplicação A Aplicação B Regras de negócio podem ficar em componentes. Middleware Funções disponíveis

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.

Page 15: Integração de Aplicações em Python · Integração através de middleware Aplicação A Aplicação B Regras de negócio podem ficar em componentes. Middleware Funções disponíveis

Camada de comunicação

Rede

Máquina

Aplicação

Framework

Máquina

Aplicação

Framework

A camada torna transparente os protocolos de

rede.

Page 16: Integração de Aplicações em Python · Integração através de middleware Aplicação A Aplicação B Regras de negócio podem ficar em componentes. Middleware Funções disponíveis

Camadas de comunicação em Python

● PYRO

● XML-RPC

● Socket

Page 17: Integração de Aplicações em Python · Integração através de middleware Aplicação A Aplicação B Regras de negócio podem ficar em componentes. Middleware Funções disponíveis

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.

Page 18: Integração de Aplicações em Python · Integração através de middleware Aplicação A Aplicação B Regras de negócio podem ficar em componentes. Middleware Funções disponíveis

PYRO (servidor)

import numpyimport Pyro.core

class Dist(Pyro.core.ObjBase): def fft(self, l): return numpy.fft.fft(l)

# Inicia a thread do servidorPyro.core.initServer()

# Cria o servidordaemon = Pyro.core.Daemon()

# Publica o objetouri = daemon.connect(Dist(),'dist')

# Coloca o servidor em estado operacionaldaemon.requestLoop()

Classe do objeto que será publicado na rede pelo PYRO.

Método que calcula a transformada de Fourier.

Page 19: Integração de Aplicações em Python · Integração através de middleware Aplicação A Aplicação B Regras de negócio podem ficar em componentes. Middleware Funções disponíveis

PYRO (cliente)

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

import numpyimport Pyro.core

# Dados de testedados = numpy.random.rand(100)

# Cria um objeto local para acessar o objeto remotoproxy = Pyro.core.getProxyForURI('PYROLOC://127.0.0.1/dist')

# Evoca um método do objeto distribuídoprint proxy.fft(dados)

Page 20: Integração de Aplicações em Python · Integração através de middleware Aplicação A Aplicação B Regras de negócio podem ficar em componentes. Middleware Funções disponíveis

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, ...

Page 21: Integração de Aplicações em Python · Integração através de middleware Aplicação A Aplicação B Regras de negócio podem ficar em componentes. Middleware Funções disponíveis

XML-RPC (servidor)

import numpyfrom SimpleXMLRPCServer import SimpleXMLRPCServer

# Cria um servidorserver = SimpleXMLRPCServer(('localhost', 8888))server.register_introspection_functions()

def fft(l):

return [ float(x) for x in numpy.fft.fft(l) ]

server.register_function(fft)

# Inicia o loop do servidorserver.serve_forever()

Conversão para tipos que o XML-RPC aceita.

Page 22: Integração de Aplicações em Python · Integração através de middleware Aplicação A Aplicação B Regras de negócio podem ficar em componentes. Middleware Funções disponíveis

XML-RPC (cliente)

import numpyimport xmlrpclib

# Dados de testedados = [ float(x) for x in numpy.random.rand(100) ]

server = xmlrpclib.Server("http://localhost:8888")

# Evoca o procedimento remotoprint server.fft(dados)

Conversão para tipos que o XML-RPC aceita.

Page 23: Integração de Aplicações em Python · Integração através de middleware Aplicação A Aplicação B Regras de negócio podem ficar em componentes. Middleware Funções disponíveis

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.

Page 24: Integração de Aplicações em Python · Integração através de middleware Aplicação A Aplicação B Regras de negócio podem ficar em componentes. Middleware Funções disponíveis

Socket (servidor I)

import cPickleimport socketimport threadingimport numpy

class Server(threading.Thread):

def __init__(self, skt): self.skt = skt threading.Thread.__init__ (self)

def run(self): # Recebe os dados rec = self.skt.recv(5000) # Calcula o resultado ff = numpy.fft.fft(cPickle.loads(rec)) # Retorna a resposta self.skt.send(cPickle.dumps(ff))

Continua...

Classe que implementa as threads para o servidor.

Método que é executado na thread.

Dados foram serializados no cliente.

Page 25: Integração de Aplicações em Python · Integração através de middleware Aplicação A Aplicação B Regras de negócio podem ficar em componentes. Middleware Funções disponíveis

Socket (servidor II)

# cria um socket INET STREAMserver = socket.socket( socket.AF_INET, socket.SOCK_STREAM)

# Associa o socket a uma porta na interface de redeserver.bind((socket.gethostname(), 8000))

# Passa a "ouvir" a portaserver.listen(5)

while True: # aceita acesso externo (skt, addr) = server.accept() svr =Server(skt) svr.start()

Page 26: Integração de Aplicações em Python · Integração através de middleware Aplicação A Aplicação B Regras de negócio podem ficar em componentes. Middleware Funções disponíveis

Socket (cliente)

import cPickleimport socketimport numpy

# Dadosdados = numpy.random.rand(100)

# cria um socket INET STREAMsvr = socket.socket( socket.AF_INET, socket.SOCK_STREAM)

# Conecta na interface de redesvr.connect((socket.gethostname(), 8000))svr.send(cPickle.dumps(dados))

# Recebe a respostarec = svr.recv(5000)print cPickle.loads(rec)

Os resultados foram serializados no servidor.

Page 27: Integração de Aplicações em Python · Integração através de middleware Aplicação A Aplicação B Regras de negócio podem ficar em componentes. Middleware Funções disponíveis

Comunicação (comparação)

Performance

Portabilidade

Escalabilidade

Complexidade

Dependências

PYRO

Alta

Baixa

Alta

Baixa

Média

XML-RPC

Baixa

Alta

Baixa

Média

Baixa

Socket

Alta

Alta

Depende da aplicação

Alta

Baixa

Page 28: Integração de Aplicações em Python · Integração através de middleware Aplicação A Aplicação B Regras de negócio podem ficar em componentes. Middleware Funções disponíveis

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).

Page 29: Integração de Aplicações em Python · Integração através de middleware Aplicação A Aplicação B Regras de negócio podem ficar em componentes. Middleware Funções disponíveis

YAML (exemplo)

- Artista: King Crimson Faixas: - Starless - Frature - Red - Lizard- Artista: Genesis Faixas: - Supper's Ready - In The Cage - The Lamia

[{'Artista': 'King Crimson', 'Faixas': ['Starless', 'Frature', 'Red', 'Lizard']}, {'Artista': 'Genesis', 'Faixas': ["Supper's Ready", 'In The Cage', 'The Lamia']}]

Estrutura Python

Documento YAML

Page 30: Integração de Aplicações em Python · Integração através de middleware Aplicação A Aplicação B Regras de negócio podem ficar em componentes. Middleware Funções disponíveis

Formatos (comparação)

Performance

Portabilidade

Escalabilidade

Complexidade

Dependências

YAML / JSON

Média

Alta

Média

Baixa

Média

XML

Baixa

Alta

Alta

Média

Baixa

(c)Pickle

Alta

Baixa

Alta

Baixa

Baixa

Page 31: Integração de Aplicações em Python · Integração através de middleware Aplicação A Aplicação B Regras de negócio podem ficar em componentes. Middleware Funções disponíveis

Aplicações externas

Aplicações “pythônicas”:

● BrOffice.org

● Blender

● GIMP

● Inkscape

● PostgreSQL

Page 32: Integração de Aplicações em Python · Integração através de middleware Aplicação A Aplicação B Regras de negócio podem ficar em componentes. Middleware Funções disponíveis

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).

Page 33: Integração de Aplicações em Python · Integração através de middleware Aplicação A Aplicação B Regras de negócio podem ficar em componentes. Middleware Funções disponíveis

BrOffice.org (serviço)

Interpretador

Aplicação

PyUNO BrOffice.org

Aceita conexões remotas via

named pipes ou sockets.

Python UNO Bridge

Page 34: Integração de Aplicações em Python · Integração através de middleware Aplicação A Aplicação B Regras de negócio podem ficar em componentes. Middleware Funções disponíveis

BrOffice.org (exemplo I)

# -*- coding: latin1 -*-

# Para iniciar o BrOffice.org como servidor:# swriter.exe -headless# "-accept=pipe,name=py;urp;StarOffice.ServiceManager"

import osimport unofrom 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...

Page 35: Integração de Aplicações em Python · Integração através de middleware Aplicação A Aplicação B Regras de negócio podem ficar em componentes. Middleware Funções disponíveis

BrOffice.org (exemplo II)

# Inicio do "Boiler Plate"...

# Contexto de componente localloc = uno.getComponentContext()

# Para resolver URLsres = loc.ServiceManager.createInstanceWithContext( 'com.sun.star.bridge.UnoUrlResolver', loc)

# Contexto para a URLcon = res.resolve('uno:pipe,name=py;urp;StarOffice.ComponentContext')

# Documento correntedesktop = con.ServiceManager.createInstanceWithContext( 'com.sun.star.frame.Desktop', con)

# Fim do "Boiler Plate"...

Continua...

Page 36: Integração de Aplicações em Python · Integração através de middleware Aplicação A Aplicação B Regras de negócio podem ficar em componentes. Middleware Funções disponíveis

BrOffice.org (exemplo III)

# Cria um documento novo no Writerdoc = desktop.loadComponentFromURL('private:factory/swriter', '_blank', 0, ())

# Cursor de textocursor = doc.Text.createTextCursor()

# Muda propriedadescursor.setPropertyValue('CharFontName', 'Verdana')cursor.setPropertyValue('CharHeight', 20)cursor.setPropertyValue('CharWeight', 180)doc.Text.insertString(cursor, 'Músicas favoritas\n', 0)

# Cria tabelatab = doc.createInstance('com.sun.star.text.TextTable')tab.initialize(rows, cols)doc.Text.insertTextContent(cursor, tab, 0)

Continua...

Texto inserido

Page 37: Integração de Aplicações em Python · Integração através de middleware Aplicação A Aplicação B Regras de negócio podem ficar em componentes. Middleware Funções disponíveis

BrOffice.org (exemplo IV)

# Preenche a tabelafor row in xrange(rows): for col in xrange(cols): cel = chr(ord('A') + col) + str(row + 1) tab.getCellByName(cel).setString(mus[row][col])

# Propriedades para exportar o documentoprops = []p = PropertyValue()p.Name = 'Overwrite'p.Value = True # Sobrescreve o documento anteriorprops.append(p)

p = PropertyValue()p.Name = 'FilterName'p.Value = 'writer_pdf_Export' # Writer para PDFprops.append(p)

Continua...

Tabela

Page 38: Integração de Aplicações em Python · Integração através de middleware Aplicação A Aplicação B Regras de negócio podem ficar em componentes. Middleware Funções disponíveis

BrOffice.org (exemplo V)

# URL de destinourl = uno.systemPathToFileUrl(os.path.abspath('musicas.pdf'))

# Salva o documento como PDFdoc.storeToURL(url, tuple(props))

# Fecha o documentodoc.close(True)

Arquivo de saída

Page 39: Integração de Aplicações em Python · Integração através de middleware Aplicação A Aplicação B Regras de negócio podem ficar em componentes. Middleware Funções disponíveis

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

Page 40: Integração de Aplicações em Python · Integração através de middleware Aplicação A Aplicação B Regras de negócio podem ficar em componentes. Middleware Funções disponíveis

Integração de aplicações em

Luiz Eduardo Borgeshttp://ark4n.wordpress.com/

Fim