Foi publicado um servidor HTTP compacto, o hinsightd, notável pelo uso da interface de entrada/saída assíncrona io_uring, disponibilizada no núcleo do Linux. O servidor suporta o protocolo HTTP/1.1 e é projetado para baixo consumo de recursos, enquanto fornece as funcionalidades exigidas. Por exemplo, o hinsightd suporta TLS, proxy reverso (rproxy), cache de conteúdo gerado dinamicamente no sistema de arquivos local, compressão de dados entregues em tempo real, reinício sem desconectar conexões estabelecidas, conexão de manipuladores de requisições dinâmicos através de mecanismos FastCGI e CGI. O código do projeto é escrito em C e é distribuído sob a licença BSD.
Para o processamento da configuração, escrita de complementos e criação de manipuladores de requisições, há a possibilidade de usar a linguagem Lua, permitindo que tais manipuladores possam ser definidos diretamente no arquivo configurações do servidor. Funcionalidades como alteração do formato de gravação em log, vinculação de logs individuais a hosts virtuais, definição de estratégias de balanceamento de carga, autenticação HTTP, reescrita de URL e execução de tarefas programadas (por exemplo, atualização de certificados Let’s Encrypt) são implementadas na forma de plugins.
Juntamente com servidor vem uma biblioteca para integrar as funções do hinsightd em suas aplicações. O hinsightd também inclui funcionalidade integrada para enviar requisições HTTP através da linha de comando; por exemplo, para baixar uma página, pode-se executar o comando “hinsightd -d URL”. O servidor é muito compacto, ocupando cerca de 200KB quando compilado (100KB para o executável e 100KB para a biblioteca compartilhada). Dentre as dependências externas, estão apenas libc, lua, liburing e zlib, além de openssl/libressl e ffcall, opcionalmente.
Entre os planos para o desenvolvimento futuro, é mencionada a possibilidade de armazenamento em cache de arquivos comprimidos, isolamento sandbox baseado na filtragem de chamadas do sistema e uso de espaços de nome, controle de largura de banda (traffic shaping), multithreading, melhor tratamento de erros e definição de hosts virtuais com base em máscaras.
Os resultados dos testes sintéticos de desempenho (sem otimizações na configuração como está) pela ferramenta ab, ao executar 250 e 500 (entre parênteses) requisições simultâneas (“ab -k -c 250 -n 10000 http://localhost/”):
- hinsightd/0.9.17 — 63035.01 requisições por segundo (54984.63)
- lighttpd/1.4.67 — 53693.29 requisições por segundo (1613.59)
- Apache/2.4.54 — 37474.10 requisições por segundo (34305.55)
- Caddy/2.6.2 — 35412.02 requisições por segundo (33995.57)
- nginx/1.23.2 — 26673.64 requisições por segundo (26172.73)
Fonte: opennet.ru
