40

Arquitetura de um sistema crítico de alta disponibilidade com soluções open source

Embed Size (px)

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.

Citation preview

Page 1: Arquitetura de um sistema crítico de alta disponibilidade com soluções open source
Page 2: Arquitetura de um sistema crítico de alta disponibilidade com soluções open source

QCon São Paulo 2011

Arquitetura de um sistema crítico de alta disponibilidade com

soluções open source

Page 3: 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

Page 4: Arquitetura de um sistema crítico de alta disponibilidade com soluções open source

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

Page 5: Arquitetura de um sistema crítico de alta disponibilidade com soluções open source

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

Page 6: Arquitetura de um sistema crítico de alta disponibilidade com soluções open source

SPC Brasil

Page 7: Arquitetura de um sistema crítico de alta disponibilidade com soluções open source

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

Page 8: Arquitetura de um sistema crítico de alta disponibilidade com soluções open source

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)

Page 9: Arquitetura de um sistema crítico de alta disponibilidade com soluções open source

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

Page 10: Arquitetura de um sistema crítico de alta disponibilidade com soluções open source

Solução Adotada

Page 11: Arquitetura de um sistema crítico de alta disponibilidade com soluções open source

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)

Page 12: Arquitetura de um sistema crítico de alta disponibilidade com soluções open source

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

Page 13: Arquitetura de um sistema crítico de alta disponibilidade com soluções open source

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

Page 14: Arquitetura de um sistema crítico de alta disponibilidade com soluções open source

Solução Adotada

Plataforma de desenvolvimento e runtimeCache: EhCache, MemcachedLoad balancer: HAProxyJMS: Apache ActiveMQSO: Red Hat Linux (server)Desenvolvimento: Eclipse + Git + Ubuntu Linux

Page 15: Arquitetura de um sistema crítico de alta disponibilidade com soluções open source

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)

Page 16: Arquitetura de um sistema crítico de alta disponibilidade com soluções open source

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)

Page 17: Arquitetura de um sistema crítico de alta disponibilidade com soluções open source

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

Page 18: Arquitetura de um sistema crítico de alta disponibilidade com soluções open source

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

Page 19: Arquitetura de um sistema crítico de alta disponibilidade com soluções open source

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

Page 20: Arquitetura de um sistema crítico de alta disponibilidade com soluções open source

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

Page 21: Arquitetura de um sistema crítico de alta disponibilidade com soluções open source

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

Page 22: Arquitetura de um sistema crítico de alta disponibilidade com soluções open source

Infraestruturae Arquitetura

Page 23: Arquitetura de um sistema crítico de alta disponibilidade com soluções open source

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

Page 24: Arquitetura de um sistema crítico de alta disponibilidade com soluções open source

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)

Page 25: Arquitetura de um sistema crítico de alta disponibilidade com soluções open source

Sistema de consultas

Infraestrutura

Page 26: Arquitetura de um sistema crítico de alta disponibilidade com soluções open source

Infraestrutura

Sistema de consultas – por servidor

Page 27: Arquitetura de um sistema crítico de alta disponibilidade com soluções open source

Infraestrutura

Monitoração dos serviços

Page 28: Arquitetura de um sistema crítico de alta disponibilidade com soluções open source

Infraestrutura

Monitoração do pool de conexões

Page 29: Arquitetura de um sistema crítico de alta disponibilidade com soluções open source

Arquitetura da Aplicação

JSP

Controller

Façade

Service

DAO

Domain

Remoting Handler Web Service

Socket SOAP

Hibernate

Spring

Jetty

Spring Security

Page 30: Arquitetura de um sistema crítico de alta disponibilidade com soluções open source

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

Page 31: Arquitetura de um sistema crítico de alta disponibilidade com soluções open source

Arquitetura da Aplicação

Comm BrokerComunicação com bases exernas

SPCCommBrokerClient

Fornecedor 1

SistemasSPC

CommBroker

Fornecedor 2

OUTROS

LOGs

Page 32: Arquitetura de um sistema crítico de alta disponibilidade com soluções open source

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

Page 33: Arquitetura de um sistema crítico de alta disponibilidade com soluções open source

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!

Page 34: Arquitetura de um sistema crítico de alta disponibilidade com soluções open source

Melhorias

Page 35: Arquitetura de um sistema crítico de alta disponibilidade com soluções open source

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)

Page 36: Arquitetura de um sistema crítico de alta disponibilidade com soluções open source

Tuning

Memória-Xms1536m -Xmx1536m -Xmn128m -XX:MaxPermSize=256m

Memória da JVM

Eden Tenured Permanent

Memória do SO

Other

heap restante

Page 37: Arquitetura de um sistema crítico de alta disponibilidade com soluções open source

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]

Page 38: Arquitetura de um sistema crítico de alta disponibilidade com soluções open source

Tuning

TestesRealizar testes de carga e de estresse (JMeter)Medir os resultados e achar o ponto ideal

Page 39: Arquitetura de um sistema crítico de alta disponibilidade com soluções open source

Perguntas e Respostas

Page 40: Arquitetura de um sistema crítico de alta disponibilidade com soluções open source

Obrigado!

[email protected]

about.me/danieldestro@danieldestro