Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

49
Arquitetura orientada a serviços em Ruby e Java Maurício Linhares

description

Apresentação feita na RubyConf Brazil 2012.

Transcript of Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

Page 1: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

Unindo mundos – Arquitetura orientada a serviços em Ruby e

JavaMaurício Linhares

Page 2: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

WHO?

Software Developer da OfficeDrop.com

@mauriciojr

https://github.com/mauricio

Page 3: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop
Page 4: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

SOA não é ruim, as implementações da idéia que são um

desastre

Page 5: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

SOA é construir aplicações

independentes, que fazem uma coisa bem e delegam o que não

sabem pra outrosLembra de alguma coisa?

Page 6: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

Write programs that do one thing and do

it well. Write programs to work together. Write

programs to handle text streams because

it is an universal interface.

Doug Mcllroy – The UNIX philosophy

Page 7: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

Blame the messenger, not the

message

Page 8: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop
Page 9: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

Aplicação Rails antiga (2.x), grande, com

uma equipe crescente

trabalhando nela

Page 10: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

Rodar todos os testes dava uma preguiça…

Page 11: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

Usávamos o banco de dados como fila

Page 12: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

Longos períodos de QA

Page 13: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

Tudo acontece num só lugar, numa

aplicação única, onde todos trabalham o dia

inteiroPor Que?

Page 14: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

Como resolver isso?

Page 15: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

Ah, o divórcio!

Page 16: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

As duas zonas

Gestão de Documentos

Processamento de Documentos

Page 17: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

Gerenciar documentos fica na

webapp, processamento de documentos migra

para uma nova aplicação

Page 18: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

Se é uma nova aplicação, podemos escolher uma outra tecnologia? Como integrar as duas

apps?

Page 19: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

resque como fila de trabalhos

nosso fork do jesque em - https://github.com/mauricio/jesque

Page 20: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

API REST com JSON para comunicação

Page 21: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

S3 para armazenamento de

resultados

Page 22: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

Cliente envia arquivo para app servers

Mensagem de processamento é enviada para a fila

Worker aceita o trabalho

Worker sinaliza que o arquivo foi processado

Page 23: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

Funcionou?

Page 24: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

As duas aplicações passaram a evoluir

em separado

Page 25: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

O backend tinha ciclos de deployment mais curtos, que não afetavam a aplicação

webLembre-se, fila do resque e interface REST

Page 26: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

Menos código na aplicação web

significava menos testes sendo rodados

Quem estava lá não se preocupava mais com backend

Page 27: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

Não haviam mais dependências diretas

na hora de um release, se os

contratos fossem honrados, as aplicações

funcionavam

Page 28: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

Mensagens auto-contidas – o backend

recebe tudo o que precisa na mensagem

Page 29: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

WHERE DID WE

Page 30: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

Ter aplicações separadas trouxe

problemas de comunicação entre

equipesVocê não pode esquecer que estão todos no mesmo barco

Page 31: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

Nem todo mundo rodava o ambiente

completo e a documentação nem

sempre era atualAs aplicações ainda devem ser usadas em conjunto

Page 32: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

A implementação do Jesque é enrolada e não podemos usar plugins facilmente

Page 33: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

API pública e API privada não devem

ser misturadas

Page 34: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

Ter várias aplicações com vários

ambientes diferentes complica

deployments e montagem de

equipes

Page 35: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

O que aprendemos?

Page 36: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

Construa aplicações pequenas e focadas em algum trabalho

Page 37: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

Só compartilhe dados pela API, não use

bancos de dados pra isso.

Page 38: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

Defina o que cada aplicação deve fazer

claramente

Page 39: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

Crie uma interface mínima somente com

o que está sendo utilizado agora

Page 40: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

Não misture a representação de saída com os seus

modelos!Procure soluções como o Roar -

https://github.com/apotonick/roar

Page 41: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

Separe fontes/bancos de dados.

A escalabilidade agradece.

Page 42: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

Planeje e construa para falhas

Page 43: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

Construa para falhar

Page 44: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

Rails Engines? Será?

Page 45: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

Onde nós estamos hoje?

Page 46: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

Front-end HTML migrando pra outra

aplicação

Page 47: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

Cluster com auto-scaling e

independente de ambiente para o

backend a caminho

Page 48: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

ELES DISSERAM QUE SOA ERA RUIM

NÃO DIZEM MAIS

Page 49: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop

FIMObrigado a todos