Introduzido o servidor HTTP hinsightd usando o subsistema Linux io_uring

Um servidor HTTP hinsightd compacto foi publicado, notável por usar a interface I/O assíncrona io_uring fornecida no kernel do Linux. O servidor oferece suporte ao protocolo HTTP/1.1 e foi projetado para baixo consumo de recursos, ao mesmo tempo em que fornece funcionalidade muito necessária. Por exemplo, o hinsightd oferece suporte a TLS, proxy reverso (rproxy), armazenamento em cache de conteúdo gerado dinamicamente no sistema de arquivos local, compactação de dados on-the-fly, reinicialização sem conexão, conexão de manipuladores de solicitação dinâmica usando mecanismos FastCGI e CGI. O código do projeto é escrito em linguagem C e distribuído sob a licença BSD.

Para processar a configuração, escrever adições e criar manipuladores de solicitação, é fornecida a capacidade de usar a linguagem Lua, enquanto esses manipuladores podem ser definidos diretamente no arquivo de configuração do servidor. Na forma de plug-ins, recursos como alteração do formato de log, vinculação de logs individuais a hosts virtuais, definição de uma estratégia de balanceamento de carga, autenticação HTTP, regravação de URL e trabalho agendado agendado (por exemplo, atualização de certificados Let's Encrypt) são implementados no forma de plug-ins.

O servidor vem com uma biblioteca para integrar a funcionalidade do hinsightd em seus aplicativos. O Hinsightd também inclui funcionalidade integrada para enviar solicitações HTTP a partir da linha de comando, por exemplo, para carregar uma página, você pode executar "hinsightd -d URL". O servidor é muito compacto e leva cerca de 200KB compilado (100KB executável e 100KB de biblioteca compartilhada). As dependências externas incluem apenas libc, lua, liburing e zlib e, opcionalmente, openssl/libressl e ffcall.

Os planos para desenvolvimento futuro incluem a capacidade de armazenar arquivos compactados no cache, isolamento de sandbox com base na filtragem de chamadas do sistema e no uso de namespaces, gerenciamento de largura de banda (modelagem de tráfego), multithreading, tratamento de erros aprimorado e definição de hosts virtuais com base em máscaras.

Os resultados do teste de desempenho sintético (sem otimizações na configuração como está) pelo utilitário ab ao executar 250 e 500 (entre colchetes) solicitações paralelas ("ab -k -c 250 -n 10000 http://localhost/"):

  • insightsd/0.9.17 - 63035.01 solicitações por segundo (54984.63)
  • lighttpd/1.4.67 - 53693.29 solicitações por segundo (1613.59)
  • Apache/2.4.54 - 37474.10 solicitações por segundo (34305.55)
  • Caddy/2.6.2 - 35412.02 solicitações por segundo (33995.57)
  • nginx/1.23.2 - 26673.64 solicitações por segundo (26172.73)

Fonte: opennet.ru

Adicionar um comentário