Mutación Linux

¿Qué es el servidor Apache en detalle?

Apache es un servidor HTTP de código abierto que puede ejecutarse en la mayoría de los sistemas operativos de computadoras. Debido a su multiplataforma y seguridad (Nota 1), es ampliamente utilizado y actualmente es uno de los software del lado del servidor web más populares. Es rápido, confiable y extensible a través de una API simple, y se pueden compilar intérpretes como Perl/Python en el servidor.

Historia

Street Hooligan

Fue desarrollado originalmente en el Centro Nacional del Programa de Computación Avanzada de la Universidad de Illinois en Urbana-Champaign. Desde entonces, los miembros de la comunidad de código abierto Apache han seguido creciendo. Street Gangster

Los servidores tienen fama de ser fiables y dignos de confianza y ya se utilizan en más de la mitad de los sitios web de Internet, especialmente en casi todos los sitios web más populares y visitados.

Originalmente, Apache era sólo una opción de código abierto para el servidor web Netscape (ahora Sun

One). Poco a poco empezó a mejorar en funcionalidad y velocidad. Supera a otros servidores HTTP basados ​​en Unix. Apache ha sido el servidor HTTP más popular en Internet desde abril de 1996: en mayo de 1999, se ejecutaba en el 57% de los servidores web; en julio de 2005, ese porcentaje había aumentado al 69%.

Trabajo

El autor afirma que el nombre fue elegido originalmente porque era fácil de recordar, pero la explicación más popular es que el nombre proviene del hecho de que Apache se desarrolló a principios de 1995.

Hou fue modificado usando el código de NCSAHTTPd1.3, el servidor HTTP más popular en ese momento, por lo que era un servidor "parcheado (A)

bits and Pieces)". Pero las preguntas frecuentes en el sitio web del órgano de servicio explican esto: "El nombre 'Apache' es para conmemorar a un indio americano llamado Apache (hindi).

Uno de los pueblos indígenas, es conocido por tener excelentes estrategias de combate. y paciencia infinita. "En cualquier caso, la rama Apache2.x no contiene ningún código NCSA.

Características

Street Hooligan

Admite muchas funciones, la mayoría de las cuales se implementan a través de módulos compilados. Estas características van desde compatibilidad con lenguajes de programación del lado del servidor hasta esquemas de autenticación. Algunas interfaces de lenguajes comunes admiten Perl, Python, Tcl y PHP. Los módulos de autenticación comunes incluyen mod_access, mod_auth y mod_digest. Otros ejemplos son la compatibilidad con SSL y TLS.

(mod_ssl), módulo proxy, reescritura de URL muy útil (implementada a través de mod_rewrite), archivos de registro personalizados.

(mod_log_config) y soporte de filtrado (mod_include y .

mod_ext_filter) Los registros de Apache se pueden analizar a través de un navegador web utilizando los scripts gratuitos AWStats o Visitantes.

Versión 2.x

La versión 2.x de Apache ha realizado importantes mejoras con respecto a la versión 1.x de Apache. Esto incluye: subprocesos, mejor soporte para plataformas que no son UNIX como Windows, nueva API de Apache y soporte para IPv6.

Evaluación

En agosto de 2004, PCMagazine 2004 seleccionó los 10 mejores productos de software de los últimos 30 años.

Algunos de ellos tienen la historia más gloriosa o son los más creativos. Su evaluación de Apache es: Tercer lugar: Apache (apache, introducido en 1995) Apache ha evolucionado actualmente.

Se convierte en un software “ligero”, una combinación de Linux, Apache, MySQL y PHP. Se trata de un proyecto de software de código abierto que ha supuesto una grave amenaza para la estrategia ".NET" de Microsoft.

En particular, el servidor web Apache permite a los usuarios experimentar plenamente la estabilidad, confiabilidad y personalización del desarrollo de software de código fuente.

Cuando Apple.com evalúa Apache,

Apache es una parte importante del panorama en evolución del software de servidor. Es gratis, pero no tiene precio. Street Hooligan

Es un tesoro absoluto en el movimiento de recursos abiertos, porque no es una patente personal sino que es gratuito y abierto al público. Una vez que tienes el código fuente, los programadores son libres de hacer lo que quieran, y cuando otros programadores toman el control, se les puede asignar el mismo trabajo.

Autoridad para cambiar y modificar su propio código fuente.

Anotar...

Aunque constantemente se descubren nuevas vulnerabilidades, siempre se pueden solucionar rápidamente debido a su naturaleza de código abierto. En general, su seguridad es bastante alta.

()AddHandlercgi-script.cgi

AddHandlerserver-parsed.shtml

Sethandlercgi-script

AddHandler define qué extensión utiliza cual descripción de cadena.

Todos los archivos en el directorio especificado por SetHandler se describen mediante esta cadena.

Los comandos que menciono aquí están muy relacionados con su estructura. La relación entre controladores y tipos se describe a continuación. Muchas cosas no se pueden ver con claridad desde fuera. A continuación, lo miramos desde dentro.

Estructura básica del programa

-

Apache es muy multiplataforma. Para lograr este objetivo y simplificar la carga de los escritores de módulos, Apache completa muchas funciones básicas, como IO y asignación de memoria, que son independientes de la plataforma específica. También hay algunas rutinas útiles como Hashtable y Array. En todo el sistema, Apache tiene como punto básico utilizar estructuras y algoritmos simples tanto como sea posible, lo que no solo es fácil de entender y mantener, sino que también mejora su estabilidad.

Existe

En sistemas UNIX, Apache usa un modelo multiproceso y en Windows, usa un modelo multiproceso. En el modelo multiproceso, sus procesos secundarios manejan las solicitudes de los clientes y el proceso principal se utiliza para administrar los procesos secundarios. Cuando el sistema está sobrecargado, el proceso principal iniciará varios procesos secundarios más. Cuando el sistema está inactivo, el proceso principal eliminará varios procesos secundarios.

El número de procesos secundarios está entre "MinSpareServers" y "MaxSpareServers". Además, la cantidad de solicitudes que cada subproceso puede manejar es limitada.

Esto puede solucionar problemas como pérdidas de memoria. Todo el estado del proceso se registra en la memoria compartida. Dado que el estado de cada proceso se registra en una pequeña parte de la memoria y, por lo general, solo lee y escribe en esta memoria, Apache no utiliza ningún mecanismo de sincronización.

Apache utiliza varios modelos de servidor multiproceso mencionados en el libro de Richard Steve y elige utilizar diferentes métodos en diferentes sistemas según sus características:

Aceptar:

Solo cuando se implementa la aceptación a nivel del kernel, es posible bloquear durante la aceptación.

2. Seleccionar:

Bloquear durante la selección.

3.mutex/lock_file:

Utilice mutex o lock_file para excluir mutuamente la aceptación.

Tres

Ambos métodos requieren bloqueo, pero la diferencia es que el bloqueo es diferente. Los dos primeros métodos causarán el llamado problema del grupo gigante: múltiples procesos bloqueados en el mismo recurso se activan al mismo tiempo, lo que provoca una renovada competencia.

Sin embargo, según la evaluación de Richard Steve, el primer método es el más rápido, el segundo es el segundo y el tercero es el más lento. De hecho, el tercer método también tendrá un problema de grupo gigante en Linux.

Aunque Apache no enfatiza el rendimiento, eso no significa que no le presten atención. Por el contrario, Apache cree que es confiable en el lado del servidor, pero el rendimiento de Apache sigue siendo bueno.

¿Qué es más rápido, 30 solicitudes de redis o 30 solicitudes de base de datos?

Base de datos de memoria pura, si es solo un valor clave simple, la memoria no es el cuello de botella. En términos generales, las búsquedas de hash pueden alcanzar el orden de millones de veces por segundo. El cuello de botella es la E/S de la red.

De acuerdo con su medición de 10000/s, el cliente y redis deben implementarse en dos máquinas diferentes y solicitar redis sincrónicamente. Cada solicitud debe enviarse a través de la red a la máquina donde se encuentra Redis y luego esperar a que Redis devuelva datos.

La mayor parte del tiempo se dedica a la transmisión por red.

Si coloca Redis y el cliente en la misma máquina, el retraso de la red será menor. Generalmente, puede alcanzar 60.000 veces por segundo o incluso más, dependiendo del rendimiento de la máquina.

Los bloqueos no son el principal factor que afecta al rendimiento.

El rendimiento del bloqueo de subprocesos (mutex_lock) solo disminuirá cuando encuentre conflictos, pero en general, la probabilidad de encontrar conflictos es muy baja.

Si se trata simplemente de un simple bloqueo y desbloqueo, la velocidad es muy rápida, decenas de millones de veces por segundo no es un problema.

Memcache utiliza muchos bloqueos internamente y no ha visto ninguna degradación del rendimiento.

Los subprocesos no son un factor importante que afecte el rendimiento.

En cuanto al primer punto, en términos generales, la velocidad a la que el programa procesa los datos de la memoria es mucho mayor que la velocidad a la que los recibe la tarjeta de red.

La ventaja de utilizar subprocesos es que se pueden procesar varias conexiones al mismo tiempo, lo que puede mejorar la velocidad de respuesta en casos extremos.

Usar epoll o libevent, etc. Porque la programación IO asincrónica sin bloqueo solo puede hacer esto.

Correspondiente a esto está la programación IO de bloqueo síncrono, que utiliza múltiples procesos o subprocesos para manejar múltiples conexiones, como Apache.

En general, el rendimiento del modelo IO asincrónico sin bloqueo es mucho mayor que el del modelo IO con bloqueo síncrono. Puede consultar la comparación entre nginx y apache.

Libevent no es más lento que ae_event implementado por el propio redis. La razón del código grande es que ae_event solo implementa las funciones requeridas por redis, mientras que libevent tiene más funciones, como temporizadores más rápidos, modelos de bufferevent. Incluso protocolos DNS y HTTP propios.

Si bien libevent es más general, redis solo se centra en la plataforma Linux. Finalmente, la pregunta más importante, ¿dónde está?

1. Operación de memoria pura 2. IO asincrónica sin bloqueo

¿Cómo utilizar los semáforos proporcionados por Linux para lograr la exclusión mutua y la sincronización de procesos?

Establezca el valor inicial del mutex en 1, que es P (mutex) antes de que el proceso realice la operación y V (mutex) después de que se complete la operación.

La operación p disminuye el mutex en 1, si es mutuamente excluyente

(He escuchado una respuesta sobre operaciones fotovoltaicas antes, ¿crees que es útil?)