LDAP: Acesso a Diretório sem ou com criptografia habilitado (TLS) através da rede;
LDAPS: Acesso a Diretório com criptografia (SSL) através da rede;
LDAPI: Acesso a Diretório sem criptografia através de Comunicação entre Processos (IPC, Inter-Process Communication);
O teste consiste em medir o tempo necessário para execução de três experimentos com 1, 100 e 1.000 consultas (LDAP SEARCH).
Segue abaixo o script chamado "testeperformance.pl", desenvolvido em PERL, para realização dos testes:
#!/usr/bin/perl -w
($protocolo,$ntentativas) = @ARGV;
if ($protocolo eq "ldap") {
use Net::LDAP;
for (my $i=0; $i < $ntentativas; $i++) {
$ldap = Net::LDAP->new( 'ldap://192.168.0.1' ) or die "$@";
$mesg = $ldap->bind ; # an anonymous bind
$mesg = $ldap->search( # perform a search
base => "dc=testeperformance",
filter => "(cn=fulano1)"
);
$mesg->code && die $mesg->error;
$mesg = $ldap->unbind; # take down session
}
}
if ($protocolo eq "ldaps") {
use Net::LDAPS;
for (my $i=0; $i < $ntentativas; $i++) {
$ldaps = Net::LDAPS->new( 'ldaps://testeperformance',verify => 'allow',
capath => '/etc/ldap/tls/') or die "$@";
$mesg = $ldaps->bind ; # an anonymous bind
$mesg = $ldaps->search( # perform a search
base => "dc=testeperformance",
filter => "(cn=fulano1)"
);
$mesg->code && die $mesg->error;
$mesg = $ldaps->unbind; # take down session
}
}
if ($protocolo eq "ldapi") {
use Net::LDAPI;
for (my $i=0; $i < $ntentativas; $i++) {
$ldapi = Net::LDAPI->new( '/var/run/ldapi' ) or die "$@";
$mesg = $ldapi->bind ; # an anonymous bind
$mesg = $ldapi->search( # perform a search
base => "dc=testeperformance",
filter => "(cn=fulano1)"
);
$mesg->code && die $mesg->error;
$mesg = $ldapi->unbind; # take down session
}
}
Modo de utilizar o script:
# perl testeperformance.pl <PROTOCOLO> <Número de Tentativas>O parâmetro <PROTOCOLO> pode ser "ldap", "ldaps" ou "ldapi". E o <Número de Tentativas> é um inteiro que indica o número de vezes que o script irá executar a consulta.
Obs.: Caso você tenha interesse em testes mais profundos no servidor de Diretório, recomendo utilizar o JMITER.
Experimentos
Foram executados em uma máquina virtual na nuvem, com a seguinte configuração:Processador: Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40GHz
Memória: 2 GB
Disco: 40 GB
Sistema Operacional: Linux Debian - 64 Bits
Sistema de Diretório: OpenLDAP 2.4.46
A operação de busca, SEARCH, é a mais utilizada em Diretórios, por este motivo iremos testar apenas esta operação. O terceiro experimento consiste em medir o tempo de execução de 1.000 consultas, afim de reproduzir ambientes de produção como por exemplo serviço de e-mail.
A implementação é sequencial, ou seja, uma nova busca será executada depois da conclusão da anterior. Este é o comportamento da maioria dos sistemas, mas há casos onde a implementação é paralela, ou seja consultas simultâneas. Não foi considerado consultas simultâneas neste teste de performance.
Experimento 01: Apenas uma consulta
Consiste em medir o tempo necessário para execução de uma consulta (search) nos diferentes protocolos.Exemplo comando executado:
# time perl testeperformance.pl <PROTOCOLO> 1
Resultado experimento com uma tentativa:
LDAP: 0,065s
LDAPS: 0,094s
LDAPI: 0,065s
Experimento 02: 100 consultas sequenciais
Consiste em medir o tempo necessário para execução de 100 consultas (search) repetidas nos diferentes protocolos.Exemplo comando executado:
# time perl testeperformance.pl <PROTOCOLO> 100
Resultado experimento com uma tentativa:
LDAP: 0,195s
LDAPS: 0,749s
LDAPI: 0,155s
Experimento 03: 1.000 consultas sequenciais
Consiste em medir o tempo necessário para execução de 1.000 consultas (search) repetidas nos diferentes protocolos.Exemplo comando executado:
# time perl testeperformance.pl <PROTOCOLO> 1000
Resultado experimento com uma tentativa:
LDAP: 1,292s
LDAPS: 6,833s
LDAPI: 0,996s
Resumo dos experimentos
Teste de Performance: LDAP vs LDAPS vs LDAPI |
Conclusão
Como era de se esperar, o LDAPS é até cinco vezes mais lento que o LDAP, por causa dos procedimentos necessários para segurança (Criptografia).O resultado que surpreendeu foi a agilidade do LDAPI, que chegar ser 20% superior ao protocolo padrão. A justificativa é que IPC não precisa se preocupar com as validações de rede (CHECKSUM, MTU, encapsulamento, cabeçalho, endereçamento).