Galera, mestres e colegas de trabalho! rs
Como não tenho muita experiencia como arquiteto, queria compartilhar com vocês um cenário que estou enfrentando e ouvir opiniões referentes a frameworks, técnicas e tecnologias a serem utilizadas no cenário que irei descrever. PS.: Me desculpe se eu estiver sendo muito genérico em algumas áreas, mas meus chefes querem segredo de estado sobre o sistema. - Então vamos la.
Tenho um componente javascript que tem duas funções básicas.
1- enviar informações sobre as ações do usuários para um Web-service REST
2- consumir informações do próprio Web-service REST para apresenta-las via requisições ajax.
obs: esse componente foi projetado para ser utilizado em aplicações externas, dos clientes. E isso eh importante mencionar porque no lado do servidor temos uma instancia do facade (core da aplicação) separada para cada contexto (leia-se cada cliente consumidor do serviço). Outro detalhe importante, a chave de identificação do cliente eh enviada de forma criptografada (MD5 provavelmente) no header da requisição HTTP.
No lado do servidor, tenho dois momentos distintos.
1- Um pré-processamento das informações necessárias
2- A partir dos dados pré-processados, consulta-los através da requisição feita pelo componente javascript
Esse segundo momento do lado do servidor trata-se da minha principal duvida atualmente. Que estrategia utilizar para tornar possível essa necessidade de alta velocidade de resposta? E isso impacta na forma como eu eu vou pré-processar minhas informações, pois gostaria de deixa-las no formato mais próximo do ideal para consumo. Algumas indagações minhas ate o momento:
-
Se eu armazenar o resultado do processamento em banco, não tornaria a resposta mais lenta? E se utilizarmos uma estrategia de caching?
-
Pensei em armazenar em um “banco” do tipo chave-valor (ex.: berkeley-db). Mas por questões de licença preciso de outra sugestão que tenha licença LGPL ou Apache 2.0.
Detalhes extra:
Queremos montar uma arquitetura escalar e de boa capacidade de resposta, algo com um throughput entre 50~100 reqs/segundo.
Planejamos hospedar o serviço no cloud da Amazon, EC2, em uma instancia do tipo linux.
Em caso de uso de um banco chave-valor, acho que poderíamos utilizar o Apache Hadoop para mantermos sincronizadas os ?bancos? entre as diversas instancias, isso em caso de necessidade de aumentarmos o número de instancias online em nossa arquitetura, não é!?