Upload
julioviegas
View
4.479
Download
5
Embed Size (px)
DESCRIPTION
Nessa apresentacao eu descrevo as necessidades de caching do SPC Brasil e como as capacidades oferecidas pelo Apache Cassandra se aplicam na solucao do problema. Tambem eh descrita a arquitetura, modelo de dados e API de uso do Cassandra. E algumas Cassandras... :)
Citation preview
Globalcode – Open4education
Apache Cassandra como cache distribuido
@julioviegasGlobalcoder
Globalcode – Open4education
~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
Palestrante
Globalcode – Open4education
Agenda
Cache no SPC Brasil
Apache Cassandra
Arquitetura
Modelo de dados
Configuracoes
APIs
Demo
Globalcode – Open4education
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
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
Cache no SPC BrasilCapacidades 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
Cassandras
Globalcode – Open4education
Cache no SPC Brasil
Avaliando NoSQL tipo chave+valorMemcached
Redis
Voldemort
APACHE CASSANDRA! Porem...
Globalcode – Open4education
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
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
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
Cassandras
Globalcode – Open4education
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
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
Modelo de dados
Keyspace: grupo de chaves ou banco/schema
Column: chave e valor ou tabela de uma coluna e linha
Globalcode – Open4education
Modelo de dados
SuperColumn: mapa ou tabela de n colunas e uma linha apenas
Globalcode – Open4education
Cassandras
Globalcode – Open4education
Modelo de dados
ColumnFamily: lista de mapas ou tabela
Globalcode – Open4education
Modelo de dados
SuperColumnFamily: grupos de SuperColumn usando chave
Globalcode – Open4education
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
Configuracoes
$CASSANDRA_HOME/conf/storage-conf.xml
ClusterName
AutoBootstrap
Keyspace– ColumnFamily– ReplicaPlacementStrategy & EndPointSnitch:
Unaware, Rack ou Datacenter– ReplicationFactor
Globalcode – Open4education
Cassandras
Globalcode – Open4education
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
API
Apache Thrift
ConsistencyLevel: ZERO, ANY, ONE, QUORUM, ALL
ColumnOrSuperColumn
Column
SuperColumn
ColumnPath
ColumnParent
Globalcode – Open4education
API
SlicePredicate
SliceRange
KeyRange
KeySlice
Mutation
Deletion
Globalcode – Open4education
API
AuthenticationRequest
NotFoundException
InvalidRequestException
UnavailableException
TimedOutException
TapplicationException
AuthenticationException/AuthorizationException
Globalcode – Open4education
Cassandras
Globalcode – Open4education
API
get / get_slice / multiget_slice / get_count / get_range_slices
insert / batch_mutate / remove
describe_keyspaces / describe_cluster_name / describe_version / describe_ring / describe_keyspace
Globalcode – Open4education
Demo
Globalcode – Open4education
Obrigado!