arquitetura de um sistema crítico de alta disponibilidade com soluções open source
DESCRIPTION
A plataforma Java revolucionou o panorama do desenvolvimento com a sua comunidade ativa, de onde originaram muitos projetos e iniciativas de soluções open source. Diversas soluções nasceram e são utilizadas com frequência, mas podem apresentar problemas comuns se não tomarmos o devido cuidado. Será apresentada uma abordagem de como utilizar software livre, como os populares Spring, Hibernate, Netty e Jetty com clusterização e virtualização, em uma arquitetura focada em um sistema crítico (24x7) de alta disponibilidade que atende milhares de dezenas de solicitações diariamente, no mercado de 300 mil cientes e 430 mil usuários do SPC. Veremos problemas enfrentados e as medidas tomadas em situações diversas, debatendo detalhes técnicos e gargalos comuns que podem aparecer.TRANSCRIPT
QCon São Paulo 2011
Arquitetura de um sistema crítico de alta disponibilidade com
soluções open source
Palestrante
Daniel Destro do CarmoCiências da Computação (PUC/SP – 97/2000)MBA em TI (IPT/USP)12 anos atuando em TI (certificado SCJP, SCEA)
Desenvolvimento, consultoria e treinamentoArtigos publicados: GUJ e Java MagazinePalestras: Conexão Java e Just JavaAtualmente no SPC Brasil
Arquiteto de soluções / Infraestrutura
SPC Brasil
Confederação Nacional dos Dirigentes LojistasFormada pelas Câmaras de Dirigentes Lojistas (CDL)
SPC BrasilSistema de informação das CDLs (+ de 2.200)Todas as capitais e principais cidadesInformação de crédito de PF e PJProdutos para o mercado de crédito
SPC Brasil
Breve históricoSistema antigo escrito em Oracle Web Toolkit (PL/SQL)
Muitos problemasTrabalhoso, ruim de manter e escalar
Novo sistema escrito em Java 6Feito a partir do zeroNova especificação de negócio
SPC Brasil
SPC Brasil
Em números
300.000 clientes em todo Brasil
+ de 200.000 logins diários (48.000 operadores)
300.000 consultas por dia (pico de + 500 mil)Média de 15 e pico de 30 consultas por segundoHorários críticos das 9h-11h e das 15-17h
SPC Brasil
Mais números
Banco de dados com 150 milhões de CPFse 18 milhões de CNPJs
Log de consultas chega a 1 bilhão de registros
2 Terabytes de dados em storage rápido (FC)
SPC Brasil
Outras necessidades
Intensa troca de informações com parceiros
Carregamento e tratamento de muitas informações
Processamento offline (em lote) – consulta, relatório, …
Sistema crítico 24x7 com baixo tempo de resposta
Solução Adotada
Solução Adotada
AplicaçãoBaseada em soluções livres (open source)
Escolha gerencial para redução de custos
Soluções de mercado altamente utilizadas e confiáveis
Banco de dadosOracle 10g RAC (cluster)
Solução Adotada
Oracle 10g RAC3 nós no clusterCrescimento de 50 gigas por mêsRodando sobre AIXMonitoração com Grid ControlReplicação dos dados com Data Guard (físico)
Datacenters separadados geograficamente
Solução Adotada
Plataforma de desenvolvimento e runtimeTecnologia Java (versão 6) / JEEFrameworks: Spring e Hibernate (ejbless)
Lucene, Quartz, JBoss Netty,Apache Commons, XStream,Display Tag, Sitemesh, JAX-WS, etc
Servidores Web: Apache + JettyTestes: JUnit, JMeter
Solução Adotada
Plataforma de desenvolvimento e runtimeCache: EhCache, MemcachedLoad balancer: HAProxyJMS: Apache ActiveMQSO: Red Hat Linux (server)Desenvolvimento: Eclipse + Git + Ubuntu Linux
Servidores Web
Apache HTTP ServerPrecisa de motivos? Alguém sugere outro?
JettyContainer web JavaSimples, leve e eficienteCustomizável e extensívelFaz uso de IO assíncrono (NIO)Baixo consumo de memória e CPUUsado no Google App Engine (GAE)
Frameworks
Spring + HibernateDupla é ótima alternativa ao EJBSimples de usar, poderoso e flexívelÓtimo suporte a IoC / DI, transações, etcGerenciamento do ciclo de vida dos beansIntegração com outros frameworksControle de segurança extensível com Spring SecurityPermite uso de aspectos (AOP)
Cache
EhCacheDados pouco voláteis, mas muito acessadosReduzir acesso ao BD e melhorar tempo de resposta
MemcachedCache distribuido de objetos em memóriaVoltado para acelerar aplicações web dinâmicasGuarda pares de chave/valor de dados arbitráriosTempo de acesso O(1)Expiração dos dados armazenados
Load Balancer
ApplianceHardware, em geral caro – cuida da porta de entradaFaz o load balance entre servidores físicos
HAProxySoftware de load balanceLeve, rápido e configurávelEstatísticas de uso
Comunicação
JBoss NettyFramework para comunicação via rede (socket)Modelo baseado em eventos assíncronosAlta performance e escalabilidadeFácil desenvolvimento (handlers)Controle no número de workers
Mensageria
Apache ActiveMQUsa protocolo OpenWire para Java (rápido)Suporte para Spring FrameworkPersistência com alto desempenho usando journalSuporta clusterização (modo master-slave)Oferece interface via API REST
Indexação
Apache LuceneUsado para indexar e pesquisar dados de consumidores
150 milhões de CPFs e 18 milhões de CNPJs
QuartzAgendamento de processosIntegração com SpringFacilidade de uso
Infraestruturae Arquitetura
Alta disponibilidade
Maiores preocupaçõesBaixo tempo de respostaMinimizar consumo de recursosReduzir downtime (programado ou não)Atualização de versão em plena operação (sem parada)Escalável para atender crescimento da demanda
Estrutura foi de 2 para 4 servers (8 para 32 Gb RAM)Ter redundância de serviços (contingenciamento)Monitorar todos os serviços
Infraestrutura
Sistema de consultasAtende diretamente os clientes (core da empresa)4 servers Dell (2 x Quad Core 2.33GHz, 32Gb RAM)
Outros sistemas3 servers Dell virtualizados (VMWare)
Banco de dados Oracle RAC3 servers IBM Power PC Risc (4 x 1.648MHz, 32 Gb RAM)
Sistema de consultas
Infraestrutura
Infraestrutura
Sistema de consultas – por servidor
Infraestrutura
Monitoração dos serviços
Infraestrutura
Monitoração do pool de conexões
Arquitetura da Aplicação
JSP
Controller
Façade
Service
DAO
Domain
Remoting Handler Web Service
Socket SOAP
Hibernate
Spring
Jetty
Spring Security
Arquitetura da Aplicação
Sistema de consultasTempo de resposta em pouco mais de 1 segundoAlta utilização de agentes paralelos (threads)Fontes de dados internas e externasAlguns processamentos vão para fila JMS
Consulta
Agente 1
Agente 2
Agente N
Serviço
Serviço
BD
Arquitetura da Aplicação
Comm BrokerComunicação com bases exernas
SPCCommBrokerClient
Fornecedor 1
SistemasSPC
CommBroker
Fornecedor 2
OUTROS
LOGs
Arquitetura da Aplicação
Comm BrokerUtilização do Netty
Netty Handler#1
Handler#2
Handler#N
CommBrokerServiceHandler
Service 1
Service 2
Service N
Socket
Socket
Socket
Algumas considerações
Baremetal x VirtualizaçãoNosso core fica em servers exclusivosServiços offline estão virtualizados
Tenha redundância de TUDOSistemas (e pessoas) falham!
Melhorias
Tuning
Banco de dadosDBA deve efetivamente monitorar e cuidar do BDUsar índices e queries otimizadasAtivar cache de sequenceSegmentar dados de tabelas grandes e críticas (partição)Criar tabelas históricas para dados não importantesCuidado com locks (pode gerar contenção)
Tuning
Memória-Xms1536m -Xmx1536m -Xmn128m -XX:MaxPermSize=256m
Memória da JVM
Eden Tenured Permanent
Memória do SO
Other
heap restante
Tuning
Garbage Collector-XX:+UseConcMarkSweepGC -XX:+UseParNewGC-XX:+CMSPermGenSweepingEnabled-XX:+CMSClassUnloadingEnabled-Dsun.rmi.dgc.client.gcInterval=3600000-Dsun.rmi.dgc.server.gcInterval=3600000
[GC [ParNew: 110843K->4118K(118016K), 0.0102440 secs] 615483K->508855K(1035520K), 0.0105290 secs][GC [ParNew: 109078K->3158K(118016K), 0.0073700 secs] 613815K->508124K(1035520K), 0.0075610 secs][GC [ParNew: 108228K->4378K(118016K), 0.0103470 secs] 613195K->509817K(1035520K), 0.0105690 secs][GC [ParNew: 109338K->3851K(118016K), 0.0078400 secs] 614777K->509450K(1035520K), 0.0080830 secs]
Tuning
TestesRealizar testes de carga e de estresse (JMeter)Medir os resultados e achar o ponto ideal
Perguntas e Respostas