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 :-)

Uma abordagem pragmática sobre LDAP e Memcached

  • 1.
    Mobimail: Uma abordagempragmática sobre LDAP e Memcached Otávio Fernandes Arquitetura de Email <otavio.fernandes@locaweb.com.br>
  • 2.
  • 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ãoum SQL-like? Porque é relacional; Porque tem dificuldades ao escalar; Vide o modelo de binlog (MySQL);
  • 5.
    Exemplo do MySQLBinlog 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 deum 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ãosignifica que não é possível. O Mobimail exige uma solução mais simples e adequada.
  • 8.
    Porque LDAP? Estruturado emforma 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 Painelde 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>
  • 11.
  • 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 parao 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çãodo MD5, conseguimos ter uma árvore balanceada (horizontal vs vertical).
  • 18.
    Memcached Não existe servidorcentralizado; 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);
  • 20.
  • 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 amudança é que haverá muito mais consultas ao Memcached/LDAP. Necessidade de escalar horizontalmente.
  • 23.