O documento discute o uso de Apache Cassandra como cache distribuído no SPC Brasil. Resume a arquitetura de Cassandra, seu modelo de dados flexível baseado em colunas e famílias de colunas, e demonstra suas APIs para leitura, escrita e administração.
2. Palestrante
~15 anos trabalhando com tecnologia
Instrutor, arquiteto, mentor e desenvolvedor de
software e eletronica
Participa de comunidades de usuarios: RSJUG,
XP-RS, CEJUG, Open4Education...
Sun Certified Trainer, SCEA 1 e 5, SCDJWS 1.4 e
5, SCWCD 1.4, SCBCD 5, SCJP 5, SCJA 1
Arquiteto de Software e Sistemas no SPC Brasil e
Instrutor Globalcode
Globalcode – Open4education
3. Agenda
Cache no SPC Brasil
Apache Cassandra
Arquitetura
Modelo de dados
Configuracoes
APIs
Demo
Globalcode – Open4education
4. Cache no SPC Brasil
~100 transacoes por segundo(ou mais)
22 processos
Caches mutaveis com replicacao via Ehcache+RMI
Caches imutaveis com Ehcache
Caches isolados usando ConcurrentHashMap
Replicacao Ehcache+RMI desligada, reboot dos
Nos para atualizacao
Globalcode – Open4education
5. Cache no SPC Brasil
Cache chave+valor
Todo cache eh de leitura intensa
Caches mutaveis sao de escrita ocasional
Tentativas com Terracotta nao foram satisfatorias:
instrumentar tudo nao eh legal!
Nao foi possivel utilizar o controle de sessoes
compartilhadas web(Jetty) como cache distribuido
CHEGA! NoSQL?
Globalcode – Open4education
6. Cache no SPC Brasil
Capacidades necessarias
Estabilidade
Disponibilidade
Baixa latencia(uso de memoria, C10K)
Consistencia(ultima versao da informacao)
Persistencia
Tolerancia a perda de dados(replicacao)
Recuperacao de falhas de modo automatico(failover)
Escalabilidade(horizontal)
Cases de sucesso
Livre, aberto, gratis, comunidade
Globalcode – Open4education
8. Cache no SPC Brasil
Avaliando NoSQL tipo chave+valor
Memcached
Redis
Voldemort
APACHE CASSANDRA! Porem...
Globalcode – Open4education
9. Apache Cassandra
Criado pelo Facebook, e usado em parte dele
Baseado no Amazon Dynamo
Usuarios: Digg, Reddit, Cisco Webex, Rackspace,
Twitter
Chave+valor
Tipos dinamicos versionados com timestamp
Atomicidade por chave
Configuracao simples
Globalcode – Open4education
10. Arquitetura
MySQL: muito IO imprevisivel!
Solucoes baseadas em arquivos precisam de lock!
Armazenamento descentralizado
Tolerante a falhas
Elastico: adicione mais servidores a quente
Escala horizontalmente
Globalcode – Open4education
11. Arquitetura
Disponibilidade e tolerancia a perda de particoes
sobre consistencia(CAP)
Consistencia configuravel
Tradeoff: Consistencia versus Latencia
Particionamento e replicacao baseado no
Dynamo(Amazon) e modelo de dados
estruturado(ColumnFamily) baseado no
Bigtable(Google)
Globalcode – Open4education
13. Arquitetura
Administracao minima
Sem ponto unico de falha
Particionador configuravel
Replicacao configuravel: quantidade, rack e site
“aware”
Gossip, messaging, bootstrap, compaction
Memtable
Monitoracao e ferramentas de administracao
Commit log
Globalcode – Open4education
14. Arquitetura
Escritas: quorum(maioria) ou assincronas(1), sem
leituras, posicionamento, rapida(0.12ms vs 300ms
do MySQL), atomica, sempre garantida
Leitura: memtable e +RAM, mais lenta que a
escrita(15ms vs 350ms do MySQL), escala a
bilhoes de linhas
Consistencia: 1, quorum, all. Cuidado com a
latencia!
Globalcode – Open4education
15. Modelo de dados
Keyspace: grupo de chaves ou banco/schema
Column: chave e valor ou tabela de uma coluna e
linha
Globalcode – Open4education
16. Modelo de dados
SuperColumn: mapa ou tabela de n colunas e uma
linha apenas
Globalcode – Open4education
18. Modelo de dados
ColumnFamily: lista de mapas ou tabela
Globalcode – Open4education
19. Modelo de dados
SuperColumnFamily: grupos de SuperColumn
usando chave
Globalcode – Open4education
20. Modelo de dados
Configuravel em storage-conf.xml
Ordenacao eh feita na insercao, usando o nome da
coluna
ColumnFamily CompareWith
SuperColumn CompareSubcolumnsWith
Tipos: BytesType, UTF8Type, LexicalUUIDType,
TimeUUIDType, AsciiType, LongType
Globalcode – Open4education
23. Configuracoes
Autenticador
Particionador: Random por padrao ou ordenado
InitialToken: armazena chaves com token similar
CommitLogDirectory
DataFileDirectory
Seed
ListenAddress/StoragePort
ThriftAddress/ThriftPort
Outras opcoes avancadas de tunning...
Globalcode – Open4education
24. API
Apache Thrift
ConsistencyLevel: ZERO, ANY, ONE, QUORUM,
ALL
ColumnOrSuperColumn
Column
SuperColumn
ColumnPath
ColumnParent
Globalcode – Open4education