SlideShare uma empresa Scribd logo
1 de 30
Baixar para ler offline
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

Mais conteúdo relacionado

Mais procurados

Google App Engine e PHP
Google App Engine e PHPGoogle App Engine e PHP
Google App Engine e PHPLuiz Messias
 
Conheça o Quarkus Java: Supersonic Subatomic Java
Conheça o Quarkus Java: Supersonic Subatomic JavaConheça o Quarkus Java: Supersonic Subatomic Java
Conheça o Quarkus Java: Supersonic Subatomic JavaMarcus Paulo
 
Introdução Java virtual machine
Introdução Java virtual machineIntrodução Java virtual machine
Introdução Java virtual machineBruno Coan
 
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...Renato Groff
 
Lighting Talk - Apache Cassandra
Lighting Talk - Apache CassandraLighting Talk - Apache Cassandra
Lighting Talk - Apache CassandraRafael Domingues
 
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...Renato Groff
 

Mais procurados (6)

Google App Engine e PHP
Google App Engine e PHPGoogle App Engine e PHP
Google App Engine e PHP
 
Conheça o Quarkus Java: Supersonic Subatomic Java
Conheça o Quarkus Java: Supersonic Subatomic JavaConheça o Quarkus Java: Supersonic Subatomic Java
Conheça o Quarkus Java: Supersonic Subatomic Java
 
Introdução Java virtual machine
Introdução Java virtual machineIntrodução Java virtual machine
Introdução Java virtual machine
 
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
 
Lighting Talk - Apache Cassandra
Lighting Talk - Apache CassandraLighting Talk - Apache Cassandra
Lighting Talk - Apache Cassandra
 
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
 

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

Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2PrinceGuru MS
 
Bancos orientados a colunas (Cassandra)
Bancos orientados a colunas (Cassandra) Bancos orientados a colunas (Cassandra)
Bancos orientados a colunas (Cassandra) Otávio Santana
 
Desenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveisDesenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveiselliando dias
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHPFelipe Ribeiro
 
Aws sao paulo summit 2015 elasti cache avancado
Aws sao paulo summit 2015   elasti cache avancadoAws sao paulo summit 2015   elasti cache avancado
Aws sao paulo summit 2015 elasti cache avancadoAmazon Web Services LATAM
 
Tdc 2013 eric lemes - integracoes entre sistemas-2
Tdc 2013   eric lemes - integracoes entre sistemas-2Tdc 2013   eric lemes - integracoes entre sistemas-2
Tdc 2013 eric lemes - integracoes entre sistemas-2Eric Lemes
 
Bancos de dados No-SQL e afins
Bancos de dados No-SQL e afinsBancos de dados No-SQL e afins
Bancos de dados No-SQL e afinsdcarneir
 
NoSQL - Caelum Day 2009
NoSQL - Caelum Day 2009NoSQL - Caelum Day 2009
NoSQL - Caelum Day 2009Nico Steppat
 
TDC2012 - Sua aplicação JAVA flutuando nas nuvens
TDC2012 - Sua aplicação JAVA flutuando nas nuvensTDC2012 - Sua aplicação JAVA flutuando nas nuvens
TDC2012 - Sua aplicação JAVA flutuando nas nuvensDextra
 
TDC2012 - Sua aplicação JAVA flutuando nas nuvens
TDC2012 - Sua aplicação JAVA flutuando nas nuvensTDC2012 - Sua aplicação JAVA flutuando nas nuvens
TDC2012 - Sua aplicação JAVA flutuando nas nuvensLeandro Guimarães
 
Primeiros passos com o Cassandra
 Primeiros passos com o Cassandra  Primeiros passos com o Cassandra
Primeiros passos com o Cassandra Otávio Santana
 
PHP Experience 2016 - [Palestra] Rumo à Certificação PHP
PHP Experience 2016 - [Palestra] Rumo à Certificação PHPPHP Experience 2016 - [Palestra] Rumo à Certificação PHP
PHP Experience 2016 - [Palestra] Rumo à Certificação PHPiMasters
 
DBA Brasil 2.0 NOSql Apache Cassandra para DBAs
DBA Brasil 2.0   NOSql Apache Cassandra para DBAsDBA Brasil 2.0   NOSql Apache Cassandra para DBAs
DBA Brasil 2.0 NOSql Apache Cassandra para DBAsRonaldo Leite Martins
 
HA em PostgreSQL: O Elefante disponível para além do infinito
HA em PostgreSQL: O Elefante disponível para além do infinitoHA em PostgreSQL: O Elefante disponível para além do infinito
HA em PostgreSQL: O Elefante disponível para além do infinitoelliando dias
 
DevOps containers x86 - Baremetal, Virtual e Cloud (pt_br)
DevOps containers x86 - Baremetal, Virtual e Cloud (pt_br)DevOps containers x86 - Baremetal, Virtual e Cloud (pt_br)
DevOps containers x86 - Baremetal, Virtual e Cloud (pt_br)Caio Candido
 
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Marcos William Valentini
 

Semelhante a Avaliando o Apache Cassandra como cache distribuido no SPC Brasil - NoSQLBR (20)

Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
 
Bancos orientados a colunas (Cassandra)
Bancos orientados a colunas (Cassandra) Bancos orientados a colunas (Cassandra)
Bancos orientados a colunas (Cassandra)
 
Desenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveisDesenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveis
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHP
 
Aws sao paulo summit 2015 elasti cache avancado
Aws sao paulo summit 2015   elasti cache avancadoAws sao paulo summit 2015   elasti cache avancado
Aws sao paulo summit 2015 elasti cache avancado
 
Tdc 2013 eric lemes - integracoes entre sistemas-2
Tdc 2013   eric lemes - integracoes entre sistemas-2Tdc 2013   eric lemes - integracoes entre sistemas-2
Tdc 2013 eric lemes - integracoes entre sistemas-2
 
Cakephp 2.0 - O que mudou
Cakephp 2.0 - O que mudouCakephp 2.0 - O que mudou
Cakephp 2.0 - O que mudou
 
Bancos de dados No-SQL e afins
Bancos de dados No-SQL e afinsBancos de dados No-SQL e afins
Bancos de dados No-SQL e afins
 
NoSQL - Caelum Day 2009
NoSQL - Caelum Day 2009NoSQL - Caelum Day 2009
NoSQL - Caelum Day 2009
 
TDC2012 - Sua aplicação JAVA flutuando nas nuvens
TDC2012 - Sua aplicação JAVA flutuando nas nuvensTDC2012 - Sua aplicação JAVA flutuando nas nuvens
TDC2012 - Sua aplicação JAVA flutuando nas nuvens
 
TDC2012 - Sua aplicação JAVA flutuando nas nuvens
TDC2012 - Sua aplicação JAVA flutuando nas nuvensTDC2012 - Sua aplicação JAVA flutuando nas nuvens
TDC2012 - Sua aplicação JAVA flutuando nas nuvens
 
slides
slidesslides
slides
 
Primeiros passos com o Cassandra
 Primeiros passos com o Cassandra  Primeiros passos com o Cassandra
Primeiros passos com o Cassandra
 
PHP Experience 2016 - [Palestra] Rumo à Certificação PHP
PHP Experience 2016 - [Palestra] Rumo à Certificação PHPPHP Experience 2016 - [Palestra] Rumo à Certificação PHP
PHP Experience 2016 - [Palestra] Rumo à Certificação PHP
 
MySQL - the database
MySQL - the databaseMySQL - the database
MySQL - the database
 
DBA Brasil 2.0 NOSql Apache Cassandra para DBAs
DBA Brasil 2.0   NOSql Apache Cassandra para DBAsDBA Brasil 2.0   NOSql Apache Cassandra para DBAs
DBA Brasil 2.0 NOSql Apache Cassandra para DBAs
 
HA em PostgreSQL: O Elefante disponível para além do infinito
HA em PostgreSQL: O Elefante disponível para além do infinitoHA em PostgreSQL: O Elefante disponível para além do infinito
HA em PostgreSQL: O Elefante disponível para além do infinito
 
De 1 a 1.000.00 de usuários
De 1 a 1.000.00 de usuáriosDe 1 a 1.000.00 de usuários
De 1 a 1.000.00 de usuários
 
DevOps containers x86 - Baremetal, Virtual e Cloud (pt_br)
DevOps containers x86 - Baremetal, Virtual e Cloud (pt_br)DevOps containers x86 - Baremetal, Virtual e Cloud (pt_br)
DevOps containers x86 - Baremetal, Virtual e Cloud (pt_br)
 
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
 

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

  • 1. Apache Cassandra como cache distribuido @julioviegas Globalcoder Globalcode – Open4education
  • 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
  • 7. Cassandras 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
  • 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