O documento apresenta um sistema chamado Alexandria para publicação de conteúdo digital utilizando a arquitetura REST e hipermídia. O sistema é composto por domínios, serviços e data entries que se comunicam através de APIs RESTful para fornecer conteúdo para vários sites de uma empresa de mídia. O sistema permite escalabilidade, evolução independente dos componentes e reúso de funcionalidades entre os sites.
Alexandria: um Sistema de Publicação Digital RESTful
1. Alexandria: um Sistema de
Sistemas para Publicação de
Conteúdo Digital utilizando
REST e Hipermídia
Luís Cipriani
@lfcipriani (twitter, linkedin, github, ...)
Seminário de Sistemas - IME (2013-04-08)
9. boa
arquitetura =
custo
aceitável + necessidades
atendidas
* ß
MTRH
ß quão bem o seu cliente
sabe pedir o que quer :-P MTRH mean time to
recovery happiness
14. “organizações que projetam sistemas são restritas a
produzir projetos que são cópias das estruturas de
comunicação dessas organizações”
Lei de Conway
http://www.melconway.com/Home/Conways_Law.html
26. domínio
• acesso e manipulação de recursos
• implementa regras de negócio
• servidor HTTP + base de dados
• infra “isolada”
• ~ 8 domínios
• ex: editorial (matérias, galerias, etc), anotações
(comentários), estabelecimentos, mídia, pessoas
27. • consumo e manipulação de recursos
• servidor HTTP + (opcional base de dados)
• infra “isolada”
• ~ 12 serviços
• ex: console, socialcore, search, Abril ID, abr.io, etc
serviço
28. data-entry
• entrada da Redação
• aplicação web
• ~ 1 para cada domínio
• “API explorer”
29.
30. • admin do site sitetools
• manipulação das áreas e templates
• agiliza criação de produtos
• a fronteira com o usuário
• opcional
37. REST = LCODC$SS + U
Client-Server
• Separação de responsabilidades
• Escalabilidade (simplificação)
• Evolução independente
http://byterot.blogspot.co.uk/2012/06/what-i-think-coupling-is.html
38. REST = LCODC$SS + U
Client-Server no Alexandria
• Separação de responsabilidades
• entre domínios e sites
• entre domínios e data entries
• entre domínios e serviços
• Escalabilidade
• funcionalidade implementada nos clients
• domínios só lidam com recursos (simplicidade)
• Evolução independente
• em certos pontos da arquitetura não há
• falta retro-compatibilidade
39. REST = LCODC$SS + U
Stateless
• Visibilidade
• Escalabilidade • Performance de rede
(recursos alocados)
• Confiabilidade
40. REST = LCODC$SS + U
Stateless no Alexandria
• HATEOAS implementado nas APIs
• cookies nas operações destrutivas
41. REST = LCODC$SS + U
Cache
• Eficiência • Confiabilidade
• Escalabilidade
• Performance
percebida pelo usuário
42. REST = LCODC$SS + U
Cache no Alexandria
• Built-in no protocolo HTTP
• shared-caches instanciados entre alguns nós
• pesquisa sobre caches locais
• nem todos os nós implementam estratégia de cache
• purge de recursos diretamente no cache
43. REST = LCODC$SS + U
Layered System
• Encapsula complexidade • Performance
• Evolvabilidade percebida pelo usuário
• Simplicidade
44. REST = LCODC$SS + U
Layered System no Alexandria
• shared-caches
• gateways para expor API para a Web
• balanceadores de carga
• encapsulamento de autenticação corporativa
• encapsulamento de legado
• permite evolução incremental do legado
45. REST = LCODC$SS + U
Code-on-demand
• Extensibilidade • Visibilidade
• Simplificação do client
46. REST = LCODC$SS + U
Code-on-demand no Alexandria
• widgets dos data-entries
• no futuro, o console também será instanciado assim
• é um elemento importante do REST que foi esquecido
por um tempo pela nossa arquitetura
47. REST = LCODC$SS + U
Uniform interface
• Simplificação pela generalidade • Performance
• Visibilidade percebida pelo usuário
• Desacoplamento • Restrita a dados com
• Evolvabilidade granularidade larga
77. pontos importantes em performance
• performance dos • short stacks
connectors • evented servers
• non-blocking • libs padronizadas
HTTP clients
client • caches
• HTTP plumbing origin server
• cache local
• middleware • good TTL strategy
architecture • middleware
• libs padronizadas architecture
78. • Lei de Postel
• Seja conservador no que faz, seja liberal no que você aceita dos outros
• REST é uma arquitetura de longo prazo
• Defenda com todas as suas forças:
• seus metadados (recursos)
• sua interface
• Documentação é essencial
• Independência de desenvolvimento dos nós tem
suas desvantagens
• medir/monitorar o desempenho é importantíssimo