SlideShare una empresa de Scribd logo
1 de 23
Mobimail: Uma
 abordagem pragmática
sobre LDAP e Memcached

        Otávio Fernandes
      Arquitetura de Email
     <otavio.fernandes@locaweb.com.br>
Mobimail
Nosso objetivo é ter consultas
constantes sobre as informações de
2 milhões de usuários (e crescendo
             rápido).
Afinal, Porque não um
      SQL-like?

  Porque é relacional;

  Porque tem dificuldades ao escalar;

  Vide o modelo de binlog (MySQL);
Exemplo do MySQL Binlog
BINLOG '
fAS3SBMBAAAALAAAAC4BAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=
fAS3SBgBAAAANgAAAGQBAAAQABEAAAAAAAEAA////
AEAAAAFYXBwbGX4AQAAAARwZWFyIbIP
'/*!*/;
### UPDATE test.t
### WHERE
###   @1=1
###   @2='apple'
###   @3=NULL
### SET
###   @1=1
###   @2='pear'
###   @3='2009:01:01'
...
# at 400
#080828 15:03:08 server id 1 end_log_pos 442 	 Delete_rows: table id
17 flags: STMT_END_F

BINLOG '
fAS3SBMBAAAALAAAAJABAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=
fAS3SBkBAAAAKgAAALoBAAAQABEAAAAAAAEAA//4AQAAAARwZWFyIbIP
'/*!*/;
### DELETE FROM test.t
### WHERE
###   @1=1
###   @2='pear'
###   @3='2009:01:01'
A partir de um pequeno exemplo,
 podemos ter idéia do comportamento
   em grande escala. Este é um dos
motivos porque um DB relacional tem
       dificuldades em escalar.
Ter dificuldades não significa que não é
 possível. O Mobimail exige uma solução
        mais simples e adequada.
Porque LDAP?

Estruturado em forma de árvore;

Fácil para replicar, master-master;

Compatibilidade com produtos de
terceiros ( IronPort, CommuniGate,
PowerMTA, etc. );

É a solução adequada para “email”;
Arquitetura


Somente o Painel de Controle escreve
na árvore LDAP;

Réplicas serão feitas sob demanda
(SysAdmins);
locaweb.schema

#   $ mobimail.schema
#
#   1.3.6.1.4.1.34377 - Locaweb PEN
#   1.3.6.1.4.1.34377.2.2.1 Produto Mobimail
#   1.3.6.1.4.1.34377.2.2.1.x Mobimail ObjectClasses
#   1.3.6.1.4.1.34377.2.3.1.x Mobimail Attributes
#
#   @copyright 2009 Locaweb Ltda
#   @author FT-Email <email-tec@locaweb.com.br>
Performance do LDAP
Impasse entre uma árvore mais
horizontal, ou, mais vertical
         (profunda).
Árvores muito rasas (horizontais) vão
   sofre na escrita, pois, o OpenLDAP
atribui um “lock” no nó-pai durante este
                processo.
Árvores profundas (verticais) tem
   problemas com a escrita. Porque
dificulta o processo de indexação, ao
     guardar muitas referências.
A solução para o Mobimail foi MD5.
Utilização de MD5


MD5 ("locaweb.com.br") =
b79f6b6701b3163b8ce6b08ce48db468

cn=locaweb.com.br,cn=b,cn=79,o=Mail,o
u=Locaweb;
Com a utilização do MD5, conseguimos ter
  uma árvore balanceada (horizontal vs
               vertical).
Memcached

Não existe servidor centralizado;

Cada máquina é potencialmente um
servidor de Memcached (consultas e
respostas, somente local);

Novos servidores tem a quantidade de
memória RAM dimensionada para esta
tarefa;
Olhando para os
       fontes
Abstração entre as duas camadas;

Uma única chamada consulta
automaticamente o Memcached e o LDAP;

De forma transparente, é feita a
inclusão de um registro do LDAP para
o Memcached (sempre local);
Um filtro hoje:
Futuro: Malware
       Filter

Não tem Postfix (sem filas de e-
mails);

Acesso direto ao Amavisd-New;

Recursos dedicados a esta tarefa;
A resposta a mudança é que haverá muito
   mais consultas ao Memcached/LDAP.
Necessidade de escalar horizontalmente.
Obrigado :-)

Más contenido relacionado

Similar a Uma abordagem pragmática sobre LDAP e Memcached

Introdução a data warehouse e olap
Introdução a data warehouse e olapIntrodução a data warehouse e olap
Introdução a data warehouse e olapFlavia Martins Bispo
 
Introdução a data warehouse e olap
Introdução a data warehouse e olapIntrodução a data warehouse e olap
Introdução a data warehouse e olapFernando Palma
 
Projeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecordProjeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecordtchandy
 
Indo para o proximo nivel: MCSM e MCA em SQL Server 2012
Indo para o proximo nivel:  MCSM e MCA em SQL Server 2012Indo para o proximo nivel:  MCSM e MCA em SQL Server 2012
Indo para o proximo nivel: MCSM e MCA em SQL Server 2012Fabrício Catae
 
Palestra Ruby on Rails SETA 2008/01
Palestra Ruby on Rails SETA 2008/01Palestra Ruby on Rails SETA 2008/01
Palestra Ruby on Rails SETA 2008/01Douglas Roeder
 
Open ldap linuxcon_working
Open ldap linuxcon_workingOpen ldap linuxcon_working
Open ldap linuxcon_workingLeandro Mendes
 
ClusterizaçãO De AplicaçõEs Php
ClusterizaçãO De AplicaçõEs PhpClusterizaçãO De AplicaçõEs Php
ClusterizaçãO De AplicaçõEs PhpCampus Party Brasil
 
Bancos de dados e jdbc java para desenvolvimento web
Bancos de dados e jdbc   java para desenvolvimento webBancos de dados e jdbc   java para desenvolvimento web
Bancos de dados e jdbc java para desenvolvimento websilvio_sas
 
MySQL Cluster - visão geral
MySQL Cluster - visão geralMySQL Cluster - visão geral
MySQL Cluster - visão geralMySQL Brasil
 
[MinhaVida TechDay] NoSQL
[MinhaVida TechDay] NoSQL[MinhaVida TechDay] NoSQL
[MinhaVida TechDay] NoSQLCleber Dantas
 
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.jsJava script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.jsVinicius Reis
 
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
 

Similar a Uma abordagem pragmática sobre LDAP e Memcached (20)

Oficial
OficialOficial
Oficial
 
Introdução a data warehouse e olap
Introdução a data warehouse e olapIntrodução a data warehouse e olap
Introdução a data warehouse e olap
 
Introdução a data warehouse e olap
Introdução a data warehouse e olapIntrodução a data warehouse e olap
Introdução a data warehouse e olap
 
NoSQL Livre
NoSQL LivreNoSQL Livre
NoSQL Livre
 
Pgbr2013
Pgbr2013Pgbr2013
Pgbr2013
 
Projeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecordProjeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecord
 
NoSQL: Perdas e Ganhos
NoSQL: Perdas e GanhosNoSQL: Perdas e Ganhos
NoSQL: Perdas e Ganhos
 
Indo para o proximo nivel: MCSM e MCA em SQL Server 2012
Indo para o proximo nivel:  MCSM e MCA em SQL Server 2012Indo para o proximo nivel:  MCSM e MCA em SQL Server 2012
Indo para o proximo nivel: MCSM e MCA em SQL Server 2012
 
Palestra Ruby on Rails SETA 2008/01
Palestra Ruby on Rails SETA 2008/01Palestra Ruby on Rails SETA 2008/01
Palestra Ruby on Rails SETA 2008/01
 
Open ldap linuxcon_working
Open ldap linuxcon_workingOpen ldap linuxcon_working
Open ldap linuxcon_working
 
ClusterizaçãO De AplicaçõEs Php
ClusterizaçãO De AplicaçõEs PhpClusterizaçãO De AplicaçõEs Php
ClusterizaçãO De AplicaçõEs Php
 
Clusterização de Aplicações PHP
Clusterização de Aplicações PHPClusterização de Aplicações PHP
Clusterização de Aplicações PHP
 
Bancos de dados e jdbc java para desenvolvimento web
Bancos de dados e jdbc   java para desenvolvimento webBancos de dados e jdbc   java para desenvolvimento web
Bancos de dados e jdbc java para desenvolvimento web
 
MySQL Cluster - visão geral
MySQL Cluster - visão geralMySQL Cluster - visão geral
MySQL Cluster - visão geral
 
Artigo Nosql
Artigo NosqlArtigo Nosql
Artigo Nosql
 
[MinhaVida TechDay] NoSQL
[MinhaVida TechDay] NoSQL[MinhaVida TechDay] NoSQL
[MinhaVida TechDay] NoSQL
 
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.jsJava script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
 
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
 
Web Scale Data Management
Web Scale Data ManagementWeb Scale Data Management
Web Scale Data Management
 
Case Kinghost + Elasticsearch
Case Kinghost + ElasticsearchCase Kinghost + Elasticsearch
Case Kinghost + Elasticsearch
 

Uma abordagem pragmática sobre LDAP e Memcached

  • 1. Mobimail: Uma abordagem pragmática sobre LDAP e Memcached Otávio Fernandes Arquitetura de Email <otavio.fernandes@locaweb.com.br>
  • 3. Nosso objetivo é ter consultas constantes sobre as informações de 2 milhões de usuários (e crescendo rápido).
  • 4. Afinal, Porque não um SQL-like? Porque é relacional; Porque tem dificuldades ao escalar; Vide o modelo de binlog (MySQL);
  • 5. Exemplo do MySQL Binlog BINLOG ' fAS3SBMBAAAALAAAAC4BAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ= fAS3SBgBAAAANgAAAGQBAAAQABEAAAAAAAEAA//// AEAAAAFYXBwbGX4AQAAAARwZWFyIbIP '/*!*/; ### UPDATE test.t ### WHERE ### @1=1 ### @2='apple' ### @3=NULL ### SET ### @1=1 ### @2='pear' ### @3='2009:01:01' ... # at 400 #080828 15:03:08 server id 1 end_log_pos 442 Delete_rows: table id 17 flags: STMT_END_F BINLOG ' fAS3SBMBAAAALAAAAJABAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ= fAS3SBkBAAAAKgAAALoBAAAQABEAAAAAAAEAA//4AQAAAARwZWFyIbIP '/*!*/; ### DELETE FROM test.t ### WHERE ### @1=1 ### @2='pear' ### @3='2009:01:01'
  • 6. A partir de um pequeno exemplo, podemos ter idéia do comportamento em grande escala. Este é um dos motivos porque um DB relacional tem dificuldades em escalar.
  • 7. Ter dificuldades não significa que não é possível. O Mobimail exige uma solução mais simples e adequada.
  • 8. Porque LDAP? Estruturado em forma de árvore; Fácil para replicar, master-master; Compatibilidade com produtos de terceiros ( IronPort, CommuniGate, PowerMTA, etc. ); É a solução adequada para “email”;
  • 9. Arquitetura Somente o Painel de Controle escreve na árvore LDAP; Réplicas serão feitas sob demanda (SysAdmins);
  • 10. locaweb.schema # $ mobimail.schema # # 1.3.6.1.4.1.34377 - Locaweb PEN # 1.3.6.1.4.1.34377.2.2.1 Produto Mobimail # 1.3.6.1.4.1.34377.2.2.1.x Mobimail ObjectClasses # 1.3.6.1.4.1.34377.2.3.1.x Mobimail Attributes # # @copyright 2009 Locaweb Ltda # @author FT-Email <email-tec@locaweb.com.br>
  • 12. Impasse entre uma árvore mais horizontal, ou, mais vertical (profunda).
  • 13. Árvores muito rasas (horizontais) vão sofre na escrita, pois, o OpenLDAP atribui um “lock” no nó-pai durante este processo.
  • 14. Árvores profundas (verticais) tem problemas com a escrita. Porque dificulta o processo de indexação, ao guardar muitas referências.
  • 15. A solução para o Mobimail foi MD5.
  • 16. Utilização de MD5 MD5 ("locaweb.com.br") = b79f6b6701b3163b8ce6b08ce48db468 cn=locaweb.com.br,cn=b,cn=79,o=Mail,o u=Locaweb;
  • 17. Com a utilização do MD5, conseguimos ter uma árvore balanceada (horizontal vs vertical).
  • 18. Memcached Não existe servidor centralizado; Cada máquina é potencialmente um servidor de Memcached (consultas e respostas, somente local); Novos servidores tem a quantidade de memória RAM dimensionada para esta tarefa;
  • 19. Olhando para os fontes Abstração entre as duas camadas; Uma única chamada consulta automaticamente o Memcached e o LDAP; De forma transparente, é feita a inclusão de um registro do LDAP para o Memcached (sempre local);
  • 21. Futuro: Malware Filter Não tem Postfix (sem filas de e- mails); Acesso direto ao Amavisd-New; Recursos dedicados a esta tarefa;
  • 22. A resposta a mudança é que haverá muito mais consultas ao Memcached/LDAP. Necessidade de escalar horizontalmente.