Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop
-
Upload
mauricio-linhares -
Category
Technology
-
view
755 -
download
0
description
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](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/1.jpg)
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](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/2.jpg)
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](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/3.jpg)
![Page 4: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/4.jpg)
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](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/5.jpg)
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](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/6.jpg)
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](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/7.jpg)
Blame the messenger, not the
message
![Page 8: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/8.jpg)
![Page 9: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/9.jpg)
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](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/10.jpg)
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](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/11.jpg)
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](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/12.jpg)
Longos períodos de QA
![Page 13: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/13.jpg)
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](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/14.jpg)
Como resolver isso?
![Page 15: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/15.jpg)
Ah, o divórcio!
![Page 16: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/16.jpg)
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](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/17.jpg)
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](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/18.jpg)
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](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/19.jpg)
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](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/20.jpg)
API REST com JSON para comunicação
![Page 21: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/21.jpg)
S3 para armazenamento de
resultados
![Page 22: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/22.jpg)
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](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/23.jpg)
Funcionou?
![Page 24: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/24.jpg)
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](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/25.jpg)
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](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/26.jpg)
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](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/27.jpg)
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](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/28.jpg)
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](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/29.jpg)
WHERE DID WE
![Page 30: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/30.jpg)
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](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/31.jpg)
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](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/32.jpg)
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](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/33.jpg)
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](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/34.jpg)
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](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/35.jpg)
O que aprendemos?
![Page 36: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/36.jpg)
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](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/37.jpg)
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](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/38.jpg)
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](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/39.jpg)
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](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/40.jpg)
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](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/41.jpg)
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](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/42.jpg)
Planeje e construa para falhas
![Page 43: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/43.jpg)
Construa para falhar
![Page 44: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/44.jpg)
Rails Engines? Será?
![Page 45: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/45.jpg)
Onde nós estamos hoje?
![Page 46: Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/46.jpg)
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](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/47.jpg)
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](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/48.jpg)
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](https://reader035.fdocumentos.com/reader035/viewer/2022081519/5573221bd8b42aae7b8b4dcb/html5/thumbnails/49.jpg)
FIMObrigado a todos