Tengo un sitio web que recibe aproximadamente 7k solicitudes por segundo en un servidor nginx. Este servidor maneja reescrituras en un servidor Apache y también sirve archivos estáticos, imágenes, etc. directamente. Los archivos estáticos son la parte más importante allí con aproximadamente 5k solicitudes.
Con una actualización de arquitectura, pienso en usar un servidor de archivos central que exporta un directorio que contiene estos archivos estáticos a través de NFS. No habrá acceso de escritura a estos archivos, por lo que el directorio podría montarse de solo lectura en la máquina nginx. Mi principal preocupación es:
¿NFS es lo suficientemente rápido para esto? ¿Hay un límite en la cantidad de solicitudes que NFS puede manejar? ¿Hay algunas opciones "imprescindibles" cuando se va por este camino?
Bonificación: ¿hay otras alternativas para esta configuración además de NFS?
¡Gracias!
Respuestas:
Al configurar un servidor NFS central, introduce un único punto de falla en su diseño. Eso solo debería ser un factor decisivo. Si no, NFS puede ser lo suficientemente rápido para una carga como esta. Los factores críticos serán tener suficiente RAM para almacenar en caché los archivos, interconexiones de baja latencia (Gig-E o mejor) y sintonización (menos que la anterior).
También debe considerar usar rsync o una herramienta similar para mantener copias locales de las actualizaciones de los archivos estáticos en cada servidor web individual. Otra opción podría ser una solución de servidor SAN o NFS redundante (los cuales serán mucho más complicados y costosos que la idea rsync).
fuente
Uso cachefilesd (y un kernel de Linux reciente, con cachefs) para almacenar en caché los archivos NFS en un HD local. De esta manera, cada lectura en el nfs copiará el archivo a un directorio / var / cache / fs y las siguientes lecturas se entregarán desde allí, con el núcleo comprobando en el nfs si el contenido sigue siendo válido.
De esta manera, puede tener un NFS central, pero sin perder el rendimiento de los archivos locales.
Cachefilesd se encargará de la limpieza de archivos antiguos cuando el tamaño libre / inodes alcance un nivel configurado, por lo que puede servir datos poco comunes del NFS y solicitudes comunes de la HD
Por supuesto, también use un barniz para almacenar en caché las solicitudes más comunes y evitar que el nginx / NFS se publique en ese momento.
Aquí hay un pequeño howto de cachefilesd
fuente
La velocidad depende de muchos factores:
El límite de archivos abiertos a través de NFS es una limitación del sistema operativo host. FreeBSD tiene, por ejemplo, muchas opciones de ajuste diferentes para admitir una gran cantidad de archivos abiertos, pero depende de la cantidad de RAM en su servidor.
Una alternativa a un servidor de archivos central es usar sincronización / replicación entre sus servidores web (como sugiere Chris S). rsync o DRBD pueden ser una excelente opción rentable.
fuente
Aconsejaría contra NFS a menos que pongas algo de caché allí. El caché nginx es mejor que nada, pero Varnish es mejor.
Dicho esto, si su carga cambiara a un contenido más dinámico que estático, será más importante servir archivos de aplicaciones desde el disco local.
Si coloca NFS, asegúrese de tener redundancia.
fuente