Temos aqui um WebService em execução no wildfly 9. O serviço da web está disponível somente em ssl (https) e precisa de certificados de cliente.
Se alterarmos a configuração do wildfly que o wildfly se comunicará diretamente com o cliente (significa que o wildfly irá lidar com as conexões https e também verificará os certificados do cliente) em nosso testcase, um cliente pode fazer entre 12 e 15 solicitações por segundo (incluindo recebendo as respostas do servidor).
Mas se colocarmos na frente do wildfly um proxy do apache httpd (V2.2 no CentOS6) (que então manipulará o material SSL do https e verificará os certificados do cliente), o cliente só poderá (no mesmo testcase) 2 até 5 solicitações por segundo.
A configuração do proxy httpd é:
Listen 58443
NameVirtualHost *:58443
<VirtualHost *:58443>
# server SSL settings
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder On
SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AES:RSA+3DES:!ADH:!AECDH:!MD5:!DSS
# Server Certificate:
SSLCertificateFile /etc/letsencrypt/live/mydomain.de/cert.pem
# Server Private Key:
SSLCertificateKeyFile /etc/letsencrypt/live/mydomain.de/privkey.pem
# Server Certificate Chain:
SSLCertificateChainFile /etc/letsencrypt/live/mydomain.de/chain.pem
Header always set Strict-Transport-Security "max-age=315360000"
# Client certifacte authentication
# Certificate Authority (CA):
SSLCACertificateFile /etc/pki/webapp/cacert.pem
SSLVerifyClient require
SSLVerifyDepth 2
# proxy stuff
<Proxy *>
AddDefaultCharset Off
Order Allow,Deny
Allow from all
</Proxy>
# proxy to wildfly instance
ProxyPass /myappSrv http://localhost:58080/myappSrv min=3 smax=5 ttl=600 iobuffersize=163840
# ProxyPass /myappSrv http://localhost:58080/myappSrv disablereuse=on
# ProxyPassReverse /myappSrv http://localhost:58080/myappSrv
</VirtualHost>
Já brincamos com vários valores de configuração do httpd:
HostnameLookups
está definido como off
MinSpareServers
, MaxSpareServers
, ThreadsPerChild
, ...) AllowOverride
está definido como none
Tudo o que fizemos não trouxe nenhuma melhoria significativa. Mas eu não posso acreditar que o desempenho é tão ruim quando usamos um proxy httpd. Também não sei o que é a garrafa leck: o proxy httpd? Ou a verificação do certificado do cliente do httpd?