Transações compensatórias usando REST - QCon SP 2011

107
Transações compensatórias usando REST Bruno Pereira [email protected] Luca Bastos [email protected] Qcon São Paulo/2011

description

Transações compensatórias usando RESTBruno Pereira [email protected] [email protected] no Qcon São Paulo/2011

Transcript of Transações compensatórias usando REST - QCon SP 2011

Page 1: Transações compensatórias usando REST - QCon SP 2011

Transações compensatórias ��� usando REST

Bruno Pereira [email protected] Luca Bastos [email protected]

Qcon São Paulo/2011

Page 2: Transações compensatórias usando REST - QCon SP 2011

Outro Título

É possível pensar em transações

usando REST?

Page 3: Transações compensatórias usando REST - QCon SP 2011

Outro Título

Transação com REST é um oximoro(*)?

(*)  Segundo  a  wikipedia,  figura  de  linguagem  que  harmoniza  dois  conceitos  opostos  numa  só    expressão,  formando  assim  um  terceiro  conceito  que  dependerá  da  interpretação  do  leitor.

Page 4: Transações compensatórias usando REST - QCon SP 2011

Life  is  a  distributed  object  system.  

However,  communicaGon  among  humans  is  a  distributed  hypermedia  system,    where  the  mind's  intellect,  voice+gestures,  eyes+ears,  and  imaginaGon  are  all  components.  

             Roy  T.  Fielding,  1998.

Page 5: Transações compensatórias usando REST - QCon SP 2011

Bruno Pereira:

Gerente  de  operações  e  pré-­‐venda  na  Concrete    SoluGons,  atual  responsável  pelo  escritório  de  SP.  

Trabalhou  em  grandes  projetos  na  Globo.com,    Globosat,  Alcoa,  White  MarGns  e  outros.    Engenheiro  eletrônico  e  de  computação  na  UFRJ.  

Experiência  em  muitos  projetos  web,  com  experGse  no  server-­‐side  e  client-­‐side.    

Um  dos  pioneiros  na  adoção  de  REST  no  Brasil.

Page 6: Transações compensatórias usando REST - QCon SP 2011

Luca Bastos:

Desenvolvedor  do  tempo  da  Carochinha.    Se  mantém  na  aGva  por  pura  paixão.    

Ávido  leitor  sendo  o  hábito  da  leitura  um  dos  seus  3  principais  prazeres  na  vida.    

Segue  como  esforçado  e  curioso  aprendiz  na  árdua,    porém  gostosa  tentaGva  de  se  manter  atualizado.    

Hoje  exerço  minha  paixão  na  Concrete  SoluGons

Page 7: Transações compensatórias usando REST - QCon SP 2011

Onde trabalhamos: ��� http://www.concretesolutions.com.br/

A Concrete tem mais de10 anos com variado portfólio de clientes no Brasil e no exterior. No início as maiores ���demandas do mercado eram soluções para integração. ���

Atualmente a diversificação é bem grande tantos nos projetos como nas tecnologias e nas linguagens utilizadas. ���

Temos projetos nas áreas de cloud, mobile e web. ���

Muitos são como alguns de São Paulo para lean startups.

Page 8: Transações compensatórias usando REST - QCon SP 2011

Resumo sobre transações desde as primeiras

Page 9: Transações compensatórias usando REST - QCon SP 2011

Resumo sobre transações desde as primeiras

Inventadas pelos Sumérios

Page 10: Transações compensatórias usando REST - QCon SP 2011

Sumérios viveram na Babilônia entre 5000 e 3000 anos a.C.

Page 11: Transações compensatórias usando REST - QCon SP 2011

Exemplo de uma compra no mercado��� lá na Suméria

Page 12: Transações compensatórias usando REST - QCon SP 2011
Page 13: Transações compensatórias usando REST - QCon SP 2011
Page 14: Transações compensatórias usando REST - QCon SP 2011
Page 15: Transações compensatórias usando REST - QCon SP 2011

A transação era registrada (persistida)

em placas de barro

Page 16: Transações compensatórias usando REST - QCon SP 2011
Page 17: Transações compensatórias usando REST - QCon SP 2011
Page 18: Transações compensatórias usando REST - QCon SP 2011

Existem transações muito mais complexas

Page 19: Transações compensatórias usando REST - QCon SP 2011

E a modelagem delas vem sendo estudada���há muito tempo

Page 20: Transações compensatórias usando REST - QCon SP 2011

Alguns modelos de transações

Page 21: Transações compensatórias usando REST - QCon SP 2011

Nested transactions (transações aninhadas) ���

Conjunto de subtransações que podem ���recursivamente conter outras subtransações���formando uma árvore.

Page 22: Transações compensatórias usando REST - QCon SP 2011

Sagas���

Conjunto de subtransações ACID com uma ���ordem predefinida de execução e incluindo���subtransações que compensam casos de���falha.

Page 23: Transações compensatórias usando REST - QCon SP 2011

Long running transactions ou Long running ���work (transações de longa duração) ���

Levam algum tempo (de frações de segundos���a meses) para terminar

Page 24: Transações compensatórias usando REST - QCon SP 2011

O caso da reserva de vários recursos em���conjunto

Page 25: Transações compensatórias usando REST - QCon SP 2011

A

B

C

D

E

F

Assurbanipal vai ���alugar carros em ���outras cidades

Page 26: Transações compensatórias usando REST - QCon SP 2011

REST, um estilo de arquitetura

Page 27: Transações compensatórias usando REST - QCon SP 2011

Segundo Roy Fielding, ���

estilo de arquitetura é um conjunto ���coordenado de restrições arquiteturais ���

Page 28: Transações compensatórias usando REST - QCon SP 2011

Segundo Roy Fielding, ���

estilo de arquitetura é um conjunto ���coordenado de restrições arquiteturais ���

que limitam os papéis e habilidades dos ���elementos arquiteturais e os relacionamentos ���permitidos dentre eles, ���

Page 29: Transações compensatórias usando REST - QCon SP 2011

Segundo Roy Fielding, ���

estilo de arquitetura é um conjunto ���coordenado de restrições arquiteturais ���

que limitam os papéis e habilidades dos ���elementos arquiteturais e os relacionamentos ���permitidos dentre eles, ���

dentro de qualquer arquitetura que esteja em���conformidade com tal estilo.

Page 30: Transações compensatórias usando REST - QCon SP 2011

De forma simplista, ���

podemos dizer que REST ���

é um conjunto de restrições ���

ao projeto de um sistema hipermídia.

Page 31: Transações compensatórias usando REST - QCon SP 2011

Restrições básicas do estilo de arquitetura ���REST: ���

1.  Identificação dos recursos 2.  Interface uniforme 3.  Mensagens auto descritivas 4.  Hipermídia comandando o estado 5.  Interações sem estado

Page 32: Transações compensatórias usando REST - QCon SP 2011

É possível projetar uma arquitetura

com transações distribuídas

dentro das restrições do REST?

Page 33: Transações compensatórias usando REST - QCon SP 2011

É possível projetar uma arquitetura

com transações distribuídas

dentro das restrições do REST?

Ou precisamos relaxar algumas das restrições���do Roy Fielding?

Page 34: Transações compensatórias usando REST - QCon SP 2011
Page 35: Transações compensatórias usando REST - QCon SP 2011

Vamos demonstrar como fazer transações ���dentro das restrições da arquitetura REST���usando um caso prático: ���

Reserva de passagens aéreas

Page 36: Transações compensatórias usando REST - QCon SP 2011
Page 37: Transações compensatórias usando REST - QCon SP 2011

Agência  

Problema  de  uma  agência  de  viagens:  

Reservar  passagens  em  2  trechos  independentes  ligando    vôos  de  2  empresas  aéreas  

A  

B  

Page 38: Transações compensatórias usando REST - QCon SP 2011

Agência  

Problema  de  uma  agência  de  viagens:  

Reservar  passagens  em  2  trechos  independentes  ligando    vôos  de  2  empresas  aéreas  sem  ônus  se  uma  delas  falhar  

A  

B  

Page 39: Transações compensatórias usando REST - QCon SP 2011

Vamos  ver  como  seria  usar  REST  em  um  caso  deste  

Page 40: Transações compensatórias usando REST - QCon SP 2011

Simplificação:    

Supomos  que  as  2  empresas  aéreas  usam  o  mesmo  contrato  de  hipermídia  para  reservas  

Page 41: Transações compensatórias usando REST - QCon SP 2011

<div  class="reserva  pendente">    <div  class="voo">        <span  class="numero">1520</span>        <span  class="companhia">Verde</span>        <span  class="origem">SAO  PAULO</span>        <span  class="desGno">BRASILIA</span>        <span  class="saida">01/10/2011  10:00</span>        <span  class="chegada">01/10/2011  11:40</span>    </div>  </div>  

Microformato  que  poderia  ser  usado    

Page 42: Transações compensatórias usando REST - QCon SP 2011

XML  Tradicional  com  dados  relevantes  

<reserva>    <voo  numero="1520"                companhia="Verde"              origem="SAO  PAULO"              desGno="BRASILIA"              saida="01/10/2011  10:00"              chegada="01/10/2011  11:40”  >        </voo>  </reserva>  

Page 43: Transações compensatórias usando REST - QCon SP 2011

URI  para  checar  disponibilidade  de  um  vôo:  /voo/{voo-­‐num}/  

A  resposta  de  uma  requisição        GET  a.com/voo/1001/  

poderá  ser  um  hyperlink  para  a  idenGficação  do  recurso  vôo  ou  nada  se  o  vôo  está  lotado  (204  sem  conteúdo)  

Page 44: Transações compensatórias usando REST - QCon SP 2011

Dados  de  um  Vôo  

<voo  id="123456789"  numero="1520"                companhia="Verde"              origem="SAO  PAULO"              desGno="BRASILIA"              saida="01/10/2011  10:00"              chegada="01/10/2011  11:40”  >        </voo>  

Page 45: Transações compensatórias usando REST - QCon SP 2011

Reserva  de  um  determinado  vôo:  

O  request  POST  /reserva  

Page 46: Transações compensatórias usando REST - QCon SP 2011

Reserva  de  um  determinado  vôo:  

O  request  POST  /reserva  

incluindo  no  conteúdo  do  POST  a  referência  ao  vôo:    <voo  numero=“xpto”  />  

Page 47: Transações compensatórias usando REST - QCon SP 2011

Reserva  de  um  determinado  vôo:  

O  request  POST  /reserva  

incluindo  no  conteúdo  do  POST  a  referência  ao  vôo:    <voo  numero=“xpto”  />  

cria  um  novo  recurso  reserva  com  seu  id  devolvendo  um    header  locaGon  com  o  caminho  do  recurso  /reserva/{id}/  

Page 48: Transações compensatórias usando REST - QCon SP 2011

Reserva  de  um  determinado  vôo:  

O  request  POST  /reserva  

incluindo  no  conteúdo  do  POST  a  referência  ao  vôo:    <voo  numero=“xpto”  />  

cria  um  novo  recurso  reserva  com  seu  id  devolvendo  um    header  locaGon  com  o  caminho  do  recurso  /reserva/{id}/  

A  reserva  pode  ser  atualizada  usando  PUT  /reserva/{id}/  

Page 49: Transações compensatórias usando REST - QCon SP 2011

<reserva  id=“123456”>    <voo  numero="1520"                companhia="Verde"              origem="SAO  PAULO"              desGno="BRASILIA"              saida="01/10/2011  10:00"              chegada="01/10/2011  11:40”  >        </voo>    <link  rel=“update”  href=“/reserva/123456”  />  </reserva>  

A  reserva  pode  ser  atualizada  usando  PUT  /reserva/{id}/  

Page 50: Transações compensatórias usando REST - QCon SP 2011

Composição  das  reservas:  

História  1  

Como  cliente,  quero  reservar  vôos  em  2  trechos    independentes  ligando  vôos  de  2  empresas  aéreas.  

É  responsabilidade  da  agência  compor  os  serviços.  

Page 51: Transações compensatórias usando REST - QCon SP 2011

Sem  pensar  em  transação,  poderia  ser  assim:  

1.  GET  a.com/voo/1001/  2.  GET  b.com/voo/2002/  3.  POST  a.com/reserva  4.  POST  b.com/reserva  

Page 52: Transações compensatórias usando REST - QCon SP 2011

Sem  pensar  em  transação,  poderia  ser  assim:  

1.  GET  a.com/voo/1001/  2.  GET  b.com/voo/2002/  3.  POST  a.com/reserva  4.  POST  b.com/reserva  

E  se  a  segunda  empresa  diz  que  não  tem  lugar  no  vôo?  

Page 53: Transações compensatórias usando REST - QCon SP 2011

Sem  pensar  em  transação,  poderia  ser  assim:  

1.  GET  a.com/voo/1001/  2.  GET  b.com/voo/2002/  3.  POST  a.com/reserva  4.  POST  b.com/reserva  

E  se  a  segunda  empresa  diz  que  não  tem  lugar  no  vôo?  

A  solução  pode  ser  fazer  com  que  os  passos  das  reservas  3    e  4  sejam  tentaGvas  que  podem  ser  confirmadas  depois.  

Page 54: Transações compensatórias usando REST - QCon SP 2011

Disclaimer:  

Quase  tudo  mostrado  aqui  se  baseia  no  capítulo  23    do  livro  REST:  From  Research  to  PracGce  

Towards  Distributed  Atomic  TransacGons  over  RESTful  Services  de  Guy  Pardon  (Atomikos)  e  Cesare  Pautasso  

Page 55: Transações compensatórias usando REST - QCon SP 2011

O  Gpo  de  solução  proposta  serve  a  aplicações  distribuídas  que  precisam  de  atomicidade.  

Page 56: Transações compensatórias usando REST - QCon SP 2011

O  Gpo  de  solução  proposta  serve  a  aplicações  distribuídas  que  precisam  de  atomicidade.  

Se  baseia  no  conceito  TCC,  Try-­‐Cancel/Confirm    do  Guy  Pardon,  que  tem  semelhança  com  as  práGcas  de    aplicações  financeiras  que  usam  transações  compensatórias.  

Page 57: Transações compensatórias usando REST - QCon SP 2011

O  Gpo  de  solução  proposta  serve  a  aplicações  distribuídas  que  precisam  de  atomicidade.  

Se  baseia  no  conceito  TCC,  Try-­‐Cancel/Confirm    do  Guy  Pardon,  que  tem  semelhança  com  as  práGcas  de    aplicações  financeiras  que  usam  transações  compensatórias.        

É  adequado  aos  cenários  que  envolvem  reserva  de  recursos.  

Page 58: Transações compensatórias usando REST - QCon SP 2011

O  Gpo  de  solução  proposta  serve  a  aplicações  distribuídas  que  precisam  de  atomicidade.  

Se  baseia  no  conceito  TCC,  Try-­‐Cancel/Confirm    do  Guy  Pardon,  que  tem  semelhança  com  as  práGcas  de    aplicações  financeiras  que  usam  transações  compensatórias.        

É  adequado  aos  cenários  que  envolvem  reserva  de  recursos.  

O  recurso  no  estado  de  reservado  aparece  para  todos  e  isto  evita  dupla  reserva.  

Page 59: Transações compensatórias usando REST - QCon SP 2011

Confirmação  das  reservas:  

História  2  

Como  cliente,  quero  ser  capaz  de  confirmar  as  reservas  no  fim  de  tudo  e  que  as  reservas  não  confirmadas  não    sejam  cobradas.  

Page 60: Transações compensatórias usando REST - QCon SP 2011

O  Serviço  REST  da  empresa  aérea  retorna  um  hyperlink  de  confirmação.  

Exemplo:  GET  /reserva/{id}  

recebe  como  resposta  <reserva  id={id}>                  <link  rel=“confirma”  href=”/reserva/{id}/pagamento”>  </reserva>  

O  pagamento  pode  ser  confirmado  com:  PUT  /reserva/{id}/pagamento        contendo  <VISA  ...  >  

Page 61: Transações compensatórias usando REST - QCon SP 2011

Workflow  do  caminho  feliz  

GET  a.com/voo/1001/          200  POST  a.com/reserva          201  (locaGon  /reserva/A  )  GET  b.com/voo/2002/          200  POST  b.com/reserva          201  (locaGon  /reserva/B  )  GET  a.com/reserva/A          200  (link  para  confirmar:  /reserva/{id}/pagamento/  )  GET  b.com/reserva/B          200  (link  para  confirmar:  /reserva/{id}/pagamento/  )  

Page 62: Transações compensatórias usando REST - QCon SP 2011

Confirmações  usando  o  hyperlink  de  pagamento  recebido:  

<reserva  id>                  <link  rel=“confirma”  href=“/reserva/{id}/pagamento/”>  </reserva>  

PUT  a.com/reserva/{id}/pagamento/          200  PUT  b.com/reserva/{id}/pagamento/          200  

Page 63: Transações compensatórias usando REST - QCon SP 2011

Lembram  dos  passos  

1.  GET  a.com/voo/1001/  2.  GET  b.com/voo/2002/  3.  POST  a.com/reserva  4.  POST  b.com/reserva  

Page 64: Transações compensatórias usando REST - QCon SP 2011

Mas  e  se  o  passo  4  que  é  a  segunda  reserva  falhar?  

Lembram  dos  passos  

1.  GET  a.com/voo/1001/  2.  GET  b.com/voo/2002/  3.  POST  a.com/reserva  4.  POST  b.com/reserva  

Page 65: Transações compensatórias usando REST - QCon SP 2011

Cancelamento  das  reservas:  

História  3  

Como  empresa  aérea  não  quero  esperar  indefinidamente  por  uma  confirmação.  Quero  cancelar  uma  reserva  pendente  após  um  certo  período  de  tempo  (Gmeout).  

Page 66: Transações compensatórias usando REST - QCon SP 2011

A  empresa  aérea  ao  receber  

POST  /reserva/  

Retorna  

<reserva  id={id}>                  <link  rel=“confirma”  href=“/reserva/{id}/pagamento/”    

     limite=“24h”>  </reserva>  

Page 67: Transações compensatórias usando REST - QCon SP 2011

Conceito  Try-­‐Cancel/Confirm  

Page 68: Transações compensatórias usando REST - QCon SP 2011

Confirm  Try  Estado  inicial  

Estado  final  

Estado  reservado  

Reserva  de  um  vôo  

Page 69: Transações compensatórias usando REST - QCon SP 2011

Confirm  Try  

Cancel  

Estado  inicial  

Estado  final  

Estado  reservado  

Reserva  de  um  vôo  com  cancelamento  

Page 70: Transações compensatórias usando REST - QCon SP 2011

Confirm  Try  

Timeout  

Cancel  

Estado  inicial  

Estado  final  

Estado  reservado  

Reserva  de  um  vôo  com  cancelamento  e  Gmeout  

Page 71: Transações compensatórias usando REST - QCon SP 2011

No  protocolo  Try-­‐Cancel/Confirm,  cada  request  é    “tentado”  e  permanece  como  tentaGva  no  estado    reservado  até  que  seja  confirmado  ou  cancelado.  

Page 72: Transações compensatórias usando REST - QCon SP 2011

Timeout  

Exemplo:    

Reserva  de  vôo  com  modelo  Try-­‐Cancel/Confirm  

POST  /reserva  

PUT  /pagamento/X  

DELETE  /reserva/{id}  

Estado  reservado  

Page 73: Transações compensatórias usando REST - QCon SP 2011

Conceituando  transações  REST  

Recursos  publicados  por  Web  services  RESTful  devem  ser    enGdades  independentes.  

Page 74: Transações compensatórias usando REST - QCon SP 2011

Conceituando  transações  REST  

Recursos  publicados  por  Web  services  RESTful  devem  ser    enGdades  independentes.  

Segundo  Pautasso  e  Wilde,  uma  solução  de  transação  para  REST  é  desacoplada  se  os  serviços  parGcipantes  não  tem    consciência  de  que  são  parte  de  uma  transação.  

Page 75: Transações compensatórias usando REST - QCon SP 2011

Conceituando  transações  REST  

Recursos  publicados  por  Web  services  RESTful  devem  ser    enGdades  independentes.  

Segundo  Pautasso  e  Wilde,  uma  solução  de  transação  para  REST  é  desacoplada  se  os  serviços  parGcipantes  não  tem    consciência  de  que  são  parte  de  uma  transação.  

Não  são  todos  os  serviços  RESTful  capazes  de  parGcipar  em  transações  assim.    

Page 76: Transações compensatórias usando REST - QCon SP 2011

Protocolos  da  solução  proposta  

Definição  de  T,  R  e  S:  

T  é  uma  transação  baseada  em  REST  composta  de  requests  Ri  para  serviços  Si  que  devem  ser  confirmados  ou    cancelados  juntos.  

Page 77: Transações compensatórias usando REST - QCon SP 2011

Protocolos  da  solução  proposta  

Definição  de  T,  R  e  S:  

T  é  uma  transação  baseada  em  REST  composta  de  requests  Ri  para  serviços  Si  que  devem  ser  confirmados  ou    cancelados  juntos.  

Exemplo:  T  é  a  transação  de  reserva  dos  vôos,  R  reserva  de  um  vôo  e  S  é  o  serviço  acessado.  

Page 78: Transações compensatórias usando REST - QCon SP 2011

Protocolos  da  solução  proposta  

Definição  de  T,  R  e  S:  

T  é  uma  transação  baseada  em  REST  composta  de  requests  Ri  para  serviços  Si  que  devem  ser  confirmados  ou    cancelados  juntos.  

Exemplo:  T  é  a  transação  de  reserva  dos  vôos,  R  reserva  de  um  vôo  e  S  é  o  serviço  acessado.  

Os  Ri  bem  sucedidos  tem  confirmação  explicita  Ri,confirma    (via  pagamento  da  reserva)    

Page 79: Transações compensatórias usando REST - QCon SP 2011

Protocolos  da  solução  proposta  

Definição  de  T,  R  e  S:  

T  é  uma  transação  baseada  em  REST  composta  de  requests  Ri  para  serviços  Si  que  devem  ser  confirmados  ou    cancelados  juntos.  

Exemplo:  T  é  a  transação  de  reserva  dos  vôos,  R  reserva  de  um  vôo  e  S  é  o  serviço  acessado.  

Os  Ri  bem  sucedidos  tem  confirmação  explicita  Ri,confirma    (via  pagamento  da  reserva)  e  todos  os  Ri  não  confirmados  são  cancelados.    

Page 80: Transações compensatórias usando REST - QCon SP 2011

Importante:  

O  uso  do  protocolo  Try-­‐Cancel/Confirm  é  a  única  exigência  que  se  faz  aos  prestadores  dos  serviços  para  esta  solução    funcionar.  

Através  de  um  acordo  de  negócios,  é  preciso  garanJr  que    caso  o  prestador  do  serviço  (neste  caso  uma  empresa  aérea)    NÃO  receba  a  confirmação  dentro  do  Gmeout  (PUT  do    pagamento),  DEVE  cancelar  a  transação.  

Caso  a  agência  não  receba  resposta  do  PUT  de  uma  empresa    aérea,  cancelará  as  reservas  feitas  com  sucesso  nas  outras.    

Page 81: Transações compensatórias usando REST - QCon SP 2011

Arquitetura  para  o  caminho  feliz  

1.  Um  workflow  transacional  T  envia  requests  a  disGntas    APIs  de  Web  services  RESTful  Si.  

2.  Requests  Ri  podem  acarretar  mudanças  de  estado  em  algum  serviço  Si  idenGficado  por  alguma  URI.  

Page 82: Transações compensatórias usando REST - QCon SP 2011

Cliente   Motor  Workflow  0   1  

1   2  

2  

Try  

Try  

Page 83: Transações compensatórias usando REST - QCon SP 2011

Arquitetura  para  o  caminho  feliz  

1.  Um  workflow  transacional  T  envia  requests  a  disGntas    APIs  de  Web  services  RESTful  Si.  

2.  Requests  Ri  podem  acarretar  mudanças  de  estado  em  algum  serviço  Si  idenGficado  por  alguma  URI.  

3.  Com  o  workflow  bem  sucedido,  as  URIs  de  confirmação  e  mais  os  conteúdos  são  passados  ao  coordenador.    

Page 84: Transações compensatórias usando REST - QCon SP 2011

Cliente   Motor  Workflow  

Coordenador  de  transações  

3  

0   1  

1   2  

2  

Try  

Try  Confirm  

Page 85: Transações compensatórias usando REST - QCon SP 2011

Arquitetura  para  o  caminho  feliz  

1.  Um  workflow  transacional  T  envia  requests  a  disGntas    APIs  de  Web  services  RESTful  Si.  

2.  Requests  Ri  podem  acarretar  mudanças  de  estado  em  algum  serviço  Si  idenGficado  por  alguma  URI.  

3.  Com  o  workflow  bem  sucedido,  as  URIs  de  confirmação  e  mais  os  conteúdos  são  passados  ao  coordenador.  

4.  O  coordenador  chama  todos  os  Ri,confirma  com  um  PUT  idempotente  às  URIs  passadas  e  inclui  os  conteúdos    

Page 86: Transações compensatórias usando REST - QCon SP 2011

Cliente   Motor  Workflow  

Coordenador  de  transações  

3  

0  

4  

1  

1   2  

2  

4  

Try  

Try  

Confirm  

Confirm  

Confirm  

Page 87: Transações compensatórias usando REST - QCon SP 2011

Cliente   Motor  Workflow  

Coordenador  de  transações  

3  

5  

0  

6  

4  

1  

1   2  

2  

4  

Try  

Try  

Confirm  

Confirm  

Confirm  

Page 88: Transações compensatórias usando REST - QCon SP 2011

Protocolo  de  recuperação  em  caso  de  falha  

Recuperação  precisa  ocorrer  quando:  1)  Falha  de  nó  2)  Timeout  

Page 89: Transações compensatórias usando REST - QCon SP 2011

Protocolo  de  recuperação  em  caso  de  falha  

Recuperação  precisa  ocorrer  quando:  1)  Falha  de  nó  2)  Timeout  

Um  serviço  Si  só  reage  se  a  falha  ocorre  entre  os  passos    de  reserva  e  de  confirmação  (2  e  4).    Neste  caso  executa  Ri,cancela  automaGcamente.  

Page 90: Transações compensatórias usando REST - QCon SP 2011

Protocolo  de  recuperação  em  caso  de  falha  

Recuperação  precisa  ocorrer  quando:  1)  Falha  de  nó  2)  Timeout  

Um  serviço  Si  só  reage  se  a  falha  ocorre  entre  os  passos    de  reserva  e  de  confirmação  (2  e  4).    Neste  caso  executa  Ri,cancela  automaGcamente.  

O  coordenador  só  reage  durante  o  passo  das  confirmações    (passo  4.  Se  falta  resposta  de  um  Si,  tenta  de  novo  Ri,confirma.    Ri,confirma  usa  métodos  idempotentes  e  pode  tentar  muitas    vezes.    

Page 91: Transações compensatórias usando REST - QCon SP 2011

Protocolo  de  recuperação  em  caso  de  falha  

Importante:  

É  preciso  um  log  no  coordenador  começando  antes  do    passo  4  das  confirmações.    

Page 92: Transações compensatórias usando REST - QCon SP 2011

Caso  de  exceção  

No  passo  4  de  confirmações,  algum  serviço  Si  pode  cancelar  por  Gmeout  enquanto  o  coordenador  segue  tentando  confirmar.  

Sem  adotar  nenhuma  aGtude,  isto  quebraria  a  atomicidade.  

Page 93: Transações compensatórias usando REST - QCon SP 2011

Caso  de  exceção  

No  passo  4  de  confirmações,  algum  serviço  Si  pode  cancelar  por  Gmeout  enquanto  o  coordenador  segue  tentando  confirmar.  

Sem  adotar  nenhuma  aGtude,  isto  quebraria  a  atomicidade.  

Perfeição  NÃO  existe.  O  mesmo  pode  acontecer  com  as    transações  clássicas  no  esGlo  XA,  2PC  ou  usando  WS-­‐*.  

Esta  é  uma  limitação  que  devemos  conviver.  

Page 94: Transações compensatórias usando REST - QCon SP 2011

HeurísGca  de  exceção  

Quando  um  parGcipante  completa  Ri,  pode  ser  considerado  em  dúvida.  Seu  estado  já  persisGu  e  só  falta  a  confirmação  pendente  Ri,confirma.  Se  opta  por  Gmeout,  a  transação  T  deve  ter  uma  heurísGca  de  rollback  (desfazimento).  

Page 95: Transações compensatórias usando REST - QCon SP 2011

HeurísGca  de  exceção  

Quando  um  parGcipante  completa  Ri,  pode  ser  considerado  em  dúvida.  Seu  estado  já  persisGu  e  só  falta  a  confirmação  pendente  Ri,confirma.  Se  opta  por  Gmeout,  a  transação  T  deve  ter  uma  heurísGca  de  rollback  (desfazimento).  

O  modo  de  lidar  com  isto  é  simplesmente  o  coordenador  ter  um  log  para  perceber  que  suas  tentaGvas  de  confirmação  estão  sem  resposta.  

Page 96: Transações compensatórias usando REST - QCon SP 2011

HeurísGca  de  exceção  

Quando  um  parGcipante  completa  Ri,  pode  ser  considerado  em  dúvida.  Seu  estado  já  persisGu  e  só  falta  a  confirmação  pendente  Ri,confirma.  Se  opta  por  Gmeout,  a  transação  T  deve  ter  uma  heurísGca  de  rollback  (desfazimento).  

O  modo  de  lidar  com  isto  é  simplesmente  o  coordenador  ter  um  log  para  perceber  que  suas  tentaGvas  de  confirmação  estão  sem  resposta.  

E  quando  isto  acontecer  soltar  um  alerta  para  que  uma  ação  manual  da  operação  do  sistema  possa  desfazer  as  confirmações  órfãs  já  respondidas.  

Page 97: Transações compensatórias usando REST - QCon SP 2011

OGmizações  possíveis  

1.  Incluir  na  respostas  dos  serviços  um  link  para    cancelamento.  Vantagem:  evitar  que  o  coordenador  tenha  que  esperar  o  Gmeout  para  liberar  o  recurso.  

Page 98: Transações compensatórias usando REST - QCon SP 2011

OGmizações  possíveis  

1.  Incluir  na  respostas  dos  serviços  um  link  para    cancelamento.  Vantagem:  evitar  que  o  coordenador  tenha  que  esperar  o  Gmeout  para  liberar  o  recurso.  

2.  PermiGr  ao  coordenador  gerenciar  o  tempo  de  Gmeout  e  assim  nem  começar  as  tentaGvas  de  confirmação  perto  do  fim.  

Page 99: Transações compensatórias usando REST - QCon SP 2011

OGmizações  possíveis  

1.  Incluir  na  respostas  dos  serviços  um  link  para    cancelamento.  Vantagem:  evitar  que  o  coordenador  tenha  que  esperar  o  Gmeout  para  liberar  o  recurso.  

2.  PermiGr  ao  coordenador  gerenciar  o  tempo  de  Gmeout  e  assim  nem  começar  as  tentaGvas  de  confirmação  perto  do  fim.  

3.  O  coordenador  ter  um  diálogo  com  os  serviços  para  os    casos  de  exceção.  

Page 100: Transações compensatórias usando REST - QCon SP 2011

OGmizações  possíveis  

1.  Incluir  na  respostas  dos  serviços  um  link  para    cancelamento.  Vantagem:  evitar  que  o  coordenador  tenha  que  esperar  o  Gmeout  para  liberar  o  recurso.  

2.  PermiGr  ao  coordenador  gerenciar  o  tempo  de  Gmeout  e  assim  nem  começar  as  tentaGvas  de  confirmação  perto  do  fim.  

3.  O  coordenador  ter  um  diálogo  com  os  serviços  para  os    casos  de  exceção.  

4.  Enfraquecer  premissas  do  padrão  TCC  em  casos  especiais    (ex.  GET  read  only)    

Page 101: Transações compensatórias usando REST - QCon SP 2011

O  que  vimos:  

Uma  solução  leve  e  atômica  para  transações  via  REST,    baseada  na  aplicação  do  modelo  Try-­‐Cancel/Confirm  ao  projeto  de  um  sistema  usando  Web  services  RESTful.  

Page 102: Transações compensatórias usando REST - QCon SP 2011

O  que  vimos:  

Uma  solução  leve  e  atômica  para  transações  via  REST,    baseada  na  aplicação  do  modelo  Try-­‐Cancel/Confirm  ao  projeto  de  um  sistema  usando  Web  services  RESTful.  

Um  exemplo  de  um  protocolo  simples  que  consegue    atomicidade  e  desacoplamento  entre  recursos  distribuídos    se  eles  forem  compa�veis  com  o  padrão  Try-­‐Cancel/Confirm.  

Page 103: Transações compensatórias usando REST - QCon SP 2011

O  que  vimos:  

Uma  solução  leve  e  atômica  para  transações  via  REST,    baseada  na  aplicação  do  modelo  Try-­‐Cancel/Confirm  ao  projeto  de  um  sistema  usando  Web  services  RESTful.  

Um  exemplo  de  um  protocolo  simples  que  consegue    atomicidade  e  desacoplamento  entre  recursos  distribuídos    se  eles  forem  compa�veis  com  o  padrão  Try-­‐Cancel/Confirm.  

Que  seu  uso  garante  atomicidade  e  consistência  no  caso  de    falhas  com  as  mesmas  limitações  das  soluções  clássicas.  

Page 104: Transações compensatórias usando REST - QCon SP 2011

O  que  vimos:  

Uma  solução  leve  e  atômica  para  transações  via  REST,    baseada  na  aplicação  do  modelo  Try-­‐Cancel/Confirm  ao  projeto  de  um  sistema  usando  Web  services  RESTful.  

Um  exemplo  de  um  protocolo  simples  que  consegue    atomicidade  e  desacoplamento  entre  recursos  distribuídos    se  eles  forem  compa�veis  com  o  padrão  Try-­‐Cancel/Confirm.  

Que  seu  uso  garante  atomicidade  e  consistência  no  caso  de    falhas  com  as  mesmas  limitações  das  soluções  clássicas.  

Que  pode  ser  usado  em  todos  os  ambientes  de    desenvolvimento  e  por  qualquer  linguagem  de  programação.  

Page 105: Transações compensatórias usando REST - QCon SP 2011

Agradecimentos:  

Jim  Gray,  Hector  G.  Molina,  Rafael  Alonso,  Kenneth  Selem,    Pat  Helland,  Henry  Korth,  Eliezer  Levy,  Abraham  Silbershatz,  Jim  Webber,  Savas  ParatasGdis,  Ian  Robinson,  Sam  Ruby,    Leonard  Richarson,  Guilherme  Silveira,  Paulo  Silveira,    Subbu  Allamaraju,  Mark  Li�le,  Boris  Lublinski,  Mercy  Njima,  Thomas  Strandenaes,  Randi  Karlsen,  Robert  Grossman,    Kotagiri  Ramamohanarao,  James  Bailey,  Paolo  Buse�a,  Eric    Newcomer,  Philip  Bernstein,  Andreas  Reuter,  Stefan  Tilkov,    Erik  Wilde,  Guy  Pardon  e  Cesare  Pautasso  que  foram  fontes  do  conhecimento  aqui  comparGlhado.  

Page 106: Transações compensatórias usando REST - QCon SP 2011

Agradecimentos:  

Jim  Gray,  Hector  G.  Molina,  Rafael  Alonso,  Kenneth  Selem,    Pat  Helland,  Henry  Korth,  Eliezer  Levy,  Abraham  Silbershatz,  Jim  Webber,  Savas  ParatasGdis,  Ian  Robinson,  Sam  Ruby,    Leonard  Richarson,  Guilherme  Silveira,  Paulo  Silveira,    Subbu  Allamaraju,  Mark  Li�le,  Boris  Lublinski,  Mercy  Njima,  Thomas  Strandenaes,  Randi  Karlsen,  Robert  Grossman,    Kotagiri  Ramamohanarao,  James  Bailey,  Paolo  Buse�a,  Eric    Newcomer,  Philip  Bernstein,  Andreas  Reuter,  Stefan  Tilkov,    Erik  Wilde,  Guy  Pardon  e  Cesare  Pautasso  que  foram  fontes  do  conhecimento  aqui  comparGlhado.  

E  uma  homenagem  especial  ao  Roy  Fielding,  porque  sem  ele  a  Web  seria  outra  ou  nem  seria.      

Page 107: Transações compensatórias usando REST - QCon SP 2011

Obrigado  Qcon  SP  2011  

Perguntas?  

@blpsilva    (visite  o  blog)  @lucabastos  

Thanks  Roy  REST  rocks