2. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Remote Procedure Calls (RPC)
RPC é um conceito de comunicação interprocesso
que permite um programa chamar uma rotina para ser
executada em outro espaço de endereçamento,
normalmente remoto
abstração de alto nível de rede para programação
Foco no problema da programação
• Deixar o pacote RPC manipular os detalhes de
networking
Desenvolvido em meados dos anos 1970
Termo cunhado por Bruce Jay Nelson, na Xerox
Prof. Fabio Alexandre Spanhol, M.Sc. 2
3. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
RPC
Precursores
Concurrent Pascal (1975)
• Chamadas de procedimento inter-processo de alto nível
ARPANet (1976)
• RFC 707
• Especificação necessária para RPC em rede sobre a
ARPANet
Xerox (1981)
• Primeiro uso comercial
• Batizado “Courier” System
Prof. Fabio Alexandre Spanhol, M.Sc. 3
4. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
RPC
Influenciou
Apollo Network Computing
System (NCS)
• Antecessor do Microsoft's Distributed
Component Object Model (DCOM)
Common Object Request Broker
Architecture (CORBA)
Java RMI (Remote Method
Invokation)
Prof. Fabio Alexandre Spanhol, M.Sc. 4
5. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
RPC
Anos 1990: Ascenção dos Padrões Web
Codificação baseada em XML
Independência de plataforma
Linguagem agnóstica
Prof. Fabio Alexandre Spanhol, M. Sc. 5
6. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
XML-RPC
XML-RPC é simplesmente RPC
codificado em XML!
Criado em 1998 por Dave Winer
Somente 8 tipos de dados básicos
Simples, fácil de usar
A especificação possui apenas 7 páginas
(includindo exemplos e FAQ)
Cresceu dentro do Simple Object Access Protocol
(SOAP) que tem mais recursos (e mais
complexidade)! Prof. Fabio Alexandre Spanhol, M.Sc. 6
7. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
E SOAP?
SOAP é outro protocolo para
aplicações Client/Server
Os princípios gerais são similares ao XML-
RPC, usando XML como linguagem
comum
Também chamado de “lightweight”, mas a
especificação tem mais de 77000 palavras
(40 páginas)!
Prof. Fabio Alexandre Spanhol, M.Sc. 7
9. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
XML-RPC
XML-RPC é
"...a spec and a set of implementations that allow
software running on disparate operating systems,
running in different environments to make procedure
calls over the Internet. It's remote procedure calling
using HTTP as the transport and XML as the encoding.
XML-RPC is designed to be as simple as possible, while
allowing complex data structures to be transmitted,
processed and returned.“ (xmlrpc.scripting.com)
Prof. Fabio Alexandre Spanhol, M.Sc. 9
10. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Modelo
Cliente e Servidor devem entender um ao
outro
Prof. Fabio Alexandre Spanhol, M.Sc. 10
Wieviel Uhr
ist es? ?
11. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Modelo
Ambos devem acordar uma
linguagem comum
Prof. Fabio Alexandre Spanhol, M.Sc. 11
Wieviel Uhr
ist es?
Quelle heure est-il?
7pm!
What’s the
time?
12. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Modelo
Linguagem comum
Cliente Codifica
Servidor Decodifica
Prof. Fabio Alexandre Spanhol, M.Sc. 12
Wieviel Uhr
ist es?
Quelle heure est-il?
7pm!
What’s the
time?Encode
Decode
13. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Modelo
XML-RPC usa XML como linguagem
comum
Prof. Fabio Alexandre Spanhol, M.Sc. 13
Python,
Java,
C++, etc.
Python, Java,
C++, etc.
XMLEncode
Decode
14. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Abstração
Bibliotecas RPC abstraem os detalhes da
comunicação em rede
Implementação em nível de sockets depende da
biblioteca RPC utilizada
Não é uma solução perfeita – a rede
pode cair, pacotes podem ser perdidos,
etc.
Prof. Fabio Alexandre Spanhol, M.Sc. 14
15. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Operação XML-RPC
HTTP implica em uma conexão TCP em baixo
nível
Cliente usa um HTTP POST para iniciar um
método remoto no servidor
O servidor responde com um HTTP response
padrão
Prof. Fabio Alexandre Spanhol, M.Sc. 15
17. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Questão importante!
O que acontece se uma operação RPC tem
efeitos colaterais (isto é, altera o estado do
sistema remoto), mas o mecanismo de rede
cai durante a operação?
Prof. Fabio Alexandre Spanhol, M.Sc. 17
18. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Questão importante!
Uma procedure p é idempotente, atuando em um processo de
estado x, se e somente se:
p(p(x)) == p(x)
Executar uma operação idempotente somente altera o estado do
sistema uma vez, mesmo que executada a operação várias vezes
Se uma operação RPC tem efeitos colaterias e não é
idempontente, o que ocorre se uma operação é duplicada,
devido a uma falha de rede?
Ex: adicionar uma linha ao final de um arquivo de configuração, como
/etc/fstab
O sistema pode ficar em um estado inconsistente!
Prof. Fabio Alexandre Spanhol, M.Sc. 18
19. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Tipos de Dados XML-RPC
int
Inteiro sinalizado de 32 bits
*Mapeado para números inteiros em python
string
ASCII strings (limitado a caracteres permitidos em XML)
Pode conter bytes NULL embutidos
boolean
double
ponto flutuante de precisão dupla
*Mapeado para números em ponto flutuante em python
dateTime
pouca utilidade (sem suporte a time zones)
Prof. Fabio Alexandre Spanhol, M.Sc. 19
20. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Tipos de Dados XML-RPC
struct
pares que mapeiam chave-valor
Equivalente a dicionários em python
array
vetores de dados de qualquer tipo (pode misturar tipos)
Equivalente a listas em python
base64
dados binários arbitrários codificados no formato base64
"Manipulador" para qualquer tipo que não sejam os tipos anteriores
Objetos python podem ser mapeados em base64
Strings com caracteres inválidos em XML podem ser codificadas em
base64 Prof. Fabio Alexandre Spanhol, M.Sc. 20
21. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Independência de Linguagem
Usando tipos de dados simples, chamadas
XML-RPC podem ser independentes de
linguagem
ex.: um cliente python chamando um servidor PHP
dependência de linguagem ocorre quando
objetos específicos da linguagem são
codificados em base64
Prof. Fabio Alexandre Spanhol, M.Sc. 21
22. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
XML-RPC: Python
Baterias incluídas!
Já na biblioteca padrão
Basta usar os módulos xmlrpc.client e
xmlrpc.server
Prof. Fabio Alexandre Spanhol, M. Sc. 22
23. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Módulos XML-RPC para Python
xmlrpc.client
Rotinas para implementar clientes XML-RPC
Classe xmlrpc.client.ServerProxy gerencia a
comunicação com um servidor remoto
xmlrpc.server
Rotinas para implementar servidores XML-RPC
Classe xmlrpc.server.SimpleXMLRPCServer cria
instância de um servidor XML-RPC
Classe xmlrpc.server.DocXMLRPCServer
• Extensão
• Provê documentação na requisição HTTP GET
Prof. Fabio Alexandre Spanhol, M.Sc. 23
24. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
DocXMLRPCServer
DocXMLRPCServer provê
serviços RPC em operações HTTP POST (dos
clientes)
documentação HTML em operações HTTP GET
(dos navegadores web)
Prof. Fabio Alexandre Spanhol, M.Sc. 24
25. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Documentação Automática
Python XML-RPC usa docstrings para gerar
documentação em HTML
Visualizado navegando em http://localhost:8888
com um navegador web
Em geral http://host:port
Também pode ser visto usando
help(nome_método) de dentro do
interpretrador python após ter importado o
módulo
Prof. Fabio Alexandre Spanhol, M.Sc. 25
26. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Métodos HTML Cosméticos
Membros da classe DocXMLRPCServer
set_server_title(“Título da Página HTML”)
set_server_name(“Nome do Servidor”)
set_server_documentation(string)
• Documentação mostrada em parágrafos antes da lista de
métodos
Prof. Fabio Alexandre Spanhol, M.Sc. 26
29. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Endereçamento
Para servidores locais, use localhost nos
métodos client/server
Ex.: construtor do servidor ou construtor cliente
(ServerProxy) liga-se a interface de loopback do
host local
Acessível somente da máquina local
Para servidores públicos utilize FQDN
server = SimpleXMLRPCServer
((“host3.universidade.br”, 8888))
Prof. Fabio Alexandre Spanhol, M.Sc. 29
30. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Endereçamento
Use portas não-reservadas!
Portas numeradas de 0 a 1024 são privilegiadas e
restritas a serviços do SO
Use numeração de portas acima de 1024
Evite portas como 8080 (porta alternativa para
servidores HTTP), 5432 (Postgresql), 9600-9800
(Condor), 1521 (Oracle), 3306 (Mysql), etc.
Prof. Fabio Alexandre Spanhol, M.Sc. 30
31. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
XML-RPC: Java
Necessário instalar o Apache XML-RPC
Implementação XML-RPC em Java feita pela
Fundação Apache
• http://ws.apache.org/xmlrpc/
Prof. Fabio Alexandre Spanhol, M. Sc. 31