O novo valve Crawler Session Manager para o Tomcat 7 pode ajudar muito os administradores de aplicações web públicas, nas quais o excesso de sessões é um problema complexo que frequentemente passa despercebido – pois é difícil distinguir usuários legítimos de robôs de busca e outros sistemas.
Mark Thomas, responsável pelo site de pendências da Apache Software Foundation (que usa o JIRA executando sobre o Tomcat 7), apresentou uma experiência interessante em seu blog:
Alguns meses atrás, ao examinar a interface de gerenciamento do JIRA, notei que havia aproximadamente 100 mil sessões concorrentes. Dado que existem apenas 60 mil usuários cadastrados e menos de 5 mil ativos por mês, o número me pareceu realmente exagerado.
A investigação do problema revelou um suspeito inusitado:
O log de acessos mostrou que quando os indexadores (ex.: googlebot, bingbot etc.) percorriam o site do JIRA, criavam uma nova sessão a cada requisição. Para nossa instância do JIRA, isso significava que 95% das sessões eram abandonadas pelos bots após uma requisição.
A mudança gerou resultados drásticos. Somente implementar a valve no Tomcat que hospeda o JIRA em issues.apache.org reduziu 20 vezes a média de sessões concorrentes, de cerca de 100 mil para 5 mil.
O que a valve Crawler Session Manager faz é não iniciar uma segunda sessão se o cabeçalho HTTP user-agent casar com uma expressão regular, que por padrão captura os buscadores mais conhecidos (“*[bB]ot.*|.*Yahoo! Slurp.*|.*Feedfetcher-Google.*”
). A configuração do valve permite que a lista seja estendida para outros buscadores e clientes que não gerenciam cookies, como é frequentemente o caso de clientes REST.
Além de implementar a especificação de Servlets 3.0, o novo Tomcat inclui funcionalidades importantes para o desenvolvimento de aplicações web públicas, como o filtro de proteção contra ataques Cross-Site Request Forgery (CSRF) e a detecção de vazamentos de memória. Para conhecer mais sobre estes componentes, visite o site oficial do projeto e a comunidade Tomcat Expert, que frequentemente publica detalhes sobre o funcionamento interno do Tomcat.