Este documento discute a arquitetura RESTful implementada no sistema Alexandria da Abril Mídia. Resume as seguintes informações essenciais:
1) O sistema é composto por vários domínios, serviços e sites que se comunicam através de uma arquitetura orientada a recursos e protocolo HTTP.
2) A arquitetura RESTful foi escolhida por permitir escalabilidade, desempenho, disponibilidade e evolução independente dos componentes.
3) Os principais desafios enfrentados foram a diversidade de requisitos e a
8. “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
21. 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
22. serviço
• 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
30. Por que escolhemos REST?
• Protocolo de transferência amplamente
utilizado
• Escalabilidade
• Performance alta
• Alta disponibilidade
• Permitir evolução sem parar o sistema
• Permitir evolução sem quebrar os clientes
• Segurança
31. Por que escolhemos REST?
• HTTP
• Escalabilidade
• Performance alta
• Alta disponibilidade
• Permitir evolução sem parar o sistema
• Permitir evolução sem quebrar os clientes
• Segurança
32. Por que escolhemos REST?
• HTTP
• Web Caches
• Performance alta
• Alta disponibilidade
• Permitir evolução sem parar o sistema
• Permitir evolução sem quebrar os clientes
• Segurança
33. Por que escolhemos REST?
• HTTP
• Web Caches
• Web Proxies (localização geografica)
• Alta disponibilidade
• Permitir evolução sem parar o sistema
• Permitir evolução sem quebrar os clientes
• Segurança
34. Por que escolhemos REST?
• HTTP
• Web Caches
• Web Proxies (localização geografica)
• Load Balancers “comoditizados”
• Permitir evolução sem parar o sistema
• Permitir evolução sem quebrar os clientes
• Segurança
35. Por que escolhemos REST?
• HTTP
• Web Caches
• Web Proxies (localização geografica)
• Load Balancers “comoditizados”
• Load Balancers
• Permitir evolução sem quebrar os clientes
• Segurança
36. Por que escolhemos REST?
• HTTP
• Web Caches
• Web Proxies (localização geografica)
• Load Balancers “comoditizados”
• Load Balancers
• HTML, JSON, XML
• Segurança
37. Por que escolhemos REST?
• HTTP
• Web Caches
• Web Proxies (localização geografica)
• Load Balancers “comoditizados”
• Load Balancers
• HTML, JSON, XML
• HTTPS / TLS
40. 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
41. 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
42. REST= +LCODC$SS U
• Visibilidade
• Escalabilidade
(recursos alocados)
• Confiabilidade
• Performance de rede
Stateless
43. Stateless no Alexandria
• HATEOAS implementado nas APIs
• cookies nas operações destrutivas
REST= +LCODC$SS U
44. REST= +LCODC$SS U
• Eficiência
• Escalabilidade
• Performance
percebida pelo usuário
• Confiabilidade
Cache
45. 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
REST= +ULCODC$SS
46. REST= +LCODC$SS U
• Encapsula complexidade
• Evolvabilidade
• Simplicidade
• Performance percebida
pelo usuário
Layered System
47. • 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
REST= +ULCODC$SS
Layered System no Alexandria
48. REST= +LCODC$SS U
• Extensibilidade
• Simplificação do client
• Visibilidade
Code-on-demand
49. • 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
REST= +ULCODC$SS
Code-on-demand no Alexandria
50. REST= +LCODC$SS U
• Simplificação pela generalidade
• Visibilidade
• Desacoplamento
• Evolvabilidade
• Performance percebida
pelo usuário
• Restrita a dados com
granularidade larga
Uniform interface
77. pontos importantes em performance
client
origin server
• performance dos
connectors
• non-blocking
HTTP clients
• cache local
• middleware
architecture
• libs padronizadas
• short stacks
• evented servers
• libs padronizadas
• good TTL strategy
• middleware
architecture
• caches
• HTTP plumbing
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