Estaba leyendo un hilo de Hacker News donde un usuario publica un enlace de 2011 explicando que IIS es mucho más rápido que la mayoría de los otros servidores web (* nix). Otro usuario responde, explicando que IIS obtiene esa ventaja al tener un módulo de kernel llamado HTTP.sys . Que yo sepa, la mayoría de los otros servidores web populares en 2015 no hacen esto.
Nunca quisiera escribir un servidor web en modo kernel, porque nunca podría confiar en mí mismo para liberarlo de las vulnerabilidades de seguridad (lo que sería menos serio si se ejecutara en un anillo de protección inferior).
Desde la perspectiva del ingeniero de software (a diferencia de un cliente para servidores web), ¿se está ejecutando en modo kernel una decisión de rendimiento inteligente? ¿Se pueden mitigar las preocupaciones de seguridad en el desarrollo de aplicaciones hasta el punto de hacer que un servidor en modo kernel sea una ganancia neta para el consumidor?
fuente
Respuestas:
Http.sys no es tanto un servidor web como un reenviador de proxy. Está diseñado para permitir que muchos servidores web coexistan en una caja de Windows, por lo que puede hacer que IIS ejecute un sitio web, pero también varios servicios WCF que se ejecutan con interfaces http / REST o SOAP, todo en el puerto estándar 80. (es por eso que no puede ejecutar Apache en Windows sin un poco de movimiento, Apache no se ha modificado para que funcione con este sistema de registro, lástima que no se haya hecho más transparente para las aplicaciones y requiera algunas modificaciones bastante complejas para conectarlo).
La forma en que funciona es que registra una URL con ella y la aplicación correspondiente, y cuando se realiza una solicitud http en el puerto 80, http.sys la acepta pero luego pasa la solicitud a la aplicación que esté registrada para manejar ese objetivo URL.
Dudo que un servidor web en modo kernel tenga sentido, incluso si el rendimiento del socket se puede mejorar de esta manera, para realizar cualquier trabajo útil, la lógica de la aplicación todavía se ejecutará en el espacio del usuario, por lo que siempre hay una transición: usted ' Lo he desplazado un poco a lo largo de la pila de llamadas.
fuente
Http.sys no es el único servidor web en modo kernel disponible: en Linux también hay esmoquin . Como ha identificado correctamente, la seguridad es una preocupación con este tipo de servidores, lo que ha llevado a que tux no se incluya en el núcleo principal de Linux (y creo que no está actualizado para las versiones más recientes del núcleo).
Una mejor solución sería el uso de un sistema operativo que no dependa de la protección del hardware para hacer cumplir la seguridad del proceso, por ejemplo, la singularidad de Microsoft: un sistema de este tipo permitiría las ganancias de eficiencia de un servidor en modo kernel sin los riesgos de seguridad. Desafortunadamente, a partir de 2015 no hay sistemas operativos listos para la producción basados en este principio, y AFAIK tampoco está trabajando seriamente en ninguno (el proyecto Singularity fue cancelado).
fuente
Http.sys es de bajo riesgo, ya que no puede ejecutar ninguna copia proporcionada por un tercero.
Http.sys hace algunas tareas.
Actúa como un reenviador de proxy, lo que permite que múltiples procesos respondan a la solicitud a diferentes partes del espacio de nombre HTTP. La respuesta de gbjbaanb cubre esto bien.
Sirve archivos estáticos, directamente desde el caché de archivos de Windows. Esto proporciona una gran velocidad para archivos estáticos de archivos pequeños, ya que no hay cambios de contexto.
Guardará en caché el resultado de cualquier aplicación a la que reenvíe una solicitud HTTP y devolverá el resultado cobrado. La aplicación tiene el control total sobre cuánto tiempo (si corresponde) dura el almacenamiento en caché.
Http.sys está diseñado para hacer las tareas simples MUY rápido, mientras pasa todo lo demás a un proceso en el espacio del usuario.
En respuesta al comentario
El problema es que debe confiar en que Microsoft escribirá un código de kernel complejo para hacer esta pregunta, de lo contrario, decide no usar Windows para el alojamiento web. . Http.sys agrega muy poco al riesgo de errores del núcleo, dado lo complejo que es el núcleo de todos modos.
En todo caso, Http.sys reduce el riesgo, ya que existe una separación tan clara por debajo del código de aplicación y servicio web de "bajo nivel".
En una configuración bien diseñada, la máquina (o servidor virtual) que ejecuta el servidor web tiene un acceso muy limitado al resto de la red, ya que es un objetivo de alto riesgo. Se hace muy poco diferente si el kernel o un servidor web en modo de usuario es pirateado, ya que el servidor no debería tener más "derechos" en la red, entonces el proceso en modo de usuario del servidor web debe hacer su trabajo.
fuente