Apache Cassandra como
   cache distribuido
       @julioviegas
        Globalcoder


                      Globalcode – Open4education
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
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 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
Cassandras




             Globalcode – Open4education
Cache no SPC Brasil
 Avaliando NoSQL tipo chave+valor
   Memcached
   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!




            Globalcode – Open4education

Avaliando o Apache Cassandra como cache distribuido no SPC Brasil - NoSQLBR

  • 1.
    Apache Cassandra como cache distribuido @julioviegas Globalcoder Globalcode – Open4education
  • 2.
    Palestrante ~15 anostrabalhando 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 noSPC Brasil Apache Cassandra Arquitetura Modelo de dados Configuracoes APIs Demo Globalcode – Open4education
  • 4.
    Cache no SPCBrasil ~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 SPCBrasil 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 SPCBrasil 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
  • 7.
    Cassandras Globalcode – Open4education
  • 8.
    Cache no SPCBrasil Avaliando NoSQL tipo chave+valor Memcached Redis Voldemort APACHE CASSANDRA! Porem... Globalcode – Open4education
  • 9.
    Apache Cassandra Criadopelo 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: muitoIO 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 etolerancia 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
  • 12.
    Cassandras 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
  • 17.
    Cassandras 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
  • 21.
    Configuracoes $CASSANDRA_HOME/conf/storage-conf.xml ClusterName AutoBootstrap Keyspace – ColumnFamily – ReplicaPlacementStrategy & EndPointSnitch: Unaware, Rack ou Datacenter – ReplicationFactor Globalcode – Open4education
  • 22.
    Cassandras 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
  • 25.
    API SlicePredicate SliceRange KeyRange KeySlice Mutation Deletion Globalcode – Open4education
  • 26.
    API AuthenticationRequest NotFoundException InvalidRequestException UnavailableException TimedOutException TapplicationException AuthenticationException/AuthorizationException Globalcode – Open4education
  • 27.
    Cassandras Globalcode – Open4education
  • 28.
    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
  • 29.
    Demo Globalcode – Open4education
  • 30.
    Obrigado! Globalcode – Open4education